3 回答
TA贡献1835条经验 获得超7个赞
找到了我的空问题的解决方案。我修改了方法“draw()”来接受一个元组,然后将它传递给paintComponent()函数并调用repaint()。
package gui;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class Gui extends JPanel{
Graphics g;
Tuple xy;
public Gui()
{
JFrame frame = new JFrame("test");
frame.setSize(700, 700);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setLocationRelativeTo(null);
frame.add(this);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
this.g = g;
g.setColor(Color.blue);
for(int x = 0;x < 700; x += 20)
{
g.drawLine(x, 0, x, 700);
}
for(int y = 0;y < 700; y += 20)
{
g.drawLine(0, y, 700, y);
}
if(xy != null)
{
g.fillOval(xy.x, xy.y, 5, 5);
}
}
public void draw(Tuple xy)
{
this.xy = xy;
repaint();
}
}
谢谢你的帮助
TA贡献1890条经验 获得超9个赞
你应该把所有的画都画在
public void paintComponent(Graphics g)
方法如https://docs.oracle.com/javase/tutorial/uiswing/painting/problems.html所述。
TA贡献1804条经验 获得超2个赞
使用回调函数。比polling物业好很多。你得到一个新的图形对象。并且您的调用是在适当的上下文中执行的。
这是一般的想法:
实例化
new Gui((Graphics graphics)-> {
// your code here
});
CTOR 或初始化函数
public Gui(GraphicsCallback callback)
调用
调用回调。您可以检查是否被调用,如果适合您的用例,则仅回调一次。或者回调实现可以管理多次调用。
public void paintComponent(Graphics g)
{
super.paintComponent(g);
this.g = g;
this.callback(g)
添加回答
举报