关闭

[note]表格,列表和下拉菜单

172人阅读 评论(0) 收藏 举报

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;





0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:5646次
    • 积分:84
    • 等级:
    • 排名:千里之外
    • 原创:0篇
    • 转载:17篇
    • 译文:0篇
    • 评论:0条
    文章分类