java - JButton自定义问题

标签 java swing jbutton custom-component paintcomponent

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

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

我的代码无法支持这两种情况(颜色和文本位置)。我要么能够找到文本,要么能够获得背景颜色。 在当前的代码中,我得到了 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();
    }

最佳答案

乍一看,您似乎正在绘制文本,但您使用与背景相同的颜色来绘制文本,因此您将看不到它。黑色背景上的黑色文字就是黑色。

您需要为文本和背景使用不同的颜色。类似的东西;

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() 两次?

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

关于java - JButton自定义问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6953858/

相关文章:

java - JFreeCharts TimeSeriesCharts 没有 X 值

java - Intellij IDEA 的包资源管理器就像在 Eclipse 中一样

java - 如何获取和存储geojson的各个属性

java - 为什么我的射弹(图像对象)不移动? Java Swing

java - jbutton 上的 keyListener 不工作

java - 如何获取chrome浏览器Cookies并在IE浏览器中使用

java - SwingWorker的execute()方法似乎没有做任何事情

java - 玻璃面板控制台式文本显示组件

java - 通过 TextArea 中的 JButton 删除单行

java - 如何在按下 JButton 时关闭单个 GUI?