2017-04-01 67 views
1

我需要一个这样的例子: 我有一个画布。它会不断刷新,我想让这个画布的区域可点击,就像画布的某个矩形区域可点击,但不是整个画布。设置一个可以点击的画布的某个区域

+0

请尝试重组你的问题。 “我希望在这幅画布上出现一个Jbutton,当它被点击或者徘徊时会发生变化”对我来说并不清楚。 – c0der

+0

我有一个画布。它会不断刷新,我想让这个画布的区域可点击,就像画布的某个矩形区域可点击,但不是整个画布。 – conku

+0

谢谢。这更清楚。请相应地编辑您的问题。 – c0der

回答

2

一个简单的方法来做到这一点是添加透明的按钮,你想要的“背景”是可点击:

import java.awt.Color; 
import java.awt.Cursor; 
import java.awt.Dimension; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.WindowConstants; 

public class APanel extends JPanel{ 

    APanel(){ 
     setPreferredSize(new Dimension(600,400)); 
     setBackground(Color.YELLOW); //panel color to make it distinct 

     //add button 
     JButton btn = new JButton(); 
     btn.setPreferredSize(new Dimension(100,30)); //use layout manager to place it where you want 
     btn.setContentAreaFilled(false);//make btn transparent 
     btn.setCursor(new Cursor(Cursor.HAND_CURSOR));//change button cursor 
     //optionally : remove border by btn.setBorder(null); 

     btn.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       System.out.println("button pressed !"); 
      } 
     }); 
     add(btn); 
    } 

    public static void main(String[] args){ 

     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 

     JPanel panel = new APanel(); 
     frame.getContentPane().add(panel); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 
+0

我放弃了画布,只是将其画到面板上,并将面板上的按钮定位到面板上的任何位置,并将按钮添加到图像中。现在看起来很棒!谢谢您的帮助。 – conku

2

可以使用LayerLayout,它可以在上面添加彼此

甲分层窗格的部件是一个Swing容器,提供了一个第三维 用于定位组件:深度,也称为Z次序。将分量 添加到分层窗格中时,可以将其深度指定为整数。 数字越大,组件越靠近容器内的“顶部”位置 。如果组件重叠,则“较近”的组件在较低深度处绘制在组件顶部。深度相同的组件之间的关系 由它们在深度内的位置 确定。

+0

这也帮助了我,谢谢! – conku