最近几个月尽弄swing了,对于一些不是很常用的设计、配置用起来着实走了不少弯路啊,这里记录一下,免得再在同一个地方再摔倒。
1、设置窗口的图标
默认的Jframe左上角的图标时Java的咖啡杯图标,以下代码用来自定义图标:
String logoFilePath = "/icon/a.png";//图标目录
JFrame jFrame=new JFrame(frameTitle);
ImageIcon imageIcon = new ImageIcon(this.getClass().getResource(logoFilePath));
java.awt.Image image = imageIcon.getImage();
jFrame.setIconImage(image);
图标最好不要弄成ico格式的,我测试过好几次,每次都像没有设置一样,jpeg、jpg、png格式最好。
2、窗口带有滚动条
swing里面有个滚动条的控件,叫JScrollPane,把显示的控件放到这个控件里面,当数据过多时会自动出现滚动条,如下面的代码:
JScrollPane scrl = new JScrollPane(jPanel,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
在将JScrollPane放到Frame中:
JFrame jFrame=new JFrame(frameTitle);
Container cont = jFrame.getContentPane();
//添加到带有滚动条的panel
JScrollPane scrl = new JScrollPane(jPanel,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
cont.add(scrl);
jFrame.setVisible(true);//可见
第一个参数:需要放到JScrollPane控件中的内容,我这里是一个Jpanel,所有的东西都放在这个Jpanel上,然后将JPanel放在JScrollPane里面。
第二个参数:设置垂直滚动条的显示方式,有五种方式
VERTICAL_SCROLLBAR_ALWAYS:一直显示
VERTICAL_SCROLLBAR_AS_NEEDED:需要的时候显示,类似于自动
VERTICAL_SCROLLBAR_NEVER:从来不显示
VERTICAL_SCROLLBAR
VERTICAL_SCROLLBAR_POLICY
第三个参数:设置水平滚动条的显示方式,也有五种,类型垂直滚动条的方式。
以上设置完了之后,滚动条会出来,但是没有滑块,也就是不能上下滑动,还需要设置一下放在里面的panel的宽和高。如下:
//设置大小(必须设置,否则不会出现滚动条滑块)
jPanel.setPreferredSize(new Dimension(530, 1070));
第一个参数:宽度,当放在JScrollPane中的内容的宽大超过该宽度且设置为允许横向滚动条出现时就会出现横向滚动条,否则不出现;
第二参数:高度,出现条件同横向滚动条
3、设置背景色
这个比较简单:jPanel.setBackground(new Color(r,g,b));但是我们通常拿到的都是16进制的数据,类似于5a9bd5这种的,而设置背景的时候需要的是rgb三原色的数值,因此需要转化一下。
/**
* Color对象转换成字符串
* @param color Color对象
* @return 16进制颜色字符串
* */
public static String toHexFromColor(Color color){
String r,g,b;
StringBuilder su = new StringBuilder();
r = Integer.toHexString(color.getRed());
g = Integer.toHexString(color.getGreen());
b = Integer.toHexString(color.getBlue());
r = r.length() == 1 ? "0" + r : r;
g = g.length() ==1 ? "0" +g : g;
b = b.length() == 1 ? "0" + b : b;
r = r.toUpperCase();
g = g.toUpperCase();
b = b.toUpperCase();
su.append("0xFF");
su.append(r);
su.append(g);
su.append(b);
//0xFF0000FF
return su.toString();
}
/**
* 字符串转换成Color对象
* @param colorStr 16进制颜色字符串
* @return Color对象
* */
public static Color toColorFromString(String colorStr){
if(colorStr.toUpperCase().startsWith("0XFF")){//说明有16进制的前缀
colorStr = colorStr.substring(4);
}
Color color = new Color(Integer.parseInt(colorStr, 16)) ;
return color;
}
4、设置JLabel的背景色、字体颜色
JLabel titleLabel = new JLabel("测试");
//设置组件JLabel不透明,只有设置为不透明,设置背景色才有效
titleLabel.setOpaque(true);
titleLabel.setBackground(Color.red);//设置背景色
titleLabel.setForeground(Color.white);//用前景色属性设置字体颜色
titleLabel.setFont(new Font("宋体",Font.BOLD,16));//字体、加粗、16号大小
若是设置前景色、背景色,上面代码中的那句titleLabel.setOpaque(true); 一定要加,否则看不到效果。
5、JLabel、JTextField的居中
JLabel的居中比较简单,用构造方法就OK:
JLabel testLabel= new JLabel("测试",JLabel.CENTER);//设置名称且居中
文本框的居中则是:
JTextField test= new JTextField("");
test.setHorizontalAlignment(JTextField.CENTER);//居中
对齐类型有:
JTextField.LEFT:居左对齐
JTextField.CENTER:居中对齐
JTextField.RIGHT:居右对齐
JTextField.LEADING:前端对齐
JTextField.TRAILING:尾部对齐