运行此代码后,窗口大小为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;}
}发布于 2014-07-07 21:37:11
在使框架可见之前调用f.pack()。
来自javadoc的报价
使此窗口的大小符合其子组件的首选大小和布局。如果其中一个维度小于上一次对setMinimumSize方法的调用指定的最小大小,则窗口的宽度和高度将自动增大。
此外,不应使用主线程中的swing组件。只来自事件分派线程。读取http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
https://stackoverflow.com/questions/24620264
复制相似问题