【问题标题】:JButton Customization IssueJButton 自定义问题
【发布时间】:2011-08-05 09:03:55
【问题描述】:

我需要一些关于自定义 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();
    }

【问题讨论】:

标签: java swing jbutton custom-component paintcomponent


【解决方案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方法中设置组件的大小?这似乎是错误的。你为什么要在Graphics 对象上调用finalize()

【讨论】:

  • 您好 Qwerky 非常感谢 .. 我得到了这个问题,它现在对我来说工作正常。我是第一次在 Swing 上工作...一直是 J2EE 人...所以请原谅我有趣的错误 :) 嗨 StanislavL ...也感谢您帮助我 :) ...
  • -1 用于再次重复完全不干净的代码:永远不会(如真的永远不会,即使地狱结冰也不会)在paintXX中更改组件状态。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-21
  • 1970-01-01
  • 2012-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多