gpt4 book ai didi

java - 在 JTabbedPane 中添加共享按钮

转载 作者:行者123 更新时间:2023-11-30 04:03:12 24 4
gpt4 key购买 nike

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com