[英]swing component not visible
我正在开发一个应用程序,但仍处于初期阶段。 我在JFrame
的JPanel
中有一个JTextField
。 JTextField
不存在。 如果我用
JPanel p0 = (JPanel) f.getContentPane();
有用。 但不是
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);
}
}
提醒一句:
它与JPanel p0 = (JPanel) f.getContentPane();
但是为什么id不支持我更喜欢的第二种方法? 另外,以这种方式如何添加第二个面板,以及如何使每个面板中的组件自动排列?
更新:
我意识到代码一开始就没有用,可能是因为我没有指定任何坐标/位置?
首先,您必须将面板添加到您的布局管理器中。
像
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);
编辑 :
您尚未设置:
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);
关于JFrame
代码之间的区别: JFrame
有一个contentPane
,它实际上是Panel,窗口中的所有内容都在其中发生-Frame仅具有此Panel,而没有其他。 通过调用f.setContentPane(randomJPanel);
您实际上可以将contentPane
设置为所需的某些面板。 我强烈建议您使用Layouts在此contentPane
工作,而不是直接在JFrame中进行操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.