2012-11-23 13 views
12

Değil emin az bir konteyner ile kullanılabilir. GroupLayout'u kullanıyorum çünkü benim için boşluğu yapmasını istiyorum ve gelecekte çerçeveye daha fazla panel ekleyeceğim. Aşağıda yığın izi.GroupLayout bir anda yalnızca

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

cevap

22

Senin sorunun, bilmeden JFrame ve ContentPane hem düzeni ekliyoruz ki: İşte

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) 

kodudur. çözüm sadece JFrame en ContentPane eklemek emin olmaktır:

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

o en önemli yukarıda İlk cümlesi.

Başka bir seçenek JPanels çalışmak ve sonra varsayılan BorderLayout.CENTER pozisyonunda JFrame en ContentPane için JPanels eklemektir.

+1

teşekkürler! Genellikle JPanels'ım var ve onları çerçeveye ekliyorum ama bugün her şeyi doğrudan çerçeveye eklememeye karar verdim. Bunu kontrol edip işe yarayıp yaramadığına bakacağım! - Çalıştırdı! :) – Nonconformist

+0

@ Coolguy123: rica ederim. –

+0

Splendid. Adamı paylaştığın için teşekkürler! – Lawrence

İlgili konular