java - 为 JToolbar 创建复合 Swing 组件

标签 java swing jtoolbar

当使用 setRollover(true) 时,Swing 工具栏上的按钮是扁平的,没有边框,只有在悬停/按下按钮时才会绘制边框。但是,如果首先将按钮添加到面板,然后将面板添加到工具栏,则这不起作用。有什么简单的方法可以实现吗?

我希望按钮位于 JPanel 中,使它们充当单个组件(想象一个带有第一页/上一页/下一页/最后一页按钮的分页组件)。我还希望它能在不考虑 L&F 的情况下工作(就像 JPanel 不在工具栏和按钮之间一样)。

编辑:

在以下示例中比较按钮一和二(直接添加)与按钮三和四(通过 JPanel 添加):

import javax.swing.*;

public class ToolbarTest extends JFrame {
    ToolbarTest() {
        JToolBar toolbar = new JToolBar();
        toolbar.setRollover(true);

        JButton button = new JButton("One");
        button.setFocusable(false);
        toolbar.add(button);

        button = new JButton("Two");
        button.setFocusable(false);
        toolbar.add(button);

        JPanel panel = new JPanel();
        button = new JButton("Three");
        button.setFocusable(false);
        panel.add(button);

        button = new JButton("Four");
        button.setFocusable(false);
        panel.add(button);

        toolbar.add(panel);

        add(toolbar);
        pack();
    }

    public static void main(String[] args) throws Throwable {
        // optional: set look and feel (some lf might ignore the rollover property)
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {      // or "Windows", "Motif"
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }

        ToolbarTest frame = new ToolbarTest();
        frame.setVisible(true);
    }
}

截图如下:

Nimbus LF 上的工具栏:

The toolbar on Nimbus LF

鼠标悬停在第二个按钮上时的相同工具栏(未显示鼠标光标):

Hovered Nimbus

Windows LF 上的相同工具栏:

The same toolbar on Windows LF

我希望“三”和“四”按钮的工作方式与“一”和“二”按钮相同。

最佳答案

1) 我建议 to set JMenuBar as container而不是 JToolbar

缺点:

  • 不可移动和可拆卸,也不能脱离Container

  • 可以通过使用 LayoutManager

    像另一个 JComponent 一样放置在任何地方,但只能放在 Container 中

2) JToolBar 最好将一个 JPanel 嵌套在另一个 JComponents 中,如您的代码示例所示


3) 在您的代码示例中,您定义了一个 JButton 第四次,在 Java 中需要定义为单独的 Objects

关于java - 为 JToolbar 创建复合 Swing 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9701073/

相关文章:

java - Java 中的斐波那契内存/动态编程

java - 在java中传递数组来获取平均中位数和众数

java - 如何构建API接口(interface)进行改造?

java - 使用图形的桨碰撞侧检测

java - JTabbedPanes 中的 JToolBar;停靠和取消停靠时选项卡名称不正确

Java Nimbus L&F 问题工具栏 JButton

java - 使用 JGraphMenu 的菜单项的 ActionListener

java - 在继续代码中的下一项之前,有没有一种方法可以解决自身问题

java - 如何在 Java Swing 中拖放从 Web 浏览器接收图像?

java - JToolbar:JToggleButton 对齐