Swing中使用JTable右键菜单及可编辑数据状态
在表格上显示右键菜单是使用率非常高的。这些代码非常实用,可以给我们很多启示。
在表格上显示右键菜单是使用率非常高的。这些代码非常实用,可以给我们很多启示。
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.event.MouseAdapter;
- import java.awt.event.MouseEvent;
- import javax.swing.DefaultCellEditor;
- import javax.swing.JFrame;
- import javax.swing.JMenuItem;
- import javax.swing.JPopupMenu;
- import javax.swing.JScrollPane;
- import javax.swing.JSeparator;
- import javax.swing.JTable;
- import javax.swing.JTextField;
- import javax.swing.SwingUtilities;
- public class TBTest {
- public static void main(String[] args) {
- JFrame frame = new JFrame();
- frame.setSize(400,300);
- String[][] data = new String[][]{{"1", "2", "3"}, {"4", "5", "6"}, {"7", "8", "9"}, {"10", "11", "12"}};
- String[] names = new String[]{"数值1", "数值2", "数值3"};
- final JTable table = new JTable(data, names);
-
- DefaultCellEditor cellEdit = new DefaultCellEditor(new JTextField());
- cellEdit.setClickCountToStart(2);//双击后使选择的格子可编辑
- table.addMouseListener(new MouseAdapter() {
- public void mousePressed(MouseEvent me) {
- if (SwingUtilities.isRightMouseButton(me)) {
- final int row = table.rowAtPoint(me.getPoint());
- System.out.println("row:"+row);
- if(row!=-1){
- final int column = table.columnAtPoint(me.getPoint());
-
- final JPopupMenu popup = new JPopupMenu();
- JMenuItem select = new JMenuItem("选择");
-
- select.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- System.out.println("选择");
- table.setRowSelectionInterval(row, row); //高亮选择指定的行
- }
- });
- popup.add(select);
- popup.add(new JSeparator());
- JMenuItem edit = new JMenuItem("编辑");
- popup.add(edit);
- edit.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- System.out.println("编辑");
- table.clearSelection(); //清除高亮选择状态
- table.editCellAt(row, column); //设置某列为可编辑
- }
- });
- JMenuItem calcel = new JMenuItem("取消");
- calcel.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- System.out.println("取消");
- popup.setVisible(false);
- }
- });
- popup.add(new JSeparator());
- popup.add(calcel);
- popup.show(me.getComponent(), me.getX(), me.getY());
- }
- }
- }
- });
- JScrollPane scrollPane = new JScrollPane(table);
- frame.setTitle("JTable右键测试");
- frame.add(scrollPane);
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- frame.setVisible(true);
- }
- }