gpt4 book ai didi

java - MouseListener 帮助 Java

转载 作者:行者123 更新时间:2023-12-03 22:19:01 25 4
gpt4 key购买 nike

我正在尝试用 Java Swing 编写一个程序,输出一个 10 x 10 的几何矩形网格,其中填充了随机颜色。但是,当用户单击显示窗口中的一个矩形时,该矩形应该 repaint() 并更改为另一种颜色。

到目前为止,我已经运行了基本程序,但我无法弄清楚如何为其实现 mouseListener 以便在用户单击内部时改变矩形的颜色。此时,矩形仅在显示窗口展开和最小化时才重新绘制。任何建议/帮助将不胜感激!谢谢!

这是我目前所拥有的...

   import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.geom.*;


public class ColorGrid extends JPanel {
int w, x, y, z;
Color c = new Color((int)(Math.random() * 0xFFFFFF));
public void paint(Graphics g){
Graphics2D g2 = (Graphics2D) g;

setLayout(new GridLayout(10,10));

int w = x = y = z = 0;
for(int i=0;i<100;i++){
Color c = new Color((int)(Math.random() * 0xFFFFFF));
w+=10;
x+=10;
y+=50;
z+=15;

g2.drawRect(w+10,x+30,y,z);
g2.drawRect(w+10,x+30,y,z);
g2.fillRect(w+10,x+30,y,z);
g2.setPaint(c);
}
}

public static void main(String[] args) {
JFrame f= new JFrame();
f.setTitle("ColorGrid Display Window");
f.setSize(200,200);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
Container contentPane = f.getContentPane();
contentPane.add(new ColorGrid());
f.show();
}
}

最佳答案

任何 Component 都可以有一个 MouseListenerJLabel 非常适合彩色矩形,只要您将其设置为不透明即可。

附录:在别处推荐了 MouseAdapter 之后,我应该提到 一个 实例就足够了。

附录:此更新在 ColorLabel 构造函数中添加了鼠标监听器。

ColorLabel picture

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JLabel;

/** @see http://stackoverflow.com/questions/5136859 */
public class ColorLabel extends JLabel {

private static final int N = 10;
private static final Random random = new Random();
private static final MouseAdapter listener = new MouseAdapter() {

@Override
public void mousePressed(MouseEvent e) {
ColorLabel label = (ColorLabel) e.getSource();
label.setBackground(new Color(random.nextInt()));
}
};

public ColorLabel() {
this.setOpaque(true);
this.setBackground(new Color(random.nextInt()));
this.setPreferredSize(new Dimension(32, 32));
this.addMouseListener(listener);
}

private void displayGrid() {
JFrame f = new JFrame("ColorGrid");
f.setLayout(new GridLayout(N, N));
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
for (int i = 0; i < N * N; i++) {
final ColorLabel label = new ColorLabel();
f.add(label);
}
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {

@Override
public void run() {
new ColorLabel().displayGrid();
}
});
}
}

关于java - MouseListener 帮助 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5136859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com