Swing編程(八)JTable表格 一

表格是GUI編程中使用較多,但也是最麻煩的一個控件之一。表格是用來顯示二維數據,提供編輯,選擇等功能。如果只是顯示數據,這還是非常easy的,只要在JTable中傳入二維數組或集合就可以了,eg[c-sharp]view plaincopy

  1. publicclass SimpleTable  

  2. {  

  3.    JFrame jf = new JFrame("簡單表格");  

  4.    JTable table;  

  5. //定義二維數組作爲表格數據

  6.    Object[][] tableData =  

  7.    {  

  8. new Object[]{"李清照" , 29 , "女"},  

  9. new Object[]{"蘇格拉底", 56 , "男"},  

  10. new Object[]{"李白", 35 , "男"},  

  11. new Object[]{"弄玉", 18 , "女"},  

  12. new Object[]{"虎頭" , 2 , "男"}  

  13.    };  

  14. //定義一維數據作爲列標題

  15.    Object[] columnTitle = {"姓名" , "年齡" , "性別"};  

  16. publicvoid init()  

  17.    {  

  18. //以二維數組和一維數組來創建一個JTable對象

  19.        table = new JTable(tableData , columnTitle);  

  20. //將JTable對象放在JScrollPane中,並將該JScrollPane放在窗口中顯示出來

  21.        jf.add(new JScrollPane(table));  

  22.        jf.pack();  

  23.        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  

  24.        jf.setVisible(true);  

  25.    }  

  26. publicstaticvoid main(String[] args)  

  27.    {  

  28. new SimpleTable().init();  

  29.    }  

  30. }  

下面舉個JTable表格調整和選擇方式的例子,eg[java]view plaincopy

  1. publicclass AdjustingWidth  

  2. {  

  3.    JFrame jf = new JFrame("調整表格列寬");  

  4.    JMenuBar menuBar = new JMenuBar();  

  5.    JMenu adjustModeMenu = new JMenu("調整方式");  

  6.    JMenu selectUnitMenu = new JMenu("選擇單元");  

  7.    JMenu selectModeMenu = new JMenu("選擇方式");  

  8. //定義5個單選框按鈕,用以控制表格的寬度調整方式

  9.    JRadioButtonMenuItem[] adjustModesItem = new JRadioButtonMenuItem[5];  

  10. //定義3個單選框按鈕,用以控制表格的選擇方式

  11.    JRadioButtonMenuItem[] selectModesItem = new JRadioButtonMenuItem[3];  

  12.    JCheckBoxMenuItem rowsItem = new JCheckBoxMenuItem("選擇行");  

  13.    JCheckBoxMenuItem columnsItem = new JCheckBoxMenuItem("選擇列");  

  14.    JCheckBoxMenuItem cellsItem = new JCheckBoxMenuItem("選擇單元格");  

  15.    ButtonGroup adjustBg = new ButtonGroup();  

  16.    ButtonGroup selectBg = new ButtonGroup();  

  17. //定義一個int類型的數組,用於保存表格所有的寬度調整方式

  18. int[] adjustModes = newint[]{  

  19.        JTable.AUTO_RESIZE_OFF,  

  20.        JTable.AUTO_RESIZE_NEXT_COLUMN,  

  21.        JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS,  

  22.        JTable.AUTO_RESIZE_LAST_COLUMN,  

  23.        JTable.AUTO_RESIZE_ALL_COLUMNS  

  24.    };  

  25. int[] selectModes = newint[]{  

  26.        ListSelectionModel.MULTIPLE_INTERVAL_SELECTION ,  

  27.        ListSelectionModel.SINGLE_INTERVAL_SELECTION ,  

  28.        ListSelectionModel.SINGLE_SELECTION  

  29.    };  

  30.    JTable table;  

  31. //定義二維數組作爲表格數據

  32.    Object[][] tableData =  

  33.    {  

  34. new Object[]{"李清照" , 29 , "女"},  

  35. new Object[]{"蘇格拉底", 56 , "男"},  

  36. new Object[]{"李白", 35 , "男"},  

  37. new Object[]{"弄玉", 18 , "女"},  

  38. new Object[]{"虎頭" , 2 , "男"}  

  39.    };  

  40. //定義一維數據作爲列標題

  41.    Object[] columnTitle = {"姓名" , "年齡" , "性別"};  

  42. publicvoid init()  

  43.    {  

  44. //以二維數組和一維數組來創建一個JTable對象

  45.        table = new JTable(tableData , columnTitle);  

  46. //-----------爲窗口安裝設置表格調整方式的菜單-----------

  47.        adjustModesItem[0] = new JRadioButtonMenuItem("只調整表格");  

  48.        adjustModesItem[1] = new JRadioButtonMenuItem("只調整下一列");  

  49.        adjustModesItem[2] = new JRadioButtonMenuItem("平均調整餘下列");  

  50.        adjustModesItem[3] = new JRadioButtonMenuItem("只調整最後一列");  

  51.        adjustModesItem[4] = new JRadioButtonMenuItem("平均調整所有列");  

  52.        menuBar.add(adjustModeMenu);  

  53. for (int i = 0; i < adjustModesItem.length ; i++)  

  54.        {  

  55. //默認選中第三個菜單項,即對應表格默認的寬度調整方式

  56. if (i == 2)  

  57.            {  

  58.                adjustModesItem[i].setSelected(true);  

  59.            }  

  60.            adjustBg.add(adjustModesItem[i]);  

  61.            adjustModeMenu.add(adjustModesItem[i]);  

  62. finalint index = i;  

  63. //爲設置調整方式的菜單項添加監聽器

  64.            adjustModesItem[i].addActionListener(new ActionListener()  

  65.            {  

  66. publicvoid actionPerformed(ActionEvent evt)  

  67.                {  

  68. //如果當前菜單項處於選中狀態,表格使用對應的調整方式

  69. if (adjustModesItem[index].isSelected())  

  70.                    {  

  71.                        table.setAutoResizeMode(adjustModes[index]);  

  72.                    }  

  73.                }  

  74.            });  

  75.        }  

  76. //-----------爲窗口安裝設置表格選擇方式的菜單-----------

  77.        selectModesItem[0] = new JRadioButtonMenuItem("無限制");  

  78.        selectModesItem[1] = new JRadioButtonMenuItem("單獨的連續區");  

  79.        selectModesItem[2] = new JRadioButtonMenuItem("單選");  

  80.        menuBar.add(selectModeMenu);  

  81. for (int i = 0; i < selectModesItem.length ; i++)  

  82.        {  

  83. //默認選中第一個菜單項,即對應表格默認的選擇方式

  84. if (i == 0)  

  85.            {  

  86.                selectModesItem[i].setSelected(true);  

  87.            }  

  88.            selectBg.add(selectModesItem[i]);  

  89.            selectModeMenu.add(selectModesItem[i]);  

  90. finalint index = i;  

  91. //爲設置選擇方式的菜單項添加監聽器

  92.            selectModesItem[i].addActionListener(new ActionListener()  

  93.            {  

  94. publicvoid actionPerformed(ActionEvent evt)  

  95.                {  

  96. //如果當前菜單項處於選中狀態,表格使用對應的選擇方式

  97. if (selectModesItem[index].isSelected())  

  98.                    {  

  99.                        table.getSelectionModel().setSelectionMode(selectModes[index]);  

  100.                    }  

  101.                }  

  102.            });  

  103.        }  

  104.        menuBar.add(selectUnitMenu);  

  105. //-----------爲窗口安裝設置表格選擇單元的菜單-----------

  106.        rowsItem.setSelected(table.getRowSelectionAllowed());  

  107.        columnsItem.setSelected(table.getColumnSelectionAllowed());  

  108.        cellsItem.setSelected(table.getCellSelectionEnabled());  

  109.        rowsItem.addActionListener(new ActionListener()  

  110.        {  

  111. publicvoid actionPerformed(ActionEvent event)  

  112.            {  

  113.                table.clearSelection();  

  114. //如果該菜單項處於選中狀態,設置表格的選擇單元是行

  115.                table.setRowSelectionAllowed(rowsItem.isSelected());  

  116. //如果選擇行、選擇列同時被選中,其實質是選擇單元格

  117.                cellsItem.setSelected(table.getCellSelectionEnabled());  

  118.            }  

  119.        });  

  120.        selectUnitMenu.add(rowsItem);  

  121.        columnsItem.addActionListener(new ActionListener()  

  122.        {  

  123. publicvoid actionPerformed(ActionEvent event)  

  124.            {  

  125.                table.clearSelection();  

  126. //如果該菜單項處於選中狀態,設置表格的選擇單元是列

  127.                table.setColumnSelectionAllowed(columnsItem.isSelected());  

  128. //如果選擇行、選擇列同時被選中,其實質是選擇單元格

  129.                cellsItem.setSelected(table.getCellSelectionEnabled());  

  130.            }  

  131.        });  

  132.        selectUnitMenu.add(columnsItem);  

  133.        cellsItem.addActionListener(new ActionListener()  

  134.        {  

  135. publicvoid actionPerformed(ActionEvent event)  

  136.            {  

  137.                table.clearSelection();  

  138. //如果該菜單項處於選中狀態,設置表格的選擇單元是單元格

  139.                table.setCellSelectionEnabled(cellsItem.isSelected());  

  140. //該選項的改變會同時影響選擇行、選擇列兩個菜單

  141.                rowsItem.setSelected(table.getRowSelectionAllowed());  

  142.                columnsItem.setSelected(table.getColumnSelectionAllowed());  

  143.            }  

  144.        });  

  145.        selectUnitMenu.add(cellsItem);  

  146.        jf.setJMenuBar(menuBar);  

  147. //分別獲取表格的三個表格列,並設置三列的最小寬度,最佳寬度和最大寬度

  148.        TableColumn nameColumn = table.getColumn(columnTitle[0]);  

  149.        nameColumn.setMinWidth(40);  

  150.        TableColumn ageColumn = table.getColumn(columnTitle[1]);  

  151.        ageColumn.setPreferredWidth(50);  

  152.        TableColumn genderColumn = table.getColumn(columnTitle[2]);  

  153.        genderColumn.setMaxWidth(50);  

  154. //將JTable對象放在JScrollPane中,並將該JScrollPane放在窗口中顯示出來

  155.        jf.add(new JScrollPane(table));  

  156.        System.out.println(table.getModel());  

  157.        jf.pack();  

  158.        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  

  159.        jf.setVisible(true);  

  160.    }  

  161. publicstaticvoid main(String[] args)  

  162.    {  

  163. new AdjustingWidth().init();  

  164.    }  

  165. }  



我這裏只是實現了每列不同的控件,大家還可以自定義一個表格每行每列都是不同的控件,那就要得到單元格再setCellRender。

原創地址:http://blog.csdn.net/terryzero/article/details/3838423

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章