MouseListener帮助Java
发布时间:2020-12-15 07:36:47 所属栏目:Java 来源:网络整理
导读:我正在尝试用 Java Swing编写一个程序,它输出一个10 x 10网格的几何矩形,里面装满了randoms颜色.但是,当用户单击显示窗口中的一个矩形时,矩形应重新绘制()并更改为另一种颜色. 到目前为止,我已经运行了基本程序,但我无法弄清楚如何为其实现mouseListener,以
我正在尝试用
Java Swing编写一个程序,它输出一个10 x 10网格的几何矩形,里面装满了randoms颜色.但是,当用户单击显示窗口中的一个矩形时,矩形应重新绘制()并更改为另一种颜色.
到目前为止,我已经运行了基本程序,但我无法弄清楚如何为其实现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,z); g2.drawRect(w+10,z); g2.fillRect(w+10,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都可以拥有MouseListener. JLabel很适合彩色矩形,只要你让它变得不透明.
附录:在别处推荐了MouseAdapter,我应该提到一个实例就足够了. 附录:此更新在ColorLabel构造函数中添加了鼠标侦听器. 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 https://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(); } }); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |