我正在处理一个应用程序,我陷入了初期阶段。
我在JTextField
的{{1}}中有一个JPanel
。 JFrame
不在那里。
如果我使用
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);
}
}
但为什么id没有第二种方法,我更舒服?另外,这样我如何添加第二个面板以及如何自动安排每个面板中的组件?
更新
我意识到代码首先不起作用可能是因为我没有指定任何坐标/位置?...
答案 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中处理您的内容。