Swing中使用JTable右键菜单及可编辑数据状态

本文提供了一个使用 Java Swing 实现 JTable 的示例程序,展示了如何在 JTable 中添加右键菜单并实现单元格的可编辑状态。通过监听鼠标事件,当用户右键点击表格时会弹出包含“选择”、“编辑”和“取消”选项的菜单。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Swing中使用JTable右键菜单及可编辑数据状态
在表格上显示右键菜单是使用率非常高的。这些代码非常实用,可以给我们很多启示。

  1. import java.awt.event.ActionEvent;
  2. import java.awt.event.ActionListener;
  3. import java.awt.event.MouseAdapter;
  4. import java.awt.event.MouseEvent;
  5. import javax.swing.DefaultCellEditor;
  6. import javax.swing.JFrame;
  7. import javax.swing.JMenuItem;
  8. import javax.swing.JPopupMenu;
  9. import javax.swing.JScrollPane;
  10. import javax.swing.JSeparator;
  11. import javax.swing.JTable;
  12. import javax.swing.JTextField;
  13. import javax.swing.SwingUtilities;

  14. public class TBTest {
  15.     public static void main(String[] args) {
  16.         JFrame frame = new JFrame();
  17.         frame.setSize(400,300);
  18.         String[][] data = new String[][]{{"1", "2", "3"}, {"4", "5", "6"}, {"7", "8", "9"}, {"10", "11", "12"}};
  19.         String[] names = new String[]{"数值1", "数值2", "数值3"};
  20.         final JTable table = new JTable(data, names);
  21.         
  22.         DefaultCellEditor cellEdit = new DefaultCellEditor(new JTextField());
  23.         cellEdit.setClickCountToStart(2);//双击后使选择的格子可编辑
  24.         table.addMouseListener(new MouseAdapter() {
  25.             public void mousePressed(MouseEvent me) {
  26.                 if (SwingUtilities.isRightMouseButton(me)) {
  27.                   final int row = table.rowAtPoint(me.getPoint());
  28.                     System.out.println("row:"+row);
  29.                     if(row!=-1){
  30.                     final int column = table.columnAtPoint(me.getPoint());
  31.                     
  32.                     final JPopupMenu popup = new JPopupMenu();
  33.                    JMenuItem select = new JMenuItem("选择");
  34.                   
  35.                    select.addActionListener(new ActionListener() {
  36.                     public void actionPerformed(ActionEvent e) {
  37.                      System.out.println("选择");
  38.                      table.setRowSelectionInterval(row, row); //高亮选择指定的行
  39.                     }
  40.                    });
  41.                    popup.add(select);
  42.                    popup.add(new JSeparator());
  43.                    JMenuItem edit = new JMenuItem("编辑");
  44.                    popup.add(edit);
  45.                    edit.addActionListener(new ActionListener() {
  46.                     public void actionPerformed(ActionEvent e) {
  47.                      System.out.println("编辑");
  48.                      table.clearSelection(); //清除高亮选择状态
  49.                      table.editCellAt(row, column); //设置某列为可编辑
  50.                     }
  51.                    });
  52.                    JMenuItem calcel = new JMenuItem("取消");
  53.                    calcel.addActionListener(new ActionListener() {
  54.                     public void actionPerformed(ActionEvent e) {
  55.                      System.out.println("取消");
  56.                      popup.setVisible(false);
  57.                     }
  58.                    });
  59.                    popup.add(new JSeparator());
  60.                    popup.add(calcel);
  61.                    popup.show(me.getComponent(), me.getX(), me.getY());
  62.                     }
  63.                 }
  64.             }
  65.         });
  66.         JScrollPane scrollPane = new JScrollPane(table);
  67.         frame.setTitle("JTable右键测试");
  68.         frame.add(scrollPane);
  69.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  70.         frame.setVisible(true);
  71.     }
  72. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值