禁用JButton时,文本显示为灰色

时间:2012-01-25 19:18:05

标签: java html swing jbutton

我正在为一个学校项目制作扫雷。单击一个字段/按钮时,它将被禁用,并根据其拥有的邻居数量显示其邻居的颜色。我在Eclipse中正在研究这个问题。它完美地工作,我几乎准备提交它。唯一的问题是颜色在Eclipse和JCreator中运行时有效,但是当我使用.bat /命令(java Minesweeper)运行它时,数字显示为灰色而不是彩色。

当我调用setText()时,我用html标签更改颜色。例如:setText("<html><font color=red>3</font></html>")

为什么会这样?颜色在Eclipse / JCreator中运行良好,但是当我通过cmd或批处理脚本运行游戏时

试试这个:它对我不起作用......

在Eclipse / JCreator中编译并运行它。然后尝试使用java Test

运行它

在Eclipse / JCreator中运行时文本为红色,在脚本中运行时为灰色

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

class Test {
    public static void main(String[] args) {
        JFrame mainFrame = new JFrame("Test");
        JButton testButton = new JButton("Click this");

        MouseAdapter buttonListener = new MouseAdapter() {
            public void mouseReleased(MouseEvent e) {
                int modifier = e.getModifiers();
                JButton clicked = (JButton)e.getSource();
                clicked.setForeground(Color.RED);
                clicked.setText("<html><font color=red>" + clicked.getText() + "</font></html>");
                clicked.setEnabled(false);
            }
        };

        mainFrame.setMinimumSize(new Dimension(640,480));
        mainFrame.getContentPane().add(testButton);
        testButton.addMouseListener(buttonListener);
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainFrame.setVisible(true);
    }
}

2 个答案:

答案 0 :(得分:3)

你必须测试JButton#isEnabled(),例如

JButton.setText("<html><font color="
  + (bClose.isEnabled() ? "black" : "red") + ">"
  + bClose.getText() + "</font></html>");

非常好JButton#setDisabledIcon(Icon)

答案 1 :(得分:2)

原来我系统上的命令java指向JRE 1.7.0_1而不是JRE 1.6.0_29(即使我从未将JRE 7的目录添加到PATH变量...)。由于某种原因,这个代码在两个JRE上表现不同。在JRE 7上,文本变灰了。在JRE 6上,它的行为方式与我想要的一样,并且文本不会变灰。