java - 单击鼠标重新绘制框架?

标签 java swing

我目前正在尝试制作一款带有 GUI 的游戏,需要通过单击按钮在屏幕上绘制新内容。例如:

public class GUI() extends JPanel {
    public void paintComponent() {
      /*
       *Basic initial set up here
       */

      // ***** Call method here on mouse click ***** 
    }
    public void setUpGUI() {
        JFrame mainFrame = new JFrame();
        GUI paintGUI = new GUI();
        clickDetector click = new clickDetector();

        mainFrame.addMouseListener(click);
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainFrame.setSize(500, 500);
        mainFrame.getContentPane().add(paintGUI);
        mainFrame.setVisible(true);
    }

    public static void main(String args[]) {
        GUI gui = new GUI();
        gui.setUpGUI();
    }
}

我需要在 //***** 鼠标点击此处调用方法 ***** 中实现一个方法,该方法将在框架的新添加物上进行绘制(在我的例子中这些是代表棋盘上棋子的圆圈)但我不确定如何通过单击按钮来执行此操作。如何在每次单击鼠标时重新绘制框架以便修改我的游戏板?

----编辑----

这是我的paintComponent 代码,以及用于重绘的监听器。

public void paintComponent(Graphics g) {
        super.paintComponent(g);

        System.out.println("Method called");
        g.setColor(Color.red);

        for(int y = 0; y < 6; y++) {
            for(int x = 0; x < 7; x++) {
                g.fillOval(x*70 + 10, y*70 + 10, 50, 50);
            }
        }

        g.setColor(Color.BLACK);
        g.fillRect(0, 430, 500, 50);
        g.setColor(Color.white);
        g.drawString("CONNECT FOUR", 250, 450);
        g.setColor(Color.LIGHT_GRAY);
        click.paintPiece(g);

    }

public void mouseClicked(MouseEvent e) {
        this.repaint();     

    }

这是paintComponent应该调用的方法,但实际上不是

public void paintPiece(Graphics g) {
        int x = getMouseX() + 10;
        int y = mover.getRow() + 10;
        g.fillOval(x, y, 50, 50);
    }

最佳答案

只需创建一个鼠标监听器:

MouseListener listen = new MouseListener()
{
    void mouseClicked(MouseEvent e){}
    void mouseReleased(MouseEvent e){}
    void mousePressed(MouseEvent e){paintGUI.repaint();}
    void mouseExited(MouseEvent e){}
    void mouseEntered(MouseEvent e){}
};
paintGUI.addMouseListener(listen);

每次您在 JPanel 内部单击时,您现在都应该看到它重新绘制。同样,如果您想在按下 JButton 时进行更新,只需使用 ActionListener 即可:

ActionListener listen = new ActionListener()
{
    public void actionPerformed(ActionEvent e){paintGUI.repaint();}
}
button.addActionListener(listen);

这应该放在您的 setUpGUI() 方法中。

关于java - 单击鼠标重新绘制框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29581941/

相关文章:

java - 如何在 Swing 中的 JTable 的列中添加不同的 JComboBox 项

java - 我需要与许多其他对象共享一个对象——我读过关于单例的投诉,那么我应该使用什么来代替?

java - 如何使用 getComponent() 设置子组件的复选框 setSelected()

java - 如何向采用值 id 的每一行添加删除操作

java - 向表中添加值并将其添加到主窗体

java - 如何验证表单页面中的整数输入?

Java Swing : Focus issue

java - 使用 Maven,如何过滤不是资源但希望它使用与资源相同的过滤器的文件?

Java:循环列表两次会消耗双倍功率吗?

java - JComboBox 具有 4 列和 4 行数据[][] 形式