zoukankan      html  css  js  c++  java
  • 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);
        }

    效果:

  • 相关阅读:
    Redis 思维导图 (解析版)
    一张图片了解redis
    Redis 思维导图
    计算机网络协议
    IT笔面试题
    Hadoop集群搭建
    天涯论坛只看楼主
    齐秦&r大约在冬季现场版
    郁可唯茶汤现场版
    MTK平台电路设计01
  • 原文地址:https://www.cnblogs.com/icerainsoft/p/2163519.html
Copyright © 2011-2022 走看看