Swing禁用JButtons在Windows LookAndFeel中没有文本

时间:2015-04-20 15:58:30

标签: java swing windows-8.1 look-and-feel

我正在为我的程序做一个摇摆gui,最近设置了系统外观和感觉。我正在使用Windows 8.1,因此它使用了Windows的外观和感觉。

我的程序的一部分是一个带有一些按钮的JList,它们对该列表的选定元素执行操作。如果没有选择任何元素或列表为空,我想禁用按钮。 当使用窗户外观时,这会导致他们没有看起来很奇怪的文字。

有没有办法在使用Windows外观时使用通常的灰色文本来禁用按钮?

1 个答案:

答案 0 :(得分:0)

好的,我发现了我的错误。

行为是由设置外观之前创建的按钮引起的。可以使用以下代码复制它:

import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Foo extends JFrame {

    public static void main(String[] args) {
        Foo foo = new Foo();
        foo.setVisible(true);
    }

    JButton jButton = new JButton("toggle enable");
    JButton jButton2 = new JButton("text");

    public Foo() {

        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (ClassNotFoundException | InstantiationException
                | IllegalAccessException | UnsupportedLookAndFeelException e) {
            throw new RuntimeException(e);
        }

        setLayout(new FlowLayout());

        add(jButton);

        add(jButton2);

        jButton.addActionListener(event -> jButton2.setEnabled(!jButton2.isEnabled()));

        pack();
    }

}

对于我的特殊情况,我通过在main方法中设置外观而不是窗口构造函数来修复它。