swing Jable 学习(一)—TableColumnModel

TableColumnModel:

TableColumnModel本身是一个Interface,里面定义了许多与表格的"列(行)"有关的方法,例如增加列,删除列,设置与取得"列"的相关信 息.通常我们不会直接实现TableColumnModel界面,而是会利用JTable的getColumnModel()方法取得TableColumnModel对象,再利用此对象对 字段做设置.举例来说,如果我们想设计的表格是包括有下拉式列表的Combo Box,我们就能利用TableColumnModel来达到这样的效果.

我们先看看下面的例子:

import javax.swing.table.AbstractTableModel;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class ColumnModelTest{
     
    public ColumnModelTest() {
    
   	JFrame f = new JFrame();
   /*由于我们的MyTable类继承了AbstractTableModel并且实作了getColmunCount(),getRowCount(),getValueAt()方法.因此我们可以通
    *过MyTable来产生TableModel的实体.
    */ 
   	MyTable mt=new MyTable();
   	JTable t=new JTable(mt);//我们利用MyTable来建立JTable.
   	JComboBox c = new JComboBox();//建立一个JComboBox的对象.
   	c.addItem("Taipei");//我们在新建立的JComboBox对象里新增三个项目.
   	c.addItem("ChiaYi");
   	c.addItem("HsinChu");
    /*我们利用JTable所提供的getTableColumnModel()方法取得TableColumnModel对象,再由TableColumnModel类所提供的getColumn()方
     *法取得TableColumn对象,TableColumn类可针对表格中的每一行做具体的设置,例如设置字段的宽度,某行的标头,设置输入较复杂的
     *数据类型等等.在这里,我们利用TableColumn类所提供的setCellEditor()方法,将JComboBox作为第二行的默认编辑组件.
     */
   	t.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(c));
   	t.setPreferredScrollableViewportSize(new Dimension(550, 30));
        JScrollPane s = new JScrollPane(t);
        
        f.getContentPane().add(s, BorderLayout.CENTER);
	    f.setTitle("ColumnModelTest");
        f.pack();
        f.setVisible(true);
        
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }

    public static void main(String args[]) {
    
        new ColumnModelTest();
    }
      
}

class MyTable extends AbstractTableModel{

        Object[][] p = {
            {"阿呆", "Taipei",new Integer(66), 
              new Integer(32), new Integer(98), new Boolean(false),new Boolean(false)},
            {"阿瓜", "ChiaYi",new Integer(85), 
              new Integer(69), new Integer(154), new Boolean(true),new Boolean(false)},          
        };

        String[] n = {"姓名", 
        	         "居住地",
                      "语文",
                      "数学",
                      "总分",
                      "及格",			         
                      "作弊"};
    
        public int getColumnCount() {
            return n.length;
        }

        public int getRowCount() {
            return p.length;
        }

        public String getColumnName(int col) {
            return n[col];
        }

        public Object getValueAt(int row, int col) {
            return p[row][col];
        }
	    public Class getColumnClass(int c) {
        	return getValueAt(0, c).getClass();
    	}
	    /*public boolean isCellEditable(int rowIndex, int columnIndex) {
		    return true;	
    	}
	    public void setValueAt(Object value, int row, int col) {
        	p[row][col] = value;
		    fireTableCellUpdated(row, col);
    	}*/
}

读者运行此程序可以发现,利用继承AbstractTableModel抽象类所产生的JTable的内容是不能被修改的.那如果想要让用户可以修改表格 中的某一个字段,例如勾选Check Box或是直接修改某个字段的数字,该怎么做呢?很简单,只要我们在范例中的MyTable类中覆写AbstractTab leModel抽象类中的isCellEditable()方法即可.下面即是isCellEditable()的实作:

public boolean isCellEditable(int rowIndex,int columnIndex){
     return true;
}  

在isCellEditable()中,我们只有一行简单的程序代码:return true,意思是将我们表格内的每个cell都变成可修改.但仅仅修改这个程 序代码还不行,你可以发现虽然表格现在变成了可以修改了,但更改完之后按下[Enter]键,内容马上恢复成原有的值!解决的方法是覆写 AbstractTableModel抽象类中的setValueAt()方法,这个方法主要是让我们将改过的值存入表格中,如下所示:

public void setValueAt(Object value,int row,int col){
     p[row][col]=value;
     fireTableCellUpdated(row,col);
}  

其中value为我们所更改的值,我们将value存入p[row][col]中,并且调用firTableCellUpdated()函数来告诉我们的系统表格已经做了更 改了,关于这一部份,我们后面会再对事件处理作详细地介绍,在此范例中有没有加入fireTableCellUpdated()方法对运行结果不会造成影响 .

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: jable.tv 是什么? 我无法提供有关 jable.tv 的任何信息,因为我的知识截止日期是 2021 年,并且我并不能浏览网络。如果您有关于 jable.tv 的任何问题,可能需要使用其他资源来寻找答案。 ### 回答2: Jable.tv是一个在线电视平台,提供各种类型的影片供用户观看。这个平台有大量的电影、电视剧、综艺节目、动画片、纪录片等内容,可以满足不同用户的需求。用户可以根据自己的兴趣选择想要观看的影片,同时还可以根据自己的喜好来定制自己的播放列表。Jable.tv还拥有一个强大的搜索引擎,可以帮助用户快速找到自己想要观看的内容。 与传统的电视台不同,Jable.tv是一个基于互联网的平台,用户可以根据自己的时间和地点自由选择想要观看的影片。用户只需要通过电脑、手机、平板等设备连接到互联网,就可以随时随地观看自己喜欢的节目。而且,Jable.tv还提供了高清的影片播放,让用户可以享受到更优质的视听体验。 除了提供丰富的影片资源外,Jable.tv还会根据用户的观看历史和兴趣推荐相似的影片,为用户带来更好的观影体验。同时,用户还可以与其他用户分享自己观看过的影片,互相推荐好看的节目。 总之,Jable.tv是一个多样化的在线电视平台,为用户提供了丰富的影片资源和个性化的观影体验。无论是喜欢电影、电视剧、综艺节目还是动画片和纪录片,用户都可以在Jable.tv上找到自己喜欢的内容。这个平台的存在使得用户可以更加便捷地享受到高质量的影视娱乐。 ### 回答3: Jable.tv是一个在线的聚集了各种各样短视频节目的平台。这个平台上拥有来自世界各地的视频内容,包括电影预告片、音乐视频、体育赛事、游戏实况、搞笑视频等等。用户可以通过Jable.tv来观看不同类型的视频,以满足自己的娱乐需求。 Jable.tv提供了方便用户浏览和搜索视频的功能,用户可以根据自己的兴趣选择观看不同的视频内容。此外,Jable.tv还提供了用户交互的功能,用户可以在观看视频时进行评论、点赞和分享,与其他观看同样视频的用户进行互动。 除了观看视频,Jable.tv还可以让用户上传自己的视频内容,与其他用户分享自己的创作。这个平台为用户提供了展示自己才华和创意的机会。 总之,Jable.tv是一个集合了各种各样短视频节目的在线平台,提供了丰富多样的视频内容供用户观看和互动。无论是寻找娱乐,还是展示自己的创作,Jable.tv都可以满足用户的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值