1 /**
2 * JTable高级应用
3 * @author Wfei
4 *
5 */
6 public class JTableKnow_C extends JFrame
7 {
8 JTable jTable;
9 MyJMenuItem jMenuItem;
10 MyJMenuItem jMenuItem2;
11 JPopupMenu jPopupMenu;
12 JMenu jMenu;
13 public JTableKnow_C()
14 {
15 this.setBounds(300, 100, 400, 300);
16 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
17
18 Object[][] tableData = new Object[3][4];
19 tableData[0] = new Object[]{"1-1","1-2","左",true};
20 tableData[1] = new Object[]{"2-1","2-2","右",false};
21 tableData[2] = new Object[]{"3-1","3-2","左",true};
22 Object[] tableColName = new Object[]{"第一列名","第二列名","第三列名","第四列名"};
23 //创建表格模型
24 DefaultTableModel defaultTableModel = new DefaultTableModel(tableData,tableColName);
25 //实例化表格
26 jTable = new JTable(defaultTableModel)
27 {
28 /**
29 * 判断某一列是否为boolean类型,如果是:以复选框显示
30 */
31 @Override
32 public Class<?> getColumnClass(int column)
33 {
34 // TODO Auto-generated method stub
35 return jTable.getValueAt(0, column).getClass();
36 }
37 /**
38 * 设置某一行、某一列、或某个单元格是否可编辑
39 */
40 @Override
41 public boolean isCellEditable(int row, int column)
42 {
43 // TODO Auto-generated method stub
44 if (row == 1 && column == 1)
45 {
46 return false;
47 }
48 else {
49 return true;
50 }
51 }
52 //表格的标题,必须配合滚动面板一起使用才能显示出来
53 };
54 //实例化滚动面板
55 JScrollPane jScrollPane = new JScrollPane(jTable);
56 this.add(jScrollPane);
57
58 jPopupMenu = new JPopupMenu();
59 jMenu = new JMenu("更改为:");
60 jMenuItem = new MyJMenuItem("左",1);
61 jMenuItem2 = new MyJMenuItem("右",1);
62 jPopupMenu.add(jMenu);
63 jMenu.add(jMenuItem);jMenu.add(jMenuItem2);
64
65 jTable.setComponentPopupMenu(jPopupMenu);
66 jPopupMenu.addPopupMenuListener(new PopupMenuListener()
67 {
68 /**
69 * 设置个性化显示菜单的监听事件
70 */
71 @Override
72 public void popupMenuWillBecomeVisible(PopupMenuEvent e)
73 {
74 int index = jTable.getSelectedRow();
75 if (index != -1)
76 {
77 String str = jTable.getValueAt(index, 2).toString();
78 if (str.equals("左"))
79 {
80 jMenuItem.setVisible(false);
81 jMenuItem2.setVisible(true);
82 }
83 else {
84 jMenuItem.setVisible(true);
85 jMenuItem2.setVisible(false);
86 }
87 }
88 }
89 @Override
90 public void popupMenuWillBecomeInvisible(PopupMenuEvent e)
91 {
92 }
93 @Override
94 public void popupMenuCanceled(PopupMenuEvent e)
95 {
96 }
97 });
98 //为菜单的每个jMenuItem加上监听器
99 // addListenerToJMenuItem(jMenu);
100 }
101 // public void addListenerToJMenuItem(Container container)
102 // {
103 // for (Component component : container.getComponents())
104 // {
105 // if (component == JMenuItem.class)
106 // {
107 // System.out.println("1111111");
108 // JMenuItem jMenuItem = (JMenuItem) component;
109 // jMenuItem.addActionListener(new MenuItemListener());
110 // }
111 // else {
112 // System.out.println("2222222");
113 // JMenu jMenu = (JMenu) component;
114 // addListenerToJMenuItem(jMenu);
115 // }
116 // }
117 // }
118 /**
119 * 菜单项监听器
120 * @author Administrator
121 *
122 */
123 private class MenuItemListener implements ActionListener
124 {
125
126 @Override
127 public void actionPerformed(ActionEvent e)
128 {
129 JMenuItem item = (JMenuItem)e.getSource();
130 // TODO Auto-generated method stub
131 //JOptionPane.showMessageDialog(null, item.getText());
132 //判断是否有选中项
133 if(jTable.getSelectedRow() != -1)
134 {
135 //判断按钮
136 if (item == jMenuItem)
137 {
138 JOptionPane.showMessageDialog(null, "已更改为:右");
139 }
140 else {
141 JOptionPane.showMessageDialog(null, "已更改为:左");
142 }
143 }
144 else
145 {
146 JOptionPane.showMessageDialog(null, "请选择修改的用户");
147 }
148 }
149
150 }
151 public static void main(String[] args)
152 {
153 JTableKnow_C jTableKnowC = new JTableKnow_C();
154 jTableKnowC.setVisible(true);
155 }
156 }