JTable(TableModel dm, TableColumnModel cm)
构造 JTable,使用 dm 作为数据模型、cm 作为列模型和默认的选择模型对其进行初始化。
采用数据模型与列模型进行构造JTable.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.lgh.j2se.fuxi;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.Image;
import java.util.ArrayList;
import java.util.List;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
/**
* 测试学习jtable
* @author lgh
*/
public class JTableTest extends JFrame {
private List<User> list;
public JTableTest(List<User> list) {
this.list = list;
init();
}
private void init() {
this.setSize(800, 600);
this.setLocationRelativeTo(null);
this.setLayout(new BorderLayout());
this.add(new JScrollPane(createJTable()), BorderLayout.CENTER);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
/**
* 创建JTable
* @return
*/
private JTable createJTable() {
String[] strs = new String[]{"用户名", "密码"};
int[] widths = new int[]{100, 100};
JTable jtable = new JTable(new MyTableModel(), new MyTableColumnModel(strs, widths));
jtable.setRowHeight(50);
jtable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
return jtable;
}
public static void main(String[] args) {
List<User> list = new ArrayList<User>();
list.add(new User("lgh", "lgh"));
list.add(new User("lgh", "lgh"));
list.add(new User("lgh", "lgh"));
list.add(new User("lgh", "lgh"));
list.add(new User("lgh", "lgh"));
list.add(new User("lgh", "lgh"));
JTableTest test = new JTableTest(list);
}
private class ColumnCellRenderer extends JLabel implements TableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
this.setHorizontalAlignment(JLabel.CENTER);
this.setFont(new Font("宋体", Font.PLAIN, 12));
this.setOpaque(true);
if (row % 2 == 0) {
setBackground(new Color(36, 38, 57));
} else {
setBackground(new Color(42, 43, 63));
}
if (isSelected) {
setBackground(new Color(96, 99, 131));
} else {
setBackground(Color.WHITE);
}
if (value == null) {
setText("");
} else {
if (value instanceof Image) {
setIcon(new ImageIcon((Image) value));
} else {
setText(value.toString());
}
}
return this;
}
}
/**
* 列模型
*/
private class MyTableColumnModel extends DefaultTableColumnModel {
private String[] strs;
private int[] widths;
private ColumnCellRenderer head;
private ColumnCellRenderer cell;
public MyTableColumnModel(String[] strs, int[] widths) {
this.strs = strs;
this.widths = widths;
head = new ColumnCellRenderer();
cell = new ColumnCellRenderer();
init();
}
private void init() {
for (int i = 0; i < strs.length; i++) {
TableColumn tc = new TableColumn(i);
tc.setHeaderRenderer(head);
tc.setCellRenderer(cell);
tc.setHeaderValue(strs[i]);
tc.setPreferredWidth(widths[i]);
this.addColumn(tc);
}
}
}
/**
* 数据模型
*/
private class MyTableModel extends AbstractTableModel {
/**返回当前的行数**/
public int getRowCount() {
if (list != null) {
return list.size();
} else {
return 0;
}
}
/**返回当前的列数**/
public int getColumnCount() {
return 2;
}
public Object getValueAt(int rowIndex, int columnIndex) {
User user = list.get(rowIndex);
switch (columnIndex) {
case 0:
return user.getUsername();
case 1:
return user.getPassword();
default:
return "";
}
}
}
}