![](/img/trans.png)
[英]HiDPI support with java 9+, scalling issue with JTable gridlines with Windows L&F - but not Nimbus
[英]Java Nimbus L&F issue Toolbar JButton
当我在工具栏中使用JToolbar和JButton时,我对Nimbus外观有问题。 如果我使用Metal,我只遇到Nimbus的问题,那么按钮会正确显示。
如果单击或将鼠标悬停在工具栏中,则按钮仅可见;而在金属中,按标准可见。 我的问题或疑问,这个问题有解决方案吗?
示例代码:
按钮:test,test1在工具栏中,不可见,按钮test2在工具栏中,但看起来不正常,我希望按钮test,test1看起来像test2一样,只是它们在工具栏中。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.