这件事真的让我很紧张,我根本不明白为什么我认为它应该工作的方式不好,为什么它从另一个方面来说是好的。我真的很感谢你的帮助。谢谢
以下是我对它应该如何工作的想法:
public class Proba {
public static void main(String[] args) {
GUI gui = new GUI();
}
}
import java.awt.Graphics;
import javax.swing.JFrame;
public class GUI {
JFrame ablak;
public void paint(Graphics g){
g.drawRect(20,20,100,100);
}
public GUI(){
ablak = new JFrame("Graphics proba");
ablak.setSize(400,300);
ablak.setVisible(true);
ablak.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
但这不起作用,而这起作用:
public class Proba {
public static void main(String[] args) {
GUI gui = new GUI();
}
}
import java.awt.Graphics;
import javax.swing.JFrame;
public class GUI {
JFrame ablak;
Grid grid = new Grid();
public GUI(){
ablak = new JFrame("Graphics proba");
ablak.setSize(400,300);
ablak.setVisible(true);
ablak.add(grid);
ablak.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
public class Grid extends JPanel {
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.BLACK);
g.drawRect(20,20,100,100);
}
}
第二种方法是正确的方法。你画的是JPanel,而不是JFrame。
这是你应该做的一个改变。这将GUI组件置于事件调度线程(EDT)上。
public class Proba {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new GUI();
}
});
}
}
只需让类GUI扩展JFrame,或者您可以这样做:
在GUI生成器中添加最后一行paint(ablak.getGraphics());