如何将多个带有标签的面板添加到单个框架中?

Posted

技术标签:

【中文标题】如何将多个带有标签的面板添加到单个框架中?【英文标题】:How to add several panels with labels to a single frame? 【发布时间】:2015-03-28 20:09:46 【问题描述】:

我正在学习 Java Swings,我正在创建一个框架,并且我想向其中添加多个具有不同方向的面板,正如您在下面的代码 jpanet_1jpanel_2 中看到的那样,它们每个都有一个特定的使用setBound() 方法设置尺寸。

问题是在运行时,“hello world”只出现在第二个面板中,没有出现在第一个面板中。我尝试切换将两个面板添加到主框架的顺序,如下所示:

    jFrame_2.add(jPanel_2);
    jFrame_2.add(jPanel_1);

但是,“hello world”仅添加到 panel_2。

    请让我知道如何将两个面板添加到框架中,以便语句“hello world”出现在两者中

    正如您在代码中看到的,我为希望添加到框架的每个面板指定尺寸,然后添加它,是否有任何其他推荐的方式将面板添加到框架?

代码:

  public class GUI_01 

JFrame jFrame_1;
JFrame jFrame_2;
JPanel jPanel_1;
JPanel jPanel_2;
final JLabel jLabel_Hello = new JLabel("Hello World");
JOptionPane jOptions;
final String[] options = "yes", "no", "maybe";

public GUI_01() 
    // TODO Auto-generated constructor stub
    setUpGUI1();
    setUpGUI2();


private void setUpGUI2() 
    // TODO Auto-generated method stub
    jFrame_2 = new JFrame("Border Demo");
    jPanel_1 = new JPanel();
    jPanel_2 = new JPanel();
    
    jPanel_1.setBorder(BorderFactory.createTitledBorder("title"));
    jPanel_1.setBounds(30, 100, 110, 300);
    jPanel_1.add(jLabel_Hello);
    
    jPanel_2.setBorder(BorderFactory.createLoweredBevelBorder());
    jPanel_2.setBounds(20, 50, 120, 80);
    jPanel_2.add(jLabel_Hello);
    
    jFrame_2.setBounds(0, 0, 600, 600);
    jFrame_2.add(jPanel_1);
    jFrame_2.add(jPanel_2);
    jFrame_2.setVisible(true);

【问题讨论】:

【参考方案1】:

问题出在运行时,“hello world”只出现在第二个面板中,没有出现在

没错。一个组件只能有一个父级。

如果您想要文本“Hello World”,那么您需要创建两个 JLabel 并将其中一个标签添加到每个面板。

JLabel label1 = new JLabel("Hello World");
JPanel panel1 = new JPanel();
panel1.add( label1 );
JLabel label2 = new JLabel("Hello World");
JPanel panel2 = new JPanel();
panel2.add( label2 );

我尝试使用 gridlayout,但我无法将 jpanel 放置在 gridlayout 的特定单元格中..

您不能只将组件添加到随机单元格中。您必须在每个单元格中都有组件,或者在 GridBagLayout 的情况下,该组件可以跨越多个单元格。

【讨论】:

【参考方案2】:

您需要使用布局。就个人而言,我最喜欢的布局是 GridBagLayout,它允许您准确选择事物的位置(例如在表格中,具有自定义的行和列)。您可以通过here 了解更多信息。希望这会有所帮助,祝你好运。

【讨论】:

我尝试使用 gridlayout,但我无法将 jpanel 放置在 gridlayout 的特定单元格中。我在这里有这个问题。如果看看,我将不胜感激:***.com/questions/29322087/… @user2121 你需要使用 GridBagConstraints。请阅读我附加的源代码,它深入解释了如何使用它们。

以上是关于如何将多个带有标签的面板添加到单个框架中?的主要内容,如果未能解决你的问题,请参考以下文章

如何将多个输入(旋钮)添加到单个滑块?

javafx中如何给面板添加背景图片例如BorderPane

如何使用带有 Mongoose 的 addToSet 添加多个 ObjectId?

如何使用 c# 将单个 html 行绑定到 xamarin.forms 中的多个标签

如何在ViewPager中渲染单个片段?

如何将多个 MouseListeners 添加到单个 JFrame?