Java Swing : How JToolbar changes appearance of a button?

标签 java swing jbutton custom-component jtoolbar

当您将 JButton 添加到 JToolbar 时,该按钮会采用特定的外观(与将其添加到 Jpanel 时不同)。 我创建了一些类似于 JToolbar 的组件,我想要相同的行为。 问题:我检查了 JToolbar 类以找到一些负责更改添加组件外观的特定代码(更改组件特定的绘制方法或 UI 委托(delegate)等)。我什么都没找到!我不明白 JToolbar 是如何工作的。 谁能给我解释一下它是如何工作的?

非常感谢,

埃尔维·纪尧姆

最佳答案

这似乎是由 MetalButtonUI 类的 update() 方法处理的。这是来自 JDK5_07 的代码:

public void update(Graphics g, JComponent c) {
    AbstractButton button = (AbstractButton)c;
    if ((c.getBackground() instanceof UIResource) &&
              button.isContentAreaFilled() && c.isEnabled()) {
        ButtonModel model = button.getModel();
        if (!MetalUtils.isToolBarButton(c)) {
            if (!model.isArmed() && !model.isPressed() &&
                    MetalUtils.drawGradient(
                    c, g, "Button.gradient", 0, 0, c.getWidth(),
                    c.getHeight(), true)) {
                paint(g, c);
                return;
            }
        }
        else if (model.isRollover() && MetalUtils.drawGradient(
                    c, g, "Button.gradient", 0, 0, c.getWidth(),
                    c.getHeight(), true)) {
            paint(g, c);
            return;
        }
    }
    super.update(g, c);
}

isToolBarButton() 方法只检查父 Container 是否是 JToolBar,所以我想一个解决方案是始终将 JButton 添加到 JToolBar,然后将工具栏添加到真正的 Container。

否则,我想您需要编写自己的自定义 UI 并覆盖 update() 方法。

关于Java Swing : How JToolbar changes appearance of a button?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8603584/

相关文章:

java - 将 Java 开发的 Web 应用程序 (Maven) 分发给不同平台的独立用户,这些用户可能不在其系统上使用 java?

java - 什么是 swingset2

java - 如何将 JMenuItem 链接到 JButton

java - 可缩放的 JScrollPane - setViewPosition 无法更新

java - foreach循环java中的数组错误

java - 有没有办法在按下按钮之前停止方法?

java - 如何在 Java 中将 ActionListener 添加到 JButton 上

Java:最小化 Jframe 窗口而不导致程序再次运行

java - Heroku "Cannot run more than 1 Free size dynos"但我只想运行一个

java - JSP:多个查询和生成键的问题