JAVA中JBUTTON的背景色问题

2024-11-28 15:58:37
推荐回答(2个)
回答1:

这个应该就是你要的效果....

import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.UIManager;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;

public class Exec1 extends JFrame {

public Exec1() {
init();
}

/**
* 初始化窗体
*/
private void init() {
String lookAndFeel = UIManager.getSystemLookAndFeelClassName();
try {
UIManager.setLookAndFeel(lookAndFeel);
} catch (Exception e) {
e.printStackTrace();
}

setLayout(null);
final JButton btnTest = new JButton("测试");
btnTest.setBounds(20, 30, 100, 25);
Border b = new LineBorder(Color.YELLOW, 1);
btnTest.setBorder(b);

add(btnTest);
setSize(200, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String[] args) {
new Exec1().setVisible(true);
}
}

=============
如果你想要那种的,就不能设lookandfeel了
String lookAndFeel = UIManager.getSystemLookAndFeelClassName();

因为你还没了解这部分的机制。

当你改变lookAndFeel之后,java UI的控件发生不少变化。就是说画控件的代码都不是一套的了。你以后了解这部分只是就知道了。
==============
先给你个思路,看看你就明白了。
=========
你用上面的方法设置,你可以到getSystemLookAndFeelClassName函数里看看
当你的系统是windows那它会返回
com.sun.java.swing.plaf.windows.WindowsLookAndFeel,然而用他之后。你所有控件的UI都是使用sun\java\swing\plaf\windows这下面的控件,如:
WindowsButtonUI.java
WindowsButtonListener.java
WindowsCheckBoxMenuItemUI.java
WindowsCheckBoxUI.java 等等。
而你没设lookandfeel之前使用swing默认的风格显示的。它默认是:
使用javax.swing.plaf.basic.BasicLookAndFeel这个类。而控件的UI就是用下面这些:
BasicButtonUI.java
BasicButtonListener.java
BasicCheckBoxMenuItemUI.java
BasicCheckBoxUI.java等等。其实你看看jdk源码就知道了。

控件UI就是显示控件样子的

回答2:

给你个背景色实例
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
import javax.swing.event.ChangeEvent;

public class CorlorChooserTest extends JFrame implements ActionListener {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new CorlorChooserTest();
}

public CorlorChooserTest() {
biuldFrame();
}

private void biuldFrame() {
JButton jbt_open = new JButton("背景颜色选择");
// 添加监听器
jbt_open.addActionListener(this);
// 内容面板设定一个流布局管理器
Container ctnr = this.getContentPane();
ctnr.setLayout(new FlowLayout());

ctnr.add(jbt_open);
this.pack();

// 设定窗体出现在屏幕的正中
// 获取屏幕的大小先...
Dimension scrnDim = Toolkit.getDefaultToolkit().getScreenSize();
// 计算本窗体的起始位置
// 注意不要使用this.width和this.height来获取本窗体的宽和高
// 不然计算位置不在屏幕中央,原因可能是因为pack方法的影响
// getSize方法可能重新计算了pack后的窗体大小
int x = (scrnDim.width - this.getSize().width) / 2;
int y = (scrnDim.height - this.getSize().height) / 2;

this.setLocation(x, y);
this.setVisible(true);
// 以下设定窗体的关闭动作
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

}

private Color chooseColor(Component comp) {
// 颜色选择对话框的参数意义
// 参一表示其父控件,非顶级控件(窗体类)都有一个父控件
// 显示时会以父控件作为中心显示,参二是对话框的标题
// 参三是,取消选择时返回的默认颜色这里默认颜色取自
// 所传参数的背景色。
Color rsltColor = JColorChooser.showDialog(this, "颜色选择", comp
.getBackground());
return rsltColor;
}

// *********<<内嵌颜色选择器的示例*******************************************************

private JColorChooser jcc = new JColorChooser();

public void stateChanged(ChangeEvent arg0) {
// TODO Auto-generated method stub
// 这个方法是处理颜色选择器选择事件的

// 选择的颜色
Color selectedColor = jcc.getColor();
// 设定主窗体第三个按钮的背景色

Component[] comps = this.getContentPane().getComponents();
// 这里使用了一个遍历所有子控件的方法
for (int i = 0; i < comps.length; i++) {
// 判断某控件的类型是否为JButton
// 我们知道最后一个控件的索引位置
// 所以这里大胆使用,这就是没有
// 将那些控件弄为实例变量带来的麻烦!!
if ((comps[i] instanceof JButton) && (i == comps.length - 1)) {
comps[i].setBackground(selectedColor);
}
}
}

// ****************内嵌颜色选择器的示例>>************************************************
public void actionPerformed(ActionEvent arg0) {
// 注意事件源转型,这里必须明确知道
// 事件源的类型,不然可能转型失败而抛出异常。
JButton jbt_bk = (JButton) arg0.getSource();
jbt_bk.setBackground(this.chooseColor(this));
}
}