首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MouseListener帮助Java

MouseListener帮助Java
EN

Stack Overflow用户
提问于 2011-02-28 07:35:29
回答 4查看 2.6K关注 0票数 2

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

到目前为止,我已经运行了基本的程序,但我不知道如何实现它的mouseListener,以便在用户单击内部时使矩形的颜色发生变化。此时,只有在显示窗口被放大和最小化时,矩形才会重新绘制。任何建议/帮助都将不胜感激!谢谢!

这是我到目前为止所做的。

代码语言:javascript
复制
   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();
    }
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-28 08:58:50

任何Component都可以有一个MouseListenerJLabel对于彩色矩形是很好的,只要你使它不透明。

附录:在其他地方推荐了MouseAdapter,我应该提到一个实例就足够了。

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

代码语言:javascript
复制
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();
            }
        });
    }
}
票数 4
EN

Stack Overflow用户

发布于 2011-02-28 08:08:58

与其使用JPanel在上面绘制颜色网格,不如使用按钮网格。您可以重写按钮的绘制机制,使其仅呈现为当前颜色。然后你就有了内置的功能来监听在网格的特定部分中发生的点击。

票数 3
EN

Stack Overflow用户

发布于 2011-02-28 08:39:37

这就是我想出来的。注意:我在大学里仍然在学习Java,所以这可能不是做这件事的确切方法,但当我这样做的时候它就起作用了。

代码语言:javascript
复制
public class ColorGrid extends JPanel implements MouseListener {
this.addMouseListener(this);
addMouseListener(this);

这是第一部分,第二部分是在你的代码中包含这些方法。

代码语言:javascript
复制
public void mouseClicked(MouseEvent arg0) {

}

public void mouseEntered(MouseEvent arg0) {

}

public void mouseExited(MouseEvent arg0) {

}

public void mousePressed(MouseEvent arg0) {

}

public void mouseReleased(MouseEvent arg0) {

}

然后,根据您的需要(即单击鼠标或按下鼠标),只需键入:

代码语言:javascript
复制
repaint();

希望这能帮上忙。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5136859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档