gpt4 book ai didi

java - Swing 组件不可见

转载 作者:行者123 更新时间:2023-12-01 23:51:33 26 4
gpt4 key购买 nike

我正在开发一个应用程序,但我陷入了初期阶段。我在 JFrameJPanel 中有一个 JTextFieldJTextField 不存在。如果我使用

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

它有效。但不与

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

所以问题是:

  1. 为什么该字段不可见? (最重要的q)
  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 不采用第二种方法,我更喜欢这种方法?另外,这样我如何添加第二个面板以及如何使每个面板中的组件自动排列?

更新:

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

最佳答案

首先,您必须将面板添加到布局管理器中。

像这样

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

关于java - Swing 组件不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16235536/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com