JTable
>>>init 的几种方法:
>> JTable table= new JTable(Object[][] data, Object[] colName);
>> JTable table= new JTable(Vector data,Vector colName);
//初始化时直接赋值,注意使用这两种初始化方法,直接将table加入container中时,不能显示table header。需要用JTable的getTAbleHeader()
//方法获取JTableHeader组件,放置于container中才能产生table header。如果是将该table先放入面板,比如JScrollPane中再放入container中
//则无这样的问题,
>> JTable table = new JTable(); // 需要使用TableModel接口的实现类来给table赋值
>>常用方法:
>> 取表头: JTableHeader tableHeader=table.getTableHeader(); table.setTableHeader(JTableHeader header);
>>表格模型有关: DefaultTableModel model = (DefaultTableModel) table.getModel(); table.setModel(TableModel model);
>> 与存储数据有关: Object value=table.getValueAt(int row, int column); table.setValueAt(Object aValue, int row, int column);
>>与选中有关: table.selectAll();, table.clearSelection(), table.isRowSelected(); table.setRowSelectionInterval(int from, int to);
table.addRowSelectionInterval(int from, int to);
int rowcount = table.getSelectedRowCount(); //0 if no row is selected;
int row = table.getSelectedRow(); //return first selected row number, -1 if no row is selected
table.setRowSelectionAllowed(true); table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
>> 与行列有关: table.moveColumn(int column, int targetColumn); table.getColumnName();table.getColumnCount();table.getRowCount();
table.setRowHeight(50); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); table.setRowSorter(TableRowSorter sorter);
>>>TableModel接口负责数据存储,JTable类不负责存储数据.。AbtractTableModel实现了接口的大部分方法,可以通过继承该类来实现自己的表格。默认实现类是DefaultTableModel。可以用JTable 的getModel()方法获取某个table的表格模型
>> DefaultTableModel的init 方法:
>> DefaultTableModel model=new DefaultTableModel(); //0 row,o column
>> DefaultTableModel model=new DefaultTableModel(int rowCount,int colCount); //指定行和列数的表格
>> DefaultTableModel model=new DefaultTableModel(Object[][] data,Object[] colName); //指定数据和列名的表格
>> DefaultTableModel model=new DefaultTableModel(Vector data, Vector colName); //指定数据和列名的表格
>> 常用方法:
>>设表头: model.setColumnIdentifiers(new Object[] { "学号", "姓名" });
>>与行列相关: model.addRow(Obect[] rowData); model.addRow(Vector rowData); model.insertRow(int row,Obect[] rowData);
model.insertRow(int row, Vector rowData); model.removeRow(int row); model.setRowCount(0); //清空table中的值;
model.removeRow(row);
//注意添加删除后,其后的行索引值相应的加减1.从表格中间添加删除行时要注意其后的行索引值变化
>> 与取值设值相关: Object ob = model.getValueAt(row, column); model1.setValueAt(Object aValue, int row, int column)
>>>表头JTableHeader, 可以通过table.getTableHeader()获得默认表头
>> 常用方法:
table.getTableHeader().setReorderingAllowed(false); // set table header column can not be draged to move position
>>> 表格单元格的样式类TableCellRenderer,可通过重写JTable的getDefaultRenderer来自定义一些表格单元格样式如
@Override
public TableCellRenderer getDefaultRenderer(Class<?> columnClass) {
DefaultTableCellRenderer cr = (DefaultTableCellRenderer) super
.getDefaultRenderer(columnClass);
cr.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);
return cr;
}
@Override
public JTableHeader getTableHeader() {
tableHeader.setReorderingAllowed(false);
DefaultTableCellRenderer hr = (DefaultTableCellRenderer) tableHeader.getDefaultRenderer();
hr .setHorizontalAlignment(DefaultTableCellRenderer.CENTER);
return tableHeader;
}
>>>通过重写JTable的isCellEditable来设置单元格不可编辑,如
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
>>>通过重写 JComponent.getToolTipText 方法可以设置单元格上的tooltip
public String getToolTipText(MouseEvent event) {
int indexCol = super.columnAtPoint(event.getPoint());
int indexRow = super.rowAtPoint(event.getPoint());
String tooltip = "<html><font face=微软雅黑 side=16 color=red >"
+ super.getValueAt(indexRow, indexCol) + " " + indexRow + "--"
+ indexCol + "</font></html>";
if ((indexCol >= 0) && (indexCol < super.getColumnCount())
&& (indexRow >= 0) && (indexRow < super.getRowCount()))
return tooltip;
else
return super.getToolTipText(event);
}
>>>TableRowSorter类可以用来设置点击表头提供排序功能
>> 常用方法:
TableRowSorter<DefaultTableModel> sorter = new TableRowSorter<DefaultTableModel>();
sorter.setModel(model);
table.setRowSorter(sorter);
或者可以直接初始化: table.setRowSorter(new TableRowSorter<DefaultTableModel>(model));
7. 建立列表以及常用函数
>>>与建立JTable比较类似。列表类是JList, 列表模型接口是ListModel,其抽象实现类是AbtractListModel,默认实现类DefaultListModel;列表中元素接口是ListCellRenderer,默 认实现类是DefaultListCellRenderer
>>JList init方法:
JList list=new JList(); JList(Object[] listData); JList(Vector listData); JList(ListModel listModel);
>> 也可以用list.setListData(Object[] listData);或者list.setListData(Vector listData);来设置列表值
>>和JTable一样也可以通过重写 JComponent.getToolTipText 方法可以设置单元格上的tooltip
>>常用方法与JTable的都很类似。如
JList<String> list=new JList<String>();
DefaultListModel<String> listmodel=new DefaultListModel<String>();
list.setModel(listmodel); //or 初始化时赋值 JList<String> list=new JList<String>(listmodel);
listmodel.addElement(str); //插入值
listmodel.remove(index); //移除值 or listmodel.removeElement(str);
ArrayList<String> selectedusers=(ArrayList<String>) list.getSelectedValuesList(); //获取列表中的选中对象
list.clearSelection(); //清空选中状态;
JScrollPane scroll=new JScrollPane(list);
->JList<String> list=new JList<String>();
DefaultComboBoxModel<String> combomodel=new DefaultComboBoxModel<String>();
list.setModel(combomodel);
JScrollPane scroll=new JScrollPane(list);
combomodel.addElement("abc");
DefaultComboBoxModel<String> model=(DefaultComboBoxModel<String>) list.getModel();
->自定义的可以排序 的列表
class SortListModel<E> extends AbstractListModel<E> {
private static final long serialVersionUID = 1L;
// 用TreeSet实现排序
private TreeSet<E> model = new TreeSet<E> ();
@Override
public int getSize() { return model.size(); }
@Override
public E getElementAt(int index) { return (E) model.toArray()[index]; }
public void add(E element) {
if (model.add(element)) {
super.fireContentsChanged(this, 0, getSize());
}
}
->预览自定义字体的列表模型
DefaultListModel<Font> model = new DefaultListModel<Font>();list.setModel(model);
model.addElement(new Font(fontNames[i], Font.PLAIN, 24));
ListCellRenderer<Object> renderer = new FontListCellRenderer<Object> ();
list.setCellRenderer( renderer);
class FontListCellRenderer<E> implements ListCellRenderer<E> {
@Override
public Component getListCellRendererComponent(JList<? extends E> list, E value,
int index, boolean isSelected, boolean cellHasFocus) {
DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();
JLabel renderer = (JLabel) defaultRenderer
.getListCellRendererComponent(list, value, index, isSelected,
cellHasFocus);
Font font = (Font) value;
renderer.setFont(font);
renderer.setText(font.getFontName());
return renderer;
}
}
20. 设置下拉菜单 JComboBox的两种方法
>>> JComboBox<String> combo = new JComboBox<String>();
DefaultComboBoxModel <String> model = new DefaultComboBoxModel<String>();
model.addElement("男");
model.addElement("女");
combo.setModel(model);
>>> String[] elements=new String[]{"e1","e2"};
JComboBox<String> combo = new JComboBox<String>(str);
>>> 通过model选择选中值: Object ob= model.getSelectedItem(); // ob.toString()方法可以转化为String
>>> 通过model设置选中值: model.setSelectItem(ob);
>>> 通过combobox选择选中值: Object ob= combo.getSelectedItem(); // ob.toString()方法可以转化为String
>>> 通过combobox设置选中值: combo.setSelectItem(ob); 或 combo.setSelectedIndex(int index); //index start with 0;