我正在用Java中的JFrames制作GUI。我遇到了一个问题,尽管我的2个JFrame正在彼此画画。

public VidbergGUI() throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException {
    super("Automatic Output Verifier");
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    setBounds(100, 100, 600, 400);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Container con = this.getContentPane();
    con.add(titlePane);

    titlePane.setLayout(new BoxLayout(titlePane, BoxLayout.PAGE_AXIS));
    componentPane.setLayout(new BoxLayout(componentPane, BoxLayout.LINE_AXIS));

    programsLoaded = new JTable(data, columnNames) {
        @Override
        public boolean isCellEditable(int row, int col) {
            if (col == 3) return false;
            return true;
        }
    };
    programsLoaded.getColumnModel().getColumn(2).setCellEditor(new FileChooserEditor());

    tableHolder = new JScrollPane(programsLoaded);

    titleLabel.setFont(new Font("Ariel", Font.BOLD, 28));

    addButton.setSize(40, 40);
    removeButton.setSize(40, 40);

    titlePane.add(titleLabel, BorderLayout.PAGE_START);
    con.add(componentPane);
    componentPane.add(tableHolder, BorderLayout.LINE_END);
    componentPane.add(addButton, BorderLayout.EAST);
    componentPane.add(removeButton, BorderLayout.EAST);
    setVisible(true); // make frame visible
}


使用此设置,只有componentPane可见。如果我注释掉con.add(componentPane),则只有titlePane可见。有没有一种方法可以分配某种布局,使2帧垂直堆叠?

最佳答案

您知道BorderLayout只能在5个可用插槽中的每个插槽中布置单个组件吗?可能不会...

创建第三个JPanel并将其添加到titlePanecomponentPane,然后将其添加到CENTERBorderLayout位置

您可以在该面板上使用GridLayoutGridBagLayout ...

JPanel centerPane = new JPanel(new GridLayout(2, 1));
centerPane.add(titlePane);
centerPane.add(componentPane);
con.add(centerPane);


或者只是将titlePane添加到NORTH位置...

con.add(titlePane, BorderLayout.NORTH);

关于java - JFrame互相绘画,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26900608/

10-10 09:39