在JFrame上正确绘制矩形



这件事真的让我很紧张,我根本不明白为什么我认为它应该工作的方式不好,为什么它从另一个方面来说是好的。我真的很感谢你的帮助。谢谢

以下是我对它应该如何工作的想法:

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());

相关内容

  • 没有找到相关文章

最新更新