gpt4 book ai didi

java - 来自某个类的对象是否可以输出具有唯一 JLabel 的相同格式的 JPanel?

转载 作者:行者123 更新时间:2023-11-29 07:40:11 24 4
gpt4 key购买 nike

我有一个 PanelCreator 类,它有一个构造函数,它输入两个字符串并将它们转换为 JLabel。它还有一个返回带有这些标签的面板的方法。

private JLabel string1, string2;
private JPanel panel;

PanelCreator(String input1, String input2)
{
panel = new JPanel();
string1 = new JLabel();
string1.setText(input1);

string2 = new JLabel();
string2.setText(input2);

panel.add(string1);
panel.add(string2);
}

JPanel createPanel()
{
return panel;
}

我面临的问题是 main 方法将只显示从 createPanel() 创建的最新面板。就好像 panel2 覆盖了 panel1,但我确实需要它们在框架中并排出现。

    JFrame f = new MultiplePanelTest();

PanelCreator panelCreator1 = new PanelCreator("Test1-1", "Test1-2");
JPanel pane1 = panelCreator1.createPanel();
f.add(pane1);

PanelCreator panelCreator2 = new PanelCreator("Test2-1", "Test2-2");
JPanel pane2 = panelCreator2.createPanel();
f.add(pane2);

我知道 swing GUI 中的组件只能使用一次,所以我假设问题出在引用相同 JLabel 的 PanelCreator 对象上。我认为将其设为一个类然后从中提取对象会使每个对象都有自己独特的 JLabel,但我的看法似乎是错误的。

有没有办法解决这个问题,以便有 2 个相同的面板,每个面板都有自己的 JLabel?扩展目标是通过 PanelCreator 对象本身操作标签的文本,而不更改任何格式(因为这两个面板将保存自己的数据,但在 GUI 框架中看起来格式相同)。

最佳答案

每个面板都已正确创建,但它们都直接添加到 JFrame 框架,默认情况下该框架具有 BorderLayout。所以它们都被添加到框架的中心,相互重叠。

这基本上等同于:

f.add(pane1, BorderLayout.CENTER);
f.add(pane2, BorderLayout.CENTER);

...这显然是错误的!

因此,如果您希望面板并排放置,请尝试:

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

或一个在另一个之上:

f.add(pane1, BorderLayout.NORTH);
f.add(pane2, BorderLayout.SOUTH);

如评论中所述,如果您对 BorderLayout 不满意,您还可以修改框架的布局管理器。例如:

f.setLayout(new FlowLayout());
f.add(pane1);
f.add(pane2);

关于java - 来自某个类的对象是否可以输出具有唯一 JLabel 的相同格式的 JPanel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31034981/

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