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

标签 java swing

目前我已经制作了文本标签并将它们放置在我的窗口上,指示它们在鼠标单击时执行操作,但这增加了我的编码,因为我有多个位置可供用户更改颜色。下面是我想出的标签代码之一;

    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 厘米点)背景颜色变化几毫米。

我认为这可以通过在内容 Pane 本身上为 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 位置添加一个鼠标监听器事件

将这段代码添加到我之前添加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);

与此类似,这是行不通的。

最佳答案

如果我正确理解了查询,您希望在 Content Pane 上设置背景颜色只需单击所述 Content Pane 的某个指定位置即可.如果是这样,请查看此示例代码,并尝试单击 TOP RIGHT CORNER。 , LEFT BOTTOM CORNERCENTERContent Pane查看颜色变化。它只是创建三个 Rectangle指定 Content Pane 上每个区域的对象可以单击以更改背景颜色的位置。只需通过调用 rectangle.contains(int x, int y) 检查X, Y 坐标 是否包含在任何矩形边界 中即可。方法。

import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.swing.*;

public class LocationExample {

    private JButton button;
    private JTextField tField;
    private JPanel contentPane;

    private static final int RECTANGLE_DIMENSION = 50;

    private List<Rectangle> rectangles;
    private Random random;

    private MouseAdapter mouseAdapter = new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent me) {
            int x = me.getX();
            int y = me.getY();
            for (Rectangle rectangle : rectangles) {
                if (rectangle.contains(x, y)) {
                    contentPane.setBackground(getRandomColor());
                }
            }
        }
    };

    private ComponentAdapter componentAdapter = new ComponentAdapter() {
        @Override
        public void componentResized(ComponentEvent ce) {
            setRectangleBounds();
        }
    };

    public LocationExample() {
        random = new Random();
        rectangles = new ArrayList<Rectangle>();
    }   

    private void displayGUI() {
        JFrame frame = new JFrame("Location Example");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        contentPane = new JPanel() {
            @Override
            public Dimension getPreferredSize() {
                return (new Dimension(300, 300));
            }
        };
        contentPane.setOpaque(true);
        contentPane.addMouseListener(mouseAdapter);
        contentPane.addComponentListener(componentAdapter);

        frame.setContentPane(contentPane);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);

        setRectangleBounds();
    }

    private void setRectangleBounds() {
        getRectangle(contentPane.getWidth() - RECTANGLE_DIMENSION, 0);
        getRectangle(0, contentPane.getHeight() - RECTANGLE_DIMENSION);
        getRectangle((contentPane.getWidth() / 2) - (RECTANGLE_DIMENSION / 2),
                    (contentPane.getHeight() / 2) - (RECTANGLE_DIMENSION / 2));
    }

    private void getRectangle(int x, int y) {
        rectangles.add(new Rectangle(x, y, RECTANGLE_DIMENSION, RECTANGLE_DIMENSION));
    }

    private Color getRandomColor() {
        return (new Color(random.nextInt(256),
            random.nextInt(256), random.nextInt(256)));
    }

    public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                new LocationExample().displayGUI();
            }
        };
        EventQueue.invokeLater(runnable);
    }
}

关于java - 当用户单击我的应用程序窗口上的某个点时,如何更改 java 中的背景颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21498658/

相关文章:

java - 应用程序启动时图像超出 imageview

java - 如何使用 Java Mail API 获取有限数量的消息

Java 虚拟机停止响应,原因不明

java - 我无法从 ListView 中删除项目

java - 如何使用循环清除 jframe 的所有文本字段?

java - JTextField 中的不同字体颜色

java - Java 中每个用户的单个应用程序实例

java - 如何使图标和文本在 JButton 上对齐左侧

java - JOptionPane 是否阻塞事件线程

java - hibernate 查询