gpt4 book ai didi

java - GroupLayout 一次只能与一个容器一起使用

转载 作者:搜寻专家 更新时间:2023-10-30 21:02:52 28 4
gpt4 key购买 nike

不确定为什么会出现此错误。我正在使用 GroupLayout,因为我希望它为我设置间距,并且将来会在框架中添加更多面板。下面是堆栈跟踪。

Exception in thread "main" java.lang.IllegalArgumentException: GroupLayout can only be used with one Container at a time
at javax.swing.GroupLayout.checkParent(Unknown Source)
at javax.swing.GroupLayout.invalidateLayout(Unknown Source)
at java.awt.Container.invalidate(Unknown Source)
at java.awt.Component.addNotify(Unknown Source)
at java.awt.Container.addNotify(Unknown Source)
at javax.swing.JComponent.addNotify(Unknown Source)
at java.awt.Container.addNotify(Unknown Source)
at javax.swing.JComponent.addNotify(Unknown Source)
at java.awt.Container.addNotify(Unknown Source)
at javax.swing.JComponent.addNotify(Unknown Source)
at javax.swing.JRootPane.addNotify(Unknown Source)
at java.awt.Container.addNotify(Unknown Source)
at java.awt.Window.addNotify(Unknown Source)
at java.awt.Frame.addNotify(Unknown Source)
at java.awt.Window.pack(Unknown Source)
at client.AlternateGUI.drawGui(AlternateGUI.java:54)
at client.AlternateGUI.main(AlternateGUI.java:24)

代码如下:

package client;

import java.awt.Component;*

public class AlternateGUI {
private JList people;
private DefaultListModel dlm;
private JLabel l1, l2, l3;
private JFrame alternateGUIFrame;
private final static ImageIcon unavailableIcon = new ImageIcon("offline.png");

public static void main(String[] args)
{
AlternateGUI ls = new AlternateGUI();
ls.drawGui();
}

public AlternateGUI(){
dlm = new DefaultListModel();
people = new JList(dlm);

alternateGUIFrame = new JFrame();

JScrollPane peopleScroller = new JScrollPane(people, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
people.setCellRenderer(new CellRenderer());

GroupLayout alternateGUILayout = new GroupLayout(alternateGUIFrame);
alternateGUIFrame.setLayout(alternateGUILayout);

alternateGUILayout.setAutoCreateGaps(true);
alternateGUILayout.setAutoCreateContainerGaps(true);
alternateGUILayout.setHorizontalGroup(alternateGUILayout.createSequentialGroup()
.addComponent(peopleScroller));
alternateGUILayout.setVerticalGroup(alternateGUILayout.createSequentialGroup()
.addComponent(peopleScroller));
}

public void drawGui() {
l1 = new JLabel("Hi", unavailableIcon , JLabel.LEFT);
l2 = new JLabel("Hello", unavailableIcon , JLabel.LEFT);
l3 = new JLabel("Bye", unavailableIcon , JLabel.LEFT);
dlm.addElement(l1);
dlm.addElement(l2);
dlm.addElement(l3);

alternateGUIFrame.pack();
alternateGUIFrame.setVisible(true);
}

class CellRenderer implements ListCellRenderer
{
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
{
Component com = (Component)value;
return com;
}
}
}

最佳答案

您的问题是您在不知不觉中将布局添加到 JFrame 及其 contentPane。解决方案是确保仅将它添加到 JFrame 的 contentPane 中:

  GroupLayout alternateGUILayout = new GroupLayout(alternateGUIFrame.getContentPane());
alternateGUIFrame.getContentPane().setLayout(alternateGUILayout);

最重要的是上面的第一行。

另一种选择是使用 JPanel,然后将 JPanel 添加到 JFrame 的 contentPane 的默认 BorderLayout.CENTER 位置。

关于java - GroupLayout 一次只能与一个容器一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13533982/

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