三大控件之————JTabel
来源:互联网 发布:知乎 柳岩 编辑:程序博客网 时间:2024/06/16 13:50
JTabel的使用
重点: 一般以模型方法创建表格:
DefaultTableModel model = new DefaultTableModel(data, colName);
设置表格中的的某一列具有按钮作用
MyCellEditor cellediter=new MyCellEditor(new JTextField());
表格的渲染器
MyTableCellRenderer cellrender = new MyTableCellRenderer();
给表格增加一行数组 (直接操作其对应的模型)
model.addRow(new String[]{str1,str2});
设置当前表格中某一具体格的文本
table.getModel().setValueAt(str, row, col);
具体使用可以查看下面的方法:
********************************************************************************************
public class MainFrame extends JFrame {
private JTable table;
private DefaultTableModel model;
private MyCellEditor cellediter=new MyCellEditor(new JTextField());
private MyTableCellRenderer cellrender = new MyTableCellRenderer();
String colName[] = {"添加","姓名","年龄"}; //一维数组为表格的表头部分
String data[][] = { //二维数组为表格的数据
{"添加","DAWEI","16"},
{"添加","LILY","14"},
{"添加","LUCY","12"},
};
MainFrame(){
init();
addTabel();
}
private void init() {
setSize(500, 400);
setResizable(false);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
private void addTabel(){
model = new DefaultTableModel(data, colName); //用模型创建表格
table = new JTable(model);
table.getColumn("添加").setCellEditor(cellediter); //给表格这一列设置事件
table.getColumn("添加").setCellRenderer(cellrender); //设置这一列表格的绘制风格
JScrollPane jsp = new JScrollPane(table);
add(jsp);
}
public static void main(String[] args) {
new MainFrame().setVisible(true);
}
}
*****************************************************************
public class MyCellEditor extends DefaultCellEditor{ //这个类相当于给表格写的按钮事件
//表格的这一列具有了按钮的功能
public MyCellEditor(JTextField textField) {
super(textField);
setClickCountToStart(1); //设置点击一次
}
public Component getTableCellEditorComponent(final JTable table, Object value,
boolean isSelected, final int row, final int column) {
JButton btn = new JButton();
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String str1 = JOptionPane.showInputDialog("请输入添加的名字");
String str2 = JOptionPane.showInputDialog("请输入添加的年龄");
DefaultTableModel model = (DefaultTableModel) table.getModel();
if(!str1.equals("") && !str2.equals("")){
model.addRow(new String[]{str1,str2}); //给表格增加一行数据
}
}
});
btn.setText(value.toString()); //点击后设置其文本
return btn;
}
}
*******************************************************************
//注:这个类为表格的渲染器,可以绘制表格的显示外观
//可以继承至JButton和JLabel等
public class MyTableCellRenderer extends JButton implements TableCellRenderer{
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
this.setText(value.toString());
return this; //由于继承自JButton,所以这里返回的是一个JButton的外观
}
}
*******************************************************************
******************************************************************************************************
下面给出一个完整的例子: 用进度条的方式显示在表格中
public class MainFrame extends JFrame {
MainFrame(){
init();
}
private void init() {
setSize(500, 300);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
String colNames[] = {"aa","bb"};
String data[][] = {
{"0","开始"},
{"0","开始"},
{"0","开始"}
};
DefaultTableModel model = new DefaultTableModel(data,colNames);
JTable table = new JTable(model);
MyCellEditor editor = new MyCellEditor(new JTextField()); //创建事件设置
MyCellRenderder render = new MyCellRenderder(); //渲染器
table.getColumn("aa").setCellRenderer(render); //设置"aa"这一列显示为进度条
table.getColumn("bb").setCellRenderer(render); //设置"bb"这一列显示为按钮
table.getColumn("bb").setCellEditor(editor); //设置"bb"这一列显示为巨头按钮功能
this.add(table);
}
/**
* @param args
*/
public static void main(String[] args) {
new MainFrame().setVisible(true);
}
}
********************************************
//另外也可以设置成具有下拉框JCombox的属性等。
public class MyCellEditor extends DefaultCellEditor {
public MyCellEditor(JTextField arg0) {
super(arg0);
setClickCountToStart(1);
}
public Component getTableCellEditorComponent(final JTable table, Object value,
boolean isSel, final int row, final int col) {
JButton btn = new JButton(value.toString());
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JButton btn = (JButton) e.getSource();
String string = btn.getText();
MyCellRenderder render = (MyCellRenderder) table.getCellRenderer(row, col);
render.begin(row);
String str= string.equals("开始")?"重设":"重设";
btn.setText(str);
table.getModel().setValueAt(str, row, col); //这里可以设置当前表格中某一具体格的文本
}
});
return btn;
}
public boolean stopCellEditing() {
return true;
}
}
********************************************
public class MyCellRenderder extends DefaultTableCellRenderer{
private ArrayList<MyProgressBar> mps = new ArrayList<MyProgressBar>();
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean isFocus, final int row, final int col) {
if(col == 0){
MyProgressBar mp = new MyProgressBar(table,row);
mp.setValue(Integer.parseInt(value.toString())); //设置进度条的文本为其显示的字体
mps.add(mp);
return mp; //如果是第一列,则绘制为进度条
}else{
JButton btn = new JButton(value.toString());
return btn; //其他列绘制为JButton
}
}
public void begin(int i){ //这里是进度条的方法
mps.get(i).start(); //每次点击后,这一行的进度条开始读取
}
}
********************************************
public class MyProgressBar extends JProgressBar implements ActionListener {
private Timer timer = new Timer(100,this);
private int row; //单独的一个进度条类,封装了开始设置其值的方法
private JTable table;
MyProgressBar(JTable table,int row){
this.table = table;
this.row = row;
this.setStringPainted(true);
}
public void start(){
this.setValue(0);
table.getModel().setValueAt(0, row, 0); //将当前表格的这一行的初始值设置为0
timer.start();
}
@Override
public void actionPerformed(ActionEvent e) {
int value = getValue()+1;
this.setValue(value);
System.out.println(value);
table.getModel().setValueAt(value, row, 0); //设置当前表格这一行的进度条的值为value
}
}
*********************************************************************************************************
JTabel的一些其他方法:
String columnNames[] = {"姓名","性别","年龄"};
String[][]data = {{"赵江1","男","12"},{"赵江2","女","13"},{"赵江3","男","14"},{"赵江4","女","15"}};
//数据模型
DefaultTableModel model = new DefaultTableModel(data, columnNames);
//以model创建JTable对象
JTable table = new JTable(model);
//JTable的属性类 -列属性
TableColumn column = table.getColumn("姓名");
column.setPreferredWidth(80);
column.setMaxWidth(80);
column.setMinWidth(80);
//对数据模型添加监听器
model.addTableModelListener(this);
//获取表格里面的值
String str = model.getValueAt(3, 2).toString();
System.out.println(str);
//表格单元是否可以编辑
boolean flag = model.isCellEditable(2, 2);
System.out.println(flag);
//JTabel 的对象即是表的选择模式设置 方式1
table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
// //JTabel 的对象即是表的选择模式设置 方式2
// ListSelectionModel mode = new DefaultListSelectionModel();
// mode.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
// table.setSelectionModel(mode);
public void tableChanged(TableModelEvent e) { //表格模型监听所对应的函数
int col = e.getColumn();
int row = e.getFirstRow();
DefaultTableModel mol = (DefaultTableModel) e.getSource();
//判断对象是否是属于该类
if(e.getSource() instanceof DefaultTableModel){
System.out.println("agag");
}
System.out.println(col);
System.out.println(row);
System.out.println(mol.toString());
}
*********************************************************************
- 三大控件之————JTabel
- 三大控件之————JList
- 三大控件之————JTree
- Java 实践——JTabel 绑定 List 数据
- Android自定义控件 —— 三大流程
- HBase导入大数据三大方式之(三)——mapreduce+completebulkload 方式
- java三大特性之————封装
- 黑马程序员——OC三大特性之封装
- JavaWeb笔记——三大组件之监听器
- JavaWeb笔记——三大组件之过滤器
- Java 三大特性之——继承
- Java 三大特性之——继承
- 国际结算三大方式之——汇款
- Android五大存储方式之三——SharedPreferences
- 三大基础排序之——插入排序
- 三大基础排序之——冒泡排序
- 三大基础排序之——选择排序
- Java SE——三大特性之封装
- Windows核心编程学习笔记(6)--进程详谈1
- iOS中系统自带正则表达式的应用
- 节点对象
- HDFS里Datanode上block大小的设置问题
- 20个新鲜的和鼓舞人心的电子商务网站
- 三大控件之————JTabel
- 反汇编系列(三)——函数篇
- 在工作中,一定要能够学会聆听
- Oracle安装时设的密码遗忘了怎么办
- C++11
- c++中十道面试题(一),可以看看喔
- 国信办举行《平凡的感动》首发暨赠书仪式
- xml 作业
- xml 节点