2013-04-25 109 views
1

我做了400 400帧,并添加了一个文本字段。默认情况下,java应用程序仅缩小到文本字段的大小。我希望它固定到相应的大小。如何保持JFrame的特定宽度和高度?

我试过setResizable(false)setExtendedState(),setBounds()无济于事。

+2

你确定你没有在某处调用'pack()'吗? – 2013-04-25 16:03:20

+0

我在所有其他人之后添加了pack()行。为什么? – mireazma 2013-04-25 16:11:07

+3

调用'pack()'验证整个帧组件层次结构,并将帧的大小设置为由包含组件计算出的首选大小。遵循HFOE解决方案或不要致电包 – 2013-04-25 16:18:10

回答

2

尝试

setPreferredSize(new Dimension(840,400)); 

如果你命名你的框架,你可以做

name.setPreferredSize(new Dimension(840,400)); 
+0

它应该在内容窗格上完成。 – 2013-04-25 16:04:24

+0

非常感谢。 setSize()不起作用,但setPreferredSize()做了。 – mireazma 2013-04-25 16:09:32

+1

@ user2320553不推荐使用setPreferredSize()。 – 2013-04-25 17:07:57

4

最好用一个JPanel作为你的contentPane或将其添加到contentPane,并覆盖其getPreferredSize() method and then use包() `在JFrame上。例如:

import java.awt.Dimension; 
import javax.swing.*; 

@SuppressWarnings("serial") 
public class MyPanel extends JPanel { 
    private static final int PREF_W = 400; 
    private static final int PREF_H = 300; 

    public MyPanel() { 
     //... 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(PREF_W, PREF_H); 
    } 

    private static void createAndShowGui() { 
     MyPanel myPanel = new MyPanel(); 
     JFrame frame = new JFrame("My GUI"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(myPanel); 
     frame.setResizable(false); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGui(); 
     } 
     }); 
    } 
} 

一个优势的,这是其它类无法通过setSize(...)setPreferredSize(...)改变MyPanel的大小。

+0

感谢您的代码。我不太了解,但我暂时不需要。 – mireazma 2013-04-25 16:45:20

+2

技术债务会累积利息;更多[这里](http://stackoverflow.com/q/7229226/230513)。 – trashgod 2013-04-25 17:33:23

相关问题