gpt4 book ai didi

java - Jtable 中单元格的行为(右键单击单元格内部)

转载 作者:行者123 更新时间:2023-11-30 09:44:40 25 4
gpt4 key购买 nike

我有一个 JTable,我想通过在单元格内右键单击来打开 PopupMenu。我通过制作自己的 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());

最佳答案

应该不需要创建自定义编辑器。您应该能够执行以下操作:

JTable table = new JTable(...);
DefaultCellEditor dce = table.getDefaultEditor(Object.class);
Component editor = dce.getComponent();
editor.addMouseListener(...);

此外,请阅读 Sorting and Filtering 上的 Swing 教程部分。有关如何使用过滤的工作示例。您不应该使用 KeyListener。

如果您需要更多帮助,请发布您的 SSCCE这说明了问题。

关于java - Jtable 中单元格的行为(右键单击单元格内部),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7772119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com