2014-01-29 4 views
0

Следующий код для прокладки компонентов возвращает ошибкуошибка возвращения Java BoxLayout BoxLayout не могут быть разделены

public class MainPanel extends JPanel 
{ 
    private JTextField txt1, txt2; 
    private JButton btnCopy, btnCut, btnDel; 
    private JPanel wrapper1, wrapper2; 

    public MainPanel() 
    { 
     txt1 = new JTextField(); 
     txt2 = new JTextField(); 

     btnCopy = new JButton("Copy"); 
     btnCut = new JButton("Cut"); 
     btnDel = new JButton("Delete"); 

     wrapper1 = new JPanel(); 
     wrapper1.setLayout(new BoxLayout(wrapper1, BoxLayout.Y_AXIS)); 
     wrapper1.setBorder(BorderFactory.createLineBorder(Color.BLACK)); 
     wrapper1.add(txt1); 
     wrapper1.add(txt2); 

     wrapper2 = new JPanel(); 
     wrapper2.setLayout(new BoxLayout(wrapper1, BoxLayout.Y_AXIS)); 
     wrapper2.setBorder(BorderFactory.createLineBorder(Color.BLACK)); 
     wrapper2.add(btnCopy); 
     wrapper2.add(btnCut); 
     wrapper2.add(btnDel); 

     setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); 
     add(wrapper1); 
     add(wrapper2); 
    } 
} 

Я осознаю подобный вопрос BoxLayout can't be shared error но он не решает мою проблему, так как я не с использованием JFrame, но JPanel вместо

Ошибка:

Exception in thread "AWT-EventQueue-0" java.awt.AWTError: BoxLayout can't be shared 
at javax.swing.BoxLayout.checkContainer(BoxLayout.java:464) 
at javax.swing.BoxLayout.invalidateLayout(BoxLayout.java:248) 
at javax.swing.BoxLayout.addLayoutComponent(BoxLayout.java:281) 
at java.awt.Container.addImpl(Container.java:1120) 
at java.awt.Container.add(Container.java:410) 
at copycut.MainPanel.<init>(MainPanel.java:39) 
at copycut.CopyCut.<init>(CopyCut.java:23) 
at copycut.CopyCut$1.run(CopyCut.java:39) 
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:727) 
at java.awt.EventQueue.access$200(EventQueue.java:103) 
at java.awt.EventQueue$3.run(EventQueue.java:688) 
at java.awt.EventQueue$3.run(EventQueue.java:686) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:697) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) 
+0

Добавить трассировку стека, чтобы мы скорее вам поможем! – Aarav

+0

Также рассмотрите 'javax.swing.Box',« Легкий контейнер, который использует объект «BoxLayout» в качестве менеджера компоновки ». – trashgod

ответ

1

Я считаю, что вместо того, чтобы:

wrapper2.setLayout(new BoxLayout(wrapper1, BoxLayout.Y_AXIS)); 

Вы хотите сделать:

wrapper2.setLayout(new BoxLayout(wrapper2, BoxLayout.Y_AXIS)); 

На данный момент, вы создаете новый BoxLayout с wrapper1 для родителей и попытаться «акции» ее, сделав его расположение wrapper2. Это просто ошибка (или, скорее всего, некоторое упущение после быстрой копирования/вставки): p