java – 如何在更改某些JButton上的背景颜色而不是其他颜色时使J
发布时间:2020-12-14 19:35:18 所属栏目:Java 来源:网络整理
导读:我有一个JFrame,我正在放几个JButton. JButton的一半有颜色编码 – 即.当X事件发生时我把它们变成蓝色 – 我使用btn.setBackgroundColor(Color).当我使用setBackgroundColor时,我可以看到我看起来正常的JButton具有着色/着色/具有setBackgroundColor的那些没
我有一个JFrame,我正在放几个JButton. JButton的一半有颜色编码 – 即.当X事件发生时我把它们变成蓝色 – 我使用btn.setBackgroundColor(Color).当我使用setBackgroundColor时,我可以看到我看起来正常的JButton具有着色/着色/具有setBackgroundColor的那些没有.我已经尝试使颜色在有限的程度上透明,但我仍然得到一个平坦的颜色块,而不是有色版本的阴影按钮.
这似乎应该是一个很容易修复的东西,但它现在正在困扰我.我不想改变默认的LAF – 没关系.我不想放弃变色.我确实希望按钮都显示为样式(我用于HTML的单词). 所以我在这里错过了什么….它是什么? 编辑添加: JFrame frame = new JFrame(); frame.add(new JButton("42")); JButton btn24 = new JButton("24"); btn24.setBackground(Color.red); frame.add(btn24); frame.setVisible(true); 在上面的示例中,“42”将在我的Windows机器上显示底部和顶部的轻微颜色变化,从而创建圆形和阴影效果. “24”按钮将显示红色方块.我的问题是:有没有办法让“24”显示圆形/阴影/样式与顶部的红色色调?或者我是否需要简单地将所有按钮制成扁平方块以获得统一的外观? 谢谢! 解决方法
创建一个自定义JButton并覆盖paint方法,如下图所示:
import static javax.swing.JFrame.EXIT_ON_CLOSE; import java.awt.BorderLayout; import java.awt.Color; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Paint; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class Test { public static void main(String[] args) { JButton btn24 = new DepthButton("24"); JButton btn25 = new DepthButton("25"); btn24.setBackground(Color.red); btn25.setBackground(Color.GREEN); JPanel pane = new JPanel(new BorderLayout()); pane.add(new JButton("42"),BorderLayout.PAGE_START); pane.add(btn24,BorderLayout.PAGE_END); pane.add(btn25,BorderLayout.CENTER); frame.add(pane); frame.pack(); frame.setDefaultCloSEOperation(EXIT_ON_CLOSE); frame.setVisible(true); } /** * * @author Romain Guy */ public static class DepthButton extends JButton { /** Creates a new instance of DepthButton */ public DepthButton(String text) { super(text); setContentAreaFilled(false); } @Override protected void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; GradientPaint p; p = new GradientPaint(0,new Color(0xFFFFFF),getHeight(),getBackground()); Paint oldPaint = g2.getPaint(); g2.setPaint(p); g2.fillRect(0,getWidth(),getHeight()); g2.setPaint(oldPaint); super.paintComponent(g); } } } 这是结果: 这个例子来自一本优秀的高级Java摇摆书:肮脏的富客户端 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |