java - 在 JTabbedPane 中添加共享按钮

标签 java swing jbutton frame jtabbedpane

大家好,我一直使用此作为我的指南和我一直在编写的代码的基础:

Java Source

我想要做的是在所有 Pane 中添加一个共享按钮。我不想为每个按钮声明一个唯一的按钮,而是一个共享的按钮。我的第一个想法是将框架更改为盒式布局,然后在将 Pane 添加到框架后扔一个按钮:

    private static void createAndShowGUI() {
    //Create and set up the window.
    JFrame frame = new JFrame("test");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLayout(new BoxLayout(frame, BoxLayout.PAGE_AXIS));

    //Add content to the window.
    //frame.add(new GUI(), BorderLayout.CENTER);
    frame.add(new GUI());

    //setup Find button
    //findButton.setSize(110,55);
    findButton.setText("Find"); 
    findButton.setVisible(true);

    //add button to frame
    frame.add(findButton);

但是,我收到运行时错误:BoxLayout 无法共享。所以现在我就到这里了。当我调查为什么会出现此错误时,有人可以让我知道这是否是正确的方法?

最佳答案

建议:

  • 考虑将 JButton 放置在 JTabbedPane 下方或上方的 JPanel 中,以便它始终可见,并且您只需要一个按钮。
  • 或者,如果它必须位于选项卡中的组件中,那么每个组件都需要自己独特的 JButton,但它们可以共享相同的 Action,这就是我建议您执行的操作:创建一个扩展 AbstractAction 的内部私有(private)类,创建此内部类的一个实例,通过 JButton 的构造函数或其 setAction(...) 方法将其传递到每个 JButton。
  • 您的 BoxLayout 问题与您原来的问题完全无关,甚至不应该成为此讨论的一部分。是的,BoxLayout 必须在一个容器中使用,并且应将同一容器传递到 BoxLayout 中。您可能会将其添加到 JFrame 中,但实际上这会将其添加到 JFrame 的 contentPane 中,因此要使其正常工作,您必须将 frame.getContentPane() 传递到 BoxLayout 的第一个构造函数参数中:
<小时/>
frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.PAGE_AXIS));

这是我不喜欢直接在顶层窗口添加组件或设置布局的原因之一,因为它只不过是误导性的语法糖。

我更喜欢:

JPanel contentPane = (JPanel) frame.getContentPane();
contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.PAGE_AXIS));

关于java - 在 JTabbedPane 中添加共享按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21465462/

相关文章:

java - 如何在 log4j.properties 文件中共享 appenders 属性?

java - 详细信息格式化程序错误 : Evaluations must contain either an expression or a block of well-formed statements

java - JOptionPane.showInputDialog自动退出

java - JButton 在单击时卡住(因为我在 ActionListener 中启动递归函数)

java - 如何从组合框中的数字列表向 JPanel 添加按钮

Java RSAPublicKey 工厂异常

java - Spring 休息 | MappingJacksonHttpMessageConverter 产生无效的 JSON

java - JPanel 上的 MouseEvent - 坐标错误

java - 执行的 JTabbedPane 操作

java - 检测特殊字符的按键