如何制作不会被调用两次的绘画 class?
How to make a paint class that doesn't get called twice?
我写了一个 paint class,并将 jpanel 添加到框架中,但由于某种原因它被调用了两次,因为我在图形方法中放置了一个 print 语句,它打印了两次。下面的代码是我包裹中的所有代码。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Paint extends JPanel {
static Paint paint = new Paint();
@Override
public Dimension getPreferredSize() {
return new Dimension(500, 500);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
System.out.println("Hello");
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.add(paint);
frame.pack();
frame.setLocation(300, 300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
我试过你的代码 paintComponent
它并没有每次都被调用两次。我认为您无法控制 JFrame 在调用 setVisible
时调用 pack() 的时间。这可能取决于您的 OS 如何管理 windows。
我写了一个 paint class,并将 jpanel 添加到框架中,但由于某种原因它被调用了两次,因为我在图形方法中放置了一个 print 语句,它打印了两次。下面的代码是我包裹中的所有代码。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Paint extends JPanel {
static Paint paint = new Paint();
@Override
public Dimension getPreferredSize() {
return new Dimension(500, 500);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
System.out.println("Hello");
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.add(paint);
frame.pack();
frame.setLocation(300, 300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
我试过你的代码 paintComponent
它并没有每次都被调用两次。我认为您无法控制 JFrame 在调用 setVisible
时调用 pack() 的时间。这可能取决于您的 OS 如何管理 windows。