我需要一些有关自定义 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/