gpt4 book ai didi

java - 为什么带有两个 Jpanel 的父 Jpanel 不只显示第一个 Show 本身而不显示其两个子 Jpanels?

转载 作者:行者123 更新时间:2023-12-01 22:19:43 29 4
gpt4 key购买 nike

我正在尝试创建一个带有另外两个 JPanelJPanel,但是,当时,当我要显示主要内容时JPanel,它只显示主Jpanel上的第一个Jpanel

通过以下示例,您将更好地理解这个问题:

我想要这样的东西:

Figure 1

我想做的两件事都很好;即使如此,如果我尝试将它们放在同一个 JPanel 上,它也不会。

在第一个 JPanel 上,我想添加一个 JFileChooser,在另一部分中,我想添加一个 Drag & Drop TextArea .

我试图用这堆代码做上面提到的事情,并且只显示第一个Jpanel我缺少什么?

我创建了一个Main Jpanel:

JPanel container = new JPanel();
container.setLayout(new BoxLayout(container, BoxLayout.X_AXIS));

然后,我创建了两个 Jpanel 将它们放入 Main Jpanel 中:

JPanel panel1 = new JPanel();
panel1.setLayout(new BorderLayout());

JButton button = new JButton("Selecciona el arxiu .txt");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
JFileChooser fileChooser = new JFileChooser("C:/Users/Joan/Desktop/");
int returnValue = fileChooser.showOpenDialog(null);
if (returnValue == JFileChooser.APPROVE_OPTION) {
SelectedFile = fileChooser.getSelectedFile();
//Amb el SelectedFile.getName(); Sabem el nom del arxiu.
BufferedReader br = null;

try {
String sCurrentLine;
br = new BufferedReader(new FileReader(SelectedFile));

while ((sCurrentLine = br.readLine()) != null) {
System.out.println(sCurrentLine);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
});
panel1.add(button);

第二个 Jpanel 看起来像:

JPanel panel2 = new JPanel();
panel2.setBackground(Color.red);
panel2.add(
new JLabel("Drop a list from your file chooser here:"),
BorderLayout.NORTH
);
ta = new JTextArea();
ta.setBackground(Color.white);
panel2.add(ta, BorderLayout.CENTER);

dt = new DropTarget(ta, this);

当时,我想将这两个 Jpanel 放在 Main Jpanel 中。我就是按这个方法做的然后,我将其设置为可见:

container.add(panel1, BorderLayout.NORTH);
container.add(panel2, BorderLayout.SOUTH);
container.setVisible(true);

但是,问题是当我尝试启动该程序时,它只显示第一个 Jpanel (Jpanel1),而其他 Jpanel 则不显示。

我做错了什么或者我误解了什么?

最佳答案

您可能想尝试使用 GridLayout,而不是在容器上使用 BoxLayout

container.setLayout(new GridLayout(0, 2));

然后只需添加它们:

container.add(panel1);
container.add(panel2);

编辑:

完整示例:

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Side {


public static void main(String[] args) {

JFrame frame = new JFrame("JFrame");
JPanel container = new JPanel();
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
panel1.setBackground(Color.blue);
panel2.setBackground(Color.red);

container.setLayout(new GridLayout(0, 2));

container.add(panel1);
container.add(panel2);

frame.getContentPane().add(container, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);

}
}

关于java - 为什么带有两个 Jpanel 的父 Jpanel 不只显示第一个 Show 本身而不显示其两个子 Jpanels?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30155035/

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