目前我已经制作了文本标签并将它们放在我的窗口上,指示他们在mouseClick上执行操作,但这增加了我的编码,因为我有几个位置,用户可以更改颜色。下面是我提出的标签代码之一;
JLabel label_1 = new JLabel("");
label_1.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
contentPane.setBackground(Color.CYAN);
}
});
label_1.setEnabled(false);
label_1.setBounds(0, 0, 19, 19);
contentPane.add(label_1);
但是这会给我的程序添加不必要的代码,我想要的是当用户点击窗口的一部分时说中间(约1 cm点)给出或者花几毫米的背景颜色变化。
我认为可以通过在内容窗格本身上添加mouseClicked监听器,然后在点击一个点后告诉代码将颜色更改为contentPane.setBackground(Color.CYAN);我想要改变颜色的2个点。
我无法弄清楚要告诉我的代码,以便在点击特定区域时更改窗口的背景颜色。
感谢。
- - - - - - - - 编辑
我目前正在使用contentPane在我的窗口上添加元素,我的代码目前看起来像这样
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 584, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
我不能只使用此方法向用户点击的getBound位置添加鼠标listenter事件,例如
将这段代码添加到我之前添加了contentPane
的代码中 contentPane.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
}
并在public void mouseClicked(MouseEvent e){}添加if语句,即if(getBound(0,0,20,20))contentPane.setBackground(Color.CYAN);
有些事情,这是行不通的。
答案 0 :(得分:3)
如果我理解了正确意义上的查询,您只需点击所述Content Pane
的某个指定位置,就可以在Content Pane
上设置背景颜色。如果是这种情况,请查看此示例代码,并尝试点击TOP RIGHT CORNER
的{{1}},LEFT BOTTOM CORNER
或CENTER
以查看颜色变化。它只创建三个Content Pane
对象,指定Rectangle
上的每个区域,可以单击以更改背景颜色。只需通过调用Content Pane
方法检查 X坐标中是否包含 X,Y坐标。
rectangle.contains(int x, int y)
答案 1 :(得分:1)
只为整个屏幕添加一个监听器可能无法正常工作,因为屏幕上的每个对象都会在单击时捕获并使用该事件,而不会将其传递到更高级别。因此,如果您有一个带有标签的Panel,并且您单击标签,它将捕获MouseEvent并且不会将其传递给Panel。
但你可以通过这样做来解决这个问题:
创建一个MouseListener,在创建时传递底层面板/窗格。在mouseClicked做类似的事情:
public void mouseClicked(MouseEvent e) {
bottomLevelPane.mouseClicked(e);
}
现在在bottomLevelPane中实现这个mouseClicked方法,以便在点击它时做你想做的任何事情。
然后创建一个MouseListener实例并将其添加到屏幕上的每个元素。 现在,您只需要一种方法来实际处理屏幕上每个元素的变色部分和一行。