运行此代码后出现窗口大小为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;}
}
答案 0 :(得分:1)
在使框架可见之前调用f.pack()
。
来自javadoc:
的引用使此窗口的大小适合其子组件的首选大小和布局。如果任一维度小于上一次调用setMinimumSize方法所指定的最小大小,则会自动放大窗口的最终宽度和高度。
此外,您不应该使用主线程中的swing组件。仅来自事件派发线程。阅读http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html