重写JComponent方法

时间:2014-07-07 21:34:24

标签: java user-interface

运行此代码后出现窗口大小为0x0。 我可以通过写" f.setSize(640,480);"来解决它。在主要方法。 我听到了它的不良实践,所以......有没有办法让这项压倒一切的工作?

public class Gui {

    public static void main(String[] args) throws IOException {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().setBackground(Color.BLACK);
        f.add(new DrawingPad());
        f.setVisible(true); 
    }
 }

class DrawingPad extends JComponent{
    Image img = new ImageIcon("res/icon.jpg").getImage();
    Dimension d = new Dimension(640, 480);

    public void paintComponent(Graphics g){
        g.drawImage(img, 50, 50, null);
    }

    @Override
    public Dimension getPreferredSize(){return d;}
}

1 个答案:

答案 0 :(得分:1)

在使框架可见之前调用f.pack()

来自javadoc

的引用
  

使此窗口的大小适合其子组件的首选大小和布局。如果任一维度小于上一次调用setMinimumSize方法所指定的最小大小,则会自动放大窗口的最终宽度和高度。

此外,您不应该使用主线程中的swing组件。仅来自事件派发线程。阅读http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html