当用户点击我的应用程序窗口上的某个位置时,如何在java中更改背景颜色?

时间:2014-02-01 13:31:30

标签: java swing

目前我已经制作了文本标签并将它们放在我的窗口上,指示他们在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);

contentPane.setLayout(null);

我不能只使用此方法向用户点击的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);

有些事情,这是行不通的。

2 个答案:

答案 0 :(得分:3)

如果我理解了正确意义上的查询,您只需点击所述Content Pane的某个指定位置,就可以在Content Pane上设置背景颜色。如果是这种情况,请查看此示例代码,并尝试点击TOP RIGHT CORNER的{​​{1}},LEFT BOTTOM CORNERCENTER以查看颜色变化。它只创建三个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实例并将其添加到屏幕上的每个元素。 现在,您只需要一种方法来实际处理屏幕上每个元素的变色部分和一行。