Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jtable中单元格的行为(在单元格内部单击鼠标右键)_Java_Swing_Jtable_Cell - Fatal编程技术网

Java Jtable中单元格的行为(在单元格内部单击鼠标右键)

Java Jtable中单元格的行为(在单元格内部单击鼠标右键),java,swing,jtable,cell,Java,Swing,Jtable,Cell,我有一个JTable,我想在单元格内单击鼠标右键打开一个弹出菜单。我通过制作自己的AbstractCellEditor尝试了这一点,但它不起作用(当我启动程序时,当第一个方法初始化CellEditor(这是这个方法做的最后一件事)时,CellEditor正在启动。但是在下一个方法开始时,CellEditor已经失效了)。谁能帮帮我吗?几周来我一直在努力找出错误 这是CellEditor的代码: public class CellEditor extends AbstractCellEditor

我有一个
JTable
,我想在单元格内单击鼠标右键打开一个弹出菜单。我通过制作自己的
AbstractCellEditor
尝试了这一点,但它不起作用(当我启动程序时,当第一个方法初始化
CellEditor
(这是这个方法做的最后一件事)时,
CellEditor
正在启动。但是在下一个方法开始时,
CellEditor
已经失效了)。谁能帮帮我吗?几周来我一直在努力找出错误

这是CellEditor的代码:

public class CellEditor extends AbstractCellEditor implements TableCellEditor {

    JTextField component;
    JPopupMenu popmen;

    CellEditor(){
        component = new JTextField();
        popmen = new JPopupMenu();

        createPopmen(component);
        component.addMouseListener(new MouseAdapter(){   
            public void mouseReleased(MouseEvent e) {
                if ( e.isPopupTrigger() )
                      popmen.show( e.getComponent(), e.getX(), e.getY() );
               }
        });  
    }

    public Component getTableCellEditorComponent1(JTable table, Object value,
            boolean isSelected, int rowIndex, int vColIndex) {      
        if (isSelected) {      
        }

        component.setText((String)value);
        return component;
    }

    public Object getCellEditorValue() {
        return component.getText();
    }

    @Override
    public Component getTableCellEditorComponent(JTable arg0, Object  arg1, boolean arg2,int arg3, int arg4) {
        return null;
    }


public void createPopmen(final JTextField text){

    // creating Popmen

}

}
这是代码的一部分,其中我的表发生了一些问题:

Vector<Vector> nu = new Vector<Vector>();
Vector<String> columnNames = new Vector<String>();
TableModel model;


model = new DefaultTableModel(nu, columnNames){
          public Class getColumnClass() {
              Class returnValue;
              if ((3 >= 0) && (3 < getColumnCount())) {
                System.out.println(getValueAt(0, 3));
                returnValue = getValueAt(0, 3).getClass();
              } else {
                returnValue = Object.class;
              }
              return returnValue;
            }                   
                 public boolean isCellEditable(int row, int col) {
                     if(col == 0){
                         return false;
                     }
                     else{
                         return true;
                     }

                 }
          };

    table = new JTable(model);      
    final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
    table.setRowSorter(sorter);
    table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
    table.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
          public void valueChanged(ListSelectionEvent e){
                int a = table.getSelectedRow();
                if (!changes.contains(a) && a!=-1 && table.getSelectedColumn() != 0){
                    changes.add(a);
                    saved = false;
                }   
          }
    });



    // SearchingBar
    textfield.addKeyListener( new KeyListener(){

        @Override
        public void keyPressed(KeyEvent arg0) {

        }
        @Override
        public void keyReleased(KeyEvent arg0) {

            String searchedText =textfield.getText();       
            if (searchedText.length() == 0) {
                sorter.setRowFilter(null);
              } else {
                sorter.setRowFilter(RowFilter.regexFilter(searchedText));
              }
        }
        @Override
        public void keyTyped(KeyEvent arg0) {       
        }       
    });

    ((DefaultTableModel) model).removeRow(0);
    table.setModel(model);
    table.setCellEditor(new CellEditor());
Vector nu=new Vector();
向量列名称=新向量();
表格模型;
模型=新的DefaultTableModel(nu,columnNames){
公共类getColumnClass(){
阶级价值;
如果((3>=0)和&(3
应该不需要创建自定义编辑器。您应该能够执行以下操作:

JTable table = new JTable(...);
DefaultCellEditor dce = table.getDefaultEditor(Object.class);
Component editor = dce.getComponent();
editor.addMouseListener(...);
另外,请阅读上的Swing教程中的部分,以了解如何使用过滤的工作示例。您不应该使用KeyListener


如果您需要更多帮助,请发布您的帖子,说明问题所在。

您是上帝^^^非常感谢!