我正在编写一个 POS 系统(销售点)来取乐。POS 系统的一个典型特征是针对不同产品具有不同背景颜色的按钮。但我不是指按钮图像背后的背景,我的意思是在这张随机图片中,我从谷歌图片中得到了:
编辑:注意我改变了系统的外观和感觉
我需要用我的按钮做类似的事情。我知道这可能有几种方法:
- 为我的按钮创建外观和感觉?
- 完全覆盖我的 JButtons 中的 paintComponenet 方法(但这是一种非常可悲的方法......当我覆盖它时没有绘制边框 + 文本......显然是个坏主意)
- 使用 button.setContentAreaFilled(false);,并在按钮后面放置一个与按钮大小相同的 JPanel。
我真的不知道如何创建自己的外观和感觉,这听起来很痛苦,尤其是对于 1 个按钮,我听到一些关于打破外观和感觉的事情,这让我害怕这个想法。第三种方式听起来很合理,而且不是非常困难,但我做我想做的事情的最好方法是什么?
现在我创建按钮的代码是这样的:
JButton b = new JButton(text);
b.addActionListener(this);
b.setFont(Main.f);
b.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
buttons.add(b);
return b;
我弄乱了这段代码(主要是为了好玩,而不是实用):
JButton b = new JButton(text){
public void paintComponent(Graphics g){
super.paintComponent(g);
Color bg = getBackground();
int borderchange = -50;
g.setColor(new Color(
Math.max(0,bg.getRed()+borderchange),
Math.max(bg.getGreen()+borderchange,0),
Math.max(bg.getBlue()+borderchange,0)));
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(getBackground());
int border = 4;
g.fillRect(border,border,getWidth()-border,getHeight()-border);
g.setColor(Color.BLACK);
g.setFont(getFont());
g.drawString(getText(),getWidth()/2,getHeight()/2);
}
};