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