1

我需要一些有关自定义 JButton 的帮助。

我正在使用以下扩展方法来执行此操作......我需要为按钮添加背景颜色,并且我需要在按钮的两个位置(左上和中心)放置两个不同的文本

我的代码不能同时支持这两种情况(颜色和文本位置)。要么我能够找到文本,要么我能够获得 BG 颜色。在当前代码中,我得到了 BG 颜色,但没有出现文本

protected void paintComponent(Graphics g) {
        g.setColor( color);
        g.fillRect(0, 0, getSize().width, getSize().height);
        super.paintComponent(g);
        setPreferredSize(new Dimension(47, 33));

        if (isHeader) {
            g.setFont(new Font("Arial", Font.PLAIN, 11));
            g.drawChars(date.toCharArray(), 0, date.length(), 13, 20);
            //setBackground(color);

        } else {
            g.setFont(new Font("Arial", Font.PLAIN, 9));
            g.drawChars(date.toCharArray(), 0, date.length(), 3, 11);

            g.setFont(new Font("Arial", Font.PLAIN, 11));
            g.drawChars(hours.toCharArray(), 0, hours.length(), 18, 20);

        }
        super.paintComponent(g);
        setContentAreaFilled(false);
        g.finalize();
    }
4

1 回答 1

1

乍一看,您似乎绘制文本,但您绘制的是与背景相同的颜色,因此您将无法看到它。黑色背景上的黑色文本只是黑色。

您需要为文本和背景使用不同的颜色。就像是;

protected void paintComponent(Graphics g) {
    g.setColor(backgroundColor);
    g.fillRect(0, 0, getSize().width, getSize().height);
    super.paintComponent(g);
    setPreferredSize(new Dimension(47, 33));

    g.setColor(textColor); //set the text color before drawing the text
    if (isHeader) {
        g.setFont(new Font("Arial", Font.PLAIN, 11));
        g.drawChars(date.toCharArray(), 0, date.length(), 13, 20);
    } else {
        g.setFont(new Font("Arial", Font.PLAIN, 9));
        g.drawChars(date.toCharArray(), 0, date.length(), 3, 11);

        g.setFont(new Font("Arial", Font.PLAIN, 11));
        g.drawChars(hours.toCharArray(), 0, hours.length(), 18, 20);
    }
    super.paintComponent(g);
    setContentAreaFilled(false);
    g.finalize();
}

这些似乎是您的代码中的其他几个有趣之处。你为什么不使用setBackground(),为什么要打super.paintComponent()两次电话?

编辑: 另外,为什么要在paint方法中设置组件的大小?这似乎是错误的。你为什么要调用finalize()这个Graphics对象?

于 2011-08-05T09:23:53.323 回答