BoxLayout无法共享

时间:2014-10-29 15:47:17

标签: java swing layout-manager boxlayout

是的,我用Google搜索约30分钟。是的,stackoverflow中有关于该主题的2个不同的帖子,但那些没有给我解决我的问题。

我正在使用BoxLayout的几个Panel来定位一些东西。当我尝试将最后的东西添加到我的主面板时,我得到“BoxLayout无法共享”。

代码:

private void open(int i) {
    JLabel titelLabel = new JLabel("Aufgabenblatttitel: ");
    JTextField titelTextField = new JTextField();
    JLabel dozentLabel = new JLabel("Dozent: ");
    JTextField dozentTextField = new JTextField();
    JLabel beschreibungLabel = new JLabel("Aufgabenblattbeschreibung: ");
    JTextField beschreibungTextField = new JTextField();
    JLabel studiengangLabel = new JLabel("Studiengang: ");
    JTextField studiengangTextField = new JTextField();
    JLabel dateLabel = new JLabel("Erstellt am: ");

    for(Aufgabe aufgabe : data.get(i).getAufgaben()) {
        JPanel aufgabenPanel = new JPanel();

        JLabel aufgabeTitelLabel = new JLabel("Titel: ");
        JTextField aufgabeTitelTextField = new JTextField();
        aufgabeTitelTextField.setText(aufgabe.getTitel());
        JPanel aufgabeTitelPanel = new JPanel();
        aufgabeTitelPanel.add(aufgabeTitelLabel);
        aufgabeTitelPanel.add(aufgabeTitelTextField);
        aufgabeTitelPanel.setLayout(new BoxLayout(aufgabeTitelPanel, BoxLayout.LINE_AXIS));

        JLabel aufgabeBeschreibungLabel = new JLabel("Beschreibung: ");
        JTextField aufgabeBeschreibungTextField = new JTextField();
        aufgabeBeschreibungTextField.setText(aufgabe.getBeschreibung());
        JPanel aufgabeBeschreibungPanel = new JPanel();
        aufgabeBeschreibungPanel.add(aufgabeBeschreibungLabel);
        aufgabeBeschreibungPanel.add(aufgabeBeschreibungTextField);
        aufgabeBeschreibungPanel.setLayout(new BoxLayout(aufgabeBeschreibungLabel, BoxLayout.LINE_AXIS));

        JLabel aufgabeLoesungLabel = new JLabel("Lösung: ");
        JTextField aufgabeLoesungTextField = new JTextField();
        aufgabeLoesungTextField.setText(aufgabe.getLoesung());
        JPanel aufgabeLoesungPanel = new JPanel();
        aufgabeLoesungPanel.add(aufgabeLoesungLabel);
        aufgabeLoesungPanel.add(aufgabeLoesungTextField);
        aufgabeLoesungPanel.setLayout(new BoxLayout(aufgabeLoesungPanel, BoxLayout.LINE_AXIS));

        aufgabenPanel.add(aufgabeTitelPanel);
        aufgabenPanel.add(aufgabeBeschreibungPanel);
        aufgabenPanel.add(aufgabeLoesungPanel);
        aufgabenPanel.setLayout(new BoxLayout(aufgabenPanel, BoxLayout.PAGE_AXIS));

        this.add(aufgabenPanel);
    }       
}

这是“AufgabeEditieren”类的一部分,定义为:

public class AufgabeEditieren extends JPanel { ... }

所以:AufgabeEditieren构造函数在初始化类之后调用open()。它试图创建一些面板和对象,并希望通过“this.add(aufgabenPanel);”将它们添加到类本身。这是对AufgabeEditieren(它的对象)的引用。那为什么它不起作用?它是一个小组,应该能够获得这些项目?感谢...

1 个答案:

答案 0 :(得分:3)

好吧,我花了一段时间,因为我真的不熟悉你的母语(如果你用变量的英文名称发布你的代码会更简单),但问题来自于:

aufgabeBeschreibungPanel.setLayout(new BoxLayout(aufgabeBeschreibungLabel, BoxLayout.LINE_AXIS));

您在aufgabeBeschreibungPanel上设置BoxLayout,但提供aufgabeBeschreibungLabel作为BoxLayout的参数。你应该写:

aufgabeBeschreibungPanel.setLayout(new BoxLayout(aufgabeBeschreibungPanel, BoxLayout.LINE_AXIS));

当看到这个问题时,最常见的原因是你写道:

y.setLayout(new BoxLayout(x, BoxLayout.XXX));

其中yx不同。