Swing组件不可见(swing component not visible)

2019-11-02 03:17发布

我工作的一个应用程序,我停留在初始阶段。 我有一个JTextFieldJPanelJFrameJTextField是不存在的。 如果我使用

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

有用。 但与

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

所以问题是:

  1. 为什么不是现场可见? (最重要的Q)
  2. 什么是2种上述方法之间的区别?

码:

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);

    }
}

提醒一句:

它的工作原理与JPanel p0 = (JPanel) f.getContentPane(); 但为什么ID与第二的办法,这我更舒服? 另外,这样我怎么添加第二个面板,如何使每个小部件自动安排?

更新:

我意识到,可能是因为我没有指定的任何坐标/位置的代码没有摆在首位的工作?...

Answer 1:

首先你要你的面板添加到您的layoutmangager。

某事像

add(p0);

然后你需要一个电话收拾JFrame的

pack();

如果你想2块板,你必须让他们在你的帧/布局管理器的位置。

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

你有3个possibilites设置大小上的组件:

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


Answer 2:

关于你的2个代码之间的区别:一个JFrame有一个contentPane这实际上就是在窗口中的所有事情发生的小组-该框架刚刚这个面板,而不是别人。 通过调用f.setContentPane(randomJPanel); 实际上你可以设置contentPane到你想要一些面板。 我会强烈建议在此工作contentPane与布局,而不是直接做你的东西在JFrame中。



Answer 3:

编辑

您还没有设置这样的: -

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);


文章来源: swing component not visible