gpt4 book ai didi

Java Nimbus L&F 问题工具栏 JButton

转载 作者:行者123 更新时间:2023-12-01 12:33:36 24 4
gpt4 key购买 nike

当我在工具栏中使用 JToolbar 和 JButton 时,我遇到 Nimbus 外观和感觉问题。如果我使用 Metal,则 Nimbus 会出现问题,按钮会正确显示。

工具栏中的按钮只有在单击或鼠标悬停时才可见,而在 Metal 中,它们是标准可见的。我的问题或疑问,这个问题有解决办法吗?

示例代码:

按钮:测试,测试1在工具栏中,不可见,按钮测试2不在工具栏中,看起来正常,我希望按钮测试,测试1看起来像测试2,只是它们在工具栏中。

import java.awt.FlowLayout;

import javax.swing.*;

public class nimbus extends JFrame{

public nimbus()
{
//setLook("javax.swing.plaf.metal.MetalLookAndFeel");
setLook("javax.swing.plaf.nimbus.NimbusLookAndFeel");

FlowLayout fl = new FlowLayout();
fl.setAlignment(fl.LEFT);

this.setLayout(fl);
this.setSize(100, 200);

JToolBar tbar = new JToolBar();
tbar.setLayout(fl);
tbar.setSize(800, 40);
tbar.setFloatable(false);

JButton btn = new JButton("test");
btn.setSize(50, 23);
tbar.add(btn);

btn = new JButton("test1");
btn.setSize(50, 23);
tbar.add(btn);

this.add(tbar);

btn = new JButton("test2");
btn.setSize(50, 23);
this.add(btn);
}

public static void main(String[] args){
nimbus n = new nimbus();
n.setVisible(true);
}
public void setLook(String look)
{

try {
UIManager.setLookAndFeel(look);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedLookAndFeelException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

最佳答案

您的问题似乎是不同的 LookAndFeel 行为。
特别是,NimbusLookAndFeel-ToolbarUI 的实现与 MetalLookAndFeel-ToolbarUI 不同。

正如我在不同的线程中发布的那样,MetalLookAndFeel-ToolbarUI impl 看起来像:

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;
}
}
...

看一下:MetalUtils.isToolBarButton(c)

要改变这种行为,恐怕你必须创建自己的 ToolbarUI

关于Java Nimbus L&F 问题工具栏 JButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25748349/

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