use*_*027 5 java swing look-and-feel jbutton
我有一个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);
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,"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, 0, new Color(0xFFFFFF), 0, getHeight(), getBackground());
Paint oldPaint = g2.getPaint();
g2.setPaint(p);
g2.fillRect(0, 0, getWidth(), getHeight());
g2.setPaint(oldPaint);
super.paintComponent(g);
}
}
}
Run Code Online (Sandbox Code Playgroud)
该示例来自一本关于高级 java swing 的优秀书籍:Filthy Rich Clients https://github.com/romainguy/filthy-rich-clients/blob/master/Gradients/TwoStopsGradient/src/DepthButton.java
| 归档时间: |
|
| 查看次数: |
947 次 |
| 最近记录: |