多个JButton

时间:2011-05-13 00:57:23

标签: java swing

鉴于我有一个可以添加到不同面板的按钮我是否可以说实例化1 JButton是不可能的?

示例:添加了一个“取消”按钮以退出应用程序并将其添加到带有一定数量选项卡的选项卡窗格中。

我能做到吗

JButton btnCancel = new JButton(“Cancel”);

并在JFrame的第一个选项卡的JPanel之一中 tab1.add(btnCancel);

第二个标签 tab2.add(btnCancel);

或者我必须为每个标签窗格创建一个新的JButton吗?

4 个答案:

答案 0 :(得分:2)

  

..我怎样才能使按钮不会成为新标签?

使用嵌套布局。 E.G。

import java.awt.*;
import javax.swing.*;
import javax.swing.border.TitledBorder;

class CancelTab {

    public static void main(String[] args) {
        SwingUtilities.invokeLater( new Runnable() {
            public void run() {
                JPanel gui = new JPanel(new BorderLayout(3,3));
                gui.setBorder(new TitledBorder("GUI"));
                JPanel controls = new JPanel(
                    new FlowLayout(FlowLayout.CENTER,5,5));
                controls.add(new JButton("Commit"));
                controls.add(new JButton("Cancel"));

                gui.add(controls,BorderLayout.SOUTH);

                JTabbedPane tabbedPane = new JTabbedPane();

                tabbedPane.addTab("Tab 1", new JLabel("Label 1"));
                tabbedPane.addTab("Tab 2", new JLabel("Label 2"));
                gui.add(tabbedPane, BorderLayout.CENTER);

                JOptionPane.showMessageDialog(null, gui);
            }
        });
    }
}

屏幕截图

enter image description here

答案 1 :(得分:1)

将其放在选项卡窗格下方。所以你的层次结构看起来像这样:

  • 的JFrame
    • JTabbedPane中
      • JPanel for tab 1
      • 用于标签2的JPanel等
    • JButton取消

答案 2 :(得分:1)

jleedev解决方案最好(1+),但是如果你绝对需要将它添加到每个JPanel,那么你可以创建一个用按钮的文本构造的AbstractAction,并用这个相同的AbstractAction创建新的JButton,或者你可以创建一个由所有具有相同名称和操作的JButton共享的ButtonModel。

答案 3 :(得分:0)

如果您计划按钮没有功能,这将起作用。 但是,如果您计划向对象添加任何侦听器,则执行除此之外的任何任务都不是一个好选择。 但是,如果您在执行操作时获取按钮的父容器并相应地执行任务,则它可以工作。

但无论哪种方式,为每次使用创建一个新的JButton都更有效率和逻辑性。