摆动部件不可见

时间:2013-04-26 11:39:21

标签: java swing layout jpanel absolutelayout

我正在处理一个应用程序,我陷入了初期阶段。 我在JTextField的{​​{1}}中有一个JPanelJFrame不在那里。 如果我使用

JTextField

它有效。但不是

JPanel p0 = (JPanel) f.getContentPane();

所以问题是:

  1. 为什么这个字段不可见? (最重要的是q)
  2. 上述两种方法之间的区别是什么?
  3. 代码:

    JPanel p0 = new JPanel();
    f.add(p0);
    

    提醒一下:

    适用于import java.awt.*; import java.io.*; import java.net.*; import java.util.*; import javax.swing.*; public class Main { static Font fontDefault = new Font("arial", Font.PLAIN, 15); public static void main ( String [ ] args ) { JFrame f = new JFrame("Liquid"); f.setSize(new Dimension(840, 400)); //f.setIconImage(image); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //JPanel p0 = (JPanel) f.getContentPane();// is it necessary? JPanel p0 = new JPanel(); p0.setLayout(null); JPanel p1 = new JPanel(); p1.setLayout(null); JTextField tfHostName = new JTextField("default text", 20); tfHostName.setBounds(50, 50, 200, 25); tfHostName.setFont(fontDefault); JButton bRequest = new JButton("request"); JButton bReset = new JButton("reset"); JTextArea taTest = new JTextArea("default text", 1, 20); p0.add(tfHostName); f.add(p0); f.add(p1); p0.add(taTest); //f.pack(); f.setResizable(false); f.setVisible(true); } } 但为什么id没有第二种方法,我更舒服?另外,这样我如何添加第二个面板以及如何自动安排每个面板中的组件?

    更新

    我意识到代码首先不起作用可能是因为我没有指定任何坐标/位置?...

3 个答案:

答案 0 :(得分:3)

首先,您必须将面板添加到layoutmangager。

喜欢

add(p0);

然后你需要调用JFrame的包装

pack();

如果你想要2个面板,你可以在它们的框架/布局管理器中给它们一个位置。

f.add(pane1, BorderLayout.WEST);
f.add(pane2, BorderLayout.EAST);

您有3种可能性来设置组件的大小:

setPreferredSize(Dimension D);
setMinimumSize(Dimension D);
setMaximumSize(Dimension D);

答案 1 :(得分:0)

修改

你没有设置: -

f.setLayout(new FlowLayout());

您还需要将布局设置为框架 并注释掉

//p0.setLayout(null);
//p1.setLayout(null);

这样做

JFrame jf=new JFrame();
Jpanel jp=new JPanel();
jp.add(new TextField());
jf.add(jp);

set jf.setVisible(true);

答案 2 :(得分:0)

关于你的2段代码之间的区别: JFrame有一个contentPane实际上是面板,窗口中的所有东西都发生了 - 框架只有这个面板,而不是其他面板。 通过致电f.setContentPane(randomJPanel);,您实际上可以将contentPane设置为您想要的某个面板。我强烈建议您使用Layouts处理此contentPane,而不是直接在JFrame中处理您的内容。