3 回答

TA貢獻1835條經(jīng)驗 獲得超7個贊
找到了我的空問題的解決方案。我修改了方法“draw()”來接受一個元組,然后將它傳遞給paintComponent()函數(shù)并調(diào)用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條經(jīng)驗 獲得超9個贊
你應(yīng)該把所有的畫都畫在
public void paintComponent(Graphics g)
方法如https://docs.oracle.com/javase/tutorial/uiswing/painting/problems.html所述。

TA貢獻1804條經(jīng)驗 獲得超2個贊
使用回調(diào)函數(shù)。比polling物業(yè)好很多。你得到一個新的圖形對象。并且您的調(diào)用是在適當(dāng)?shù)纳舷挛闹袌?zhí)行的。
這是一般的想法:
實例化
new Gui((Graphics graphics)-> {
// your code here
});
CTOR 或初始化函數(shù)
public Gui(GraphicsCallback callback)
調(diào)用
調(diào)用回調(diào)。您可以檢查是否被調(diào)用,如果適合您的用例,則僅回調(diào)一次。或者回調(diào)實現(xiàn)可以管理多次調(diào)用。
public void paintComponent(Graphics g)
{
super.paintComponent(g);
this.g = g;
this.callback(g)
添加回答
舉報