在2个不同的JFrame上使用相同的JToolBar

时间:2017-05-30 16:01:02

标签: jframe toolbar

此示例创建ToolBar并尝试将相同的ToolBar添加到2个不同的JFrame。

我原以为两个JFrame都有相同的ToolBar,但显然ToolBar只被添加到第二个JFrame中。

如果第二个JFrame的代码被注释掉,那么ToolBar会按预期添加到第一帧。

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.*;

public class ToolBarSample {
public static void main(final String args[]) {
JFrame frame = new JFrame("JToolBar Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JToolBar toolbar = new JToolBar();
toolbar.setRollover(true);


JButton button = new JButton("button");
toolbar.add(button);
toolbar.addSeparator();

toolbar.add(new JButton("button 2"));
toolbar.add(new JButton("button 3"));
toolbar.add(new JButton("button 4"));
Container contentPane = frame.getContentPane();
contentPane.add(toolbar, BorderLayout.NORTH);
contentPane.setPreferredSize(new Dimension(10,10));
JTextArea textArea = new JTextArea();
JScrollPane pane = new JScrollPane(textArea);
contentPane.add(pane, BorderLayout.CENTER);
frame.setSize(500, 500);
frame.setVisible(true);


JFrame frame2 = new JFrame("JToolBar Example 2");
frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane2 = frame2.getContentPane();
contentPane2.add(toolbar, BorderLayout.NORTH);
frame2.setSize(500, 500);
frame2.setVisible(true);

}
}

为什么只将JToolBar添加到第二个JFrame而不是两者都添加?

1 个答案:

答案 0 :(得分:0)

您可以同时将JToolbar(Component)添加到1个JFrame(Container)中。因为Swing / AWT组件的结构是一棵树。树的节点不能超过1个父节点。 在您的情况下,您可以实现一种方法来创建JToolbar。然后,您创建2个JToolbar并添加到2 JFrame,如下所示:

class ToolBarSample {
    public static void main(final String args[]) {
        JFrame frame = new JFrame("JToolBar Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


        Container contentPane = frame.getContentPane();
        contentPane.add(createToolbar(), BorderLayout.NORTH);
        contentPane.setPreferredSize(new Dimension(10, 10));
        JTextArea textArea = new JTextArea();
        JScrollPane pane = new JScrollPane(textArea);
        contentPane.add(pane, BorderLayout.CENTER);
        frame.setSize(500, 500);
        frame.setVisible(true);


        JFrame frame2 = new JFrame("JToolBar Example 2");
        frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container contentPane2 = frame2.getContentPane();
        contentPane2.add(createToolbar(), BorderLayout.NORTH);
        frame2.setSize(500, 500);
        frame2.setVisible(true);

    }

    private static JToolBar createToolbar() {
        JToolBar toolbar = new JToolBar();
        toolbar.setRollover(true);


        JButton button = new JButton("button");
        toolbar.add(button);
        toolbar.addSeparator();

        toolbar.add(new JButton("button 2"));
        toolbar.add(new JButton("button 3"));
        toolbar.add(new JButton("button 4"));
        return toolbar;
    }
}