我目前正在尝试制作一款带有 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/