2012-11-23 5 views
12

Nicht sicher, warum dieser Fehler auftritt. Ich benutze GroupLayout, weil ich möchte, dass es den Abstand für mich macht und in Zukunft weitere Panels zum Frame hinzufügen wird. Unten ist die Stapelverfolgung. HierGroupLayout kann nur mit einem Container gleichzeitig verwendet werden

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) 

ist der Code:

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

Antwort

22

Ihr Problem ist, dass Sie unwissentlich sind das Hinzufügen das Layout sowohl für die JFrame und seine contentPane. Die Lösung ist sicherzustellen, dass Sie es auf die contentPane des JFrame nur hinzufügen:

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

Es ist die erste Zeile darüber, dass die meisten Fragen.

Eine weitere Option besteht darin, mit JPanels zu arbeiten und dann die JPanels in der Standardposition BorderLayout.CENTER des JFrames contentPane hinzuzufügen.

+1

Danke! Normalerweise habe ich JPanels und füge sie dem Rahmen hinzu, aber heute habe ich beschlossen, alles direkt zum Rahmen hinzuzufügen. Ich werde das überprüfen und sehen, ob es funktioniert! --edit-- Es hat funktioniert! :) – Nonconformist

+0

@ Coolguy123: Gern geschehen. –

+0

Splendid. Danke für den Austausch! – Lawrence

Verwandte Themen