Java 之 SWing

    SWing窗体,在Java中也算是一个不错的东西吧。只不过跟.NET相比,虽然稍微炫丽了一点,但是好像它的样式可定制性并不强,更不可能跟Web相比。我曾经稍微了解下SWing 的皮肤设置,好像很麻烦,成本比较大。这里仅列出些比较实用的好用的方法吧。

    首先,我们看下有关JFrame的一些常用特性。

这里有窗口图标的设置,将窗体定义在屏幕的中心,设置默认退出,以及透明度渐变等等。看代码:

public JFrame getLoginframe() {
if(loginframe ==null){
loginframe
=new JFrame("Login");
//定义窗口图标
loginframe.setIconImage(Toolkit.getDefaultToolkit().getImage("source/icon/fire.png"));
//定义窗体大小
loginframe.setSize(450, 350);
//得到屏幕大小
Dimension ds = Toolkit.getDefaultToolkit().getScreenSize();
//定义窗口位置(屏幕中心)
loginframe.setLocation((int)(ds.getWidth()-loginframe.getWidth())/2, (int)(ds.getHeight()-loginframe.getHeight())/2);
//调用添加组件方法(该方法自定义的)
getContents(loginframe);
//初始透明度为全透明
com.sun.awt.AWTUtilities.setWindowOpacity(loginframe,0f);
//设置默认关闭操作时退出
loginframe.setDefaultCloseOperation(EXIT_ON_CLOSE);
//设置可见性
loginframe.setVisible(true);
//让窗体慢慢显示
for (int i=0; i<30; i++) {
try {
Thread.sleep(
100);
}
catch (InterruptedException e) {
e.printStackTrace();
}
com.sun.awt.AWTUtilities.setWindowOpacity(loginframe, i
/30.0f);//透明度渐变
loginframe.repaint();
}
}
return loginframe;
}

    接下来,就是一些JTable方面的方法了,因为目前来说很多人对JTable的应用还是不太熟练。

这里涉及的有JTable选中行,选中列的设置,以及选中行时候触发的事件

table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);// 只能单行选择
table.setColumnSelectionAllowed(false);// 不能选中单元格
table.setCellSelectionEnabled(false);//单元格不可编辑
table.setRowSelectionAllowed(true);//允许选中行
ListSelectionModel selection
=table.getSelectionModel();
selection.addListSelectionListener(
new ListSelectionListener() {
@Override
publicvoid valueChanged(ListSelectionEvent e) {
if (evt.getValueIsAdjusting()) {
//如果没有这个判断,下面代码会执行两次
int[] click = table.getSelectedRows();//得到选中行
for (int i : click) {//操作处理
 int clumn = table.convertColumnIndexToView(0);
Object clickValue =
table.getValueAt(i, clumn);
if (clickValue != null) {
table.setValueAt(null, i, clumn);
} else {
table.setValueAt(true, i, clumn);
}
}
}
}
});

还有个比较常用的功能就是隐藏列,我在网上经常看到有人隐藏列的时候使用TableColumnModel的removeColumn()方法,此方法不是隐藏列,而是直接把此列从JTable中移除了。下面是正式的在JTable中隐藏一列:

privatevoid hideClumn(int columnIndex) {// 传入要隐藏的列的索引,从0开始
TableColumnModel tcm =table.getColumnModel();
tcm.getColumn(columnIndex).setMaxWidth(
0);
tcm.getColumn(columnIndex).setMinWidth(
0);
table.getTableHeader().getColumnModel().getColumn(columnIndex).setMaxWidth(0);// 隐藏猎头
}

至于其它设置JTable的行/列背景色前景色,包括选中行/列的背景色前景色,这里就不再详说了,可以参考API文档。

还有一个比较常见的问题就是给JLabel设置背景色。

在JLabel对象中,有设置背景颜色的方法setBackground(Color color),但是用过的人会发现,仅此这样使用的话,JLabel是无法显示背景色的。因为,JLabel默认是全透明的,只能显示其容器的背景色,需要设置其透明度setOpaque(true)以后,对Background的设置才会有效。

    JPanel weeks=new JPanel();
    weeks.setLayout(new GridLayout(0,7,0,0));
    weeks.setSize(elementWidth*7, elementHeight);
    weeks.setLocation(0, elementHeight);
    String[] WEEKS = {"日","一","二","三","四","五","六"};
    for (int i=0;i<WEEKS.length;i++) {
        JLabel temWeek=new JLabel(WEEKS[i],JLabel.CENTER);//显示内容,且居中显示
        temWeek.setOpaque(true);//透明度设置为true
        temWeek.setBackground(Color.GREEN);//背景色设置
        weeks.add(temWeek);
    }

效果:

原文地址:https://www.cnblogs.com/icerainsoft/p/2163519.html