[英]JTable - cell content disappears on double click
我的JTable有問題。 當我輸入具有固定長度文本字段的單元格作為編輯器時,達到該長度時,我將自動跳至下一行。 這樣,我可以繼續寫作。 之后,當我想更改第一行中的某些文本並雙擊該單元格時,該文本消失。
奇怪的是,當我按“ Enter”進入下一行並雙擊第一行時,文本不會消失。
private void initialize() {
vCommentaarHeaders.add(resourceBundle.getString("col_Aan"));
vCommentaarHeaders.add(resourceBundle.getString("Commentaar"));
tmCommentaar.addTableModelListener(new CommentaarTableModelListener());
jtable = new JTable(tmCommentaar);
//...
jtable.addMouseListener(new CommentaarTableMouseListener());
jtable.addKeyListener(new CommentaarTableKeyListener());
//fill combobox
//Get saved data
//Add empty line
jtable.getColumnModel().getColumn(0).setCellEditor(
new DefaultCellEditor(cbxAan));
jtable.getColumnModel().getColumn(1).setCellEditor(
new DefaultCellEditor(ftfCommentaar));
//Add table to content pane
}
// MouseListener ....
private class CommentaarTableKeyListener implements KeyListener {
public void keyTyped(KeyEvent e) {
if (selectedColumn != jtable.getSelectedColumn()
|| selectedRow != jtable.getSelectedRow()) {
sCommentaar = (String) ((Vector) vCommentaarData.get(jtable
.getSelectedRow())).get(1);
}
if (e.getKeyChar() != '\t' || e.getKeyChar() != '\n') {
if (e.getKeyChar() == '') {
sCommentaar = sCommentaar.substring(0,
sCommentaar.length() - 1);
selectedColumn = jtable.getSelectedColumn();
selectedRow = jtable.getSelectedRow();
} else {
if (sCommentaar.length() <= 65){
sCommentaar = sCommentaar + e.getKeyChar();
selectedColumn = jtable.getSelectedColumn();
selectedRow = jtable.getSelectedRow();
}
else{
//addEmptyLine();
tmCommentaar.setValueAt(sCommentaar, selectedRow, selectedColumn);
selectedColumn = jtable.getSelectedColumn();
selectedRow = jtable.getSelectedRow() + 1;
String sBestemmeling = (String) ((Vector) vCommentaarData.get(selectedRow-1)).get(0);
Vector vHulp = new Vector();
vHulp.add(sBestemmeling);
vHulp.add("" + e.getKeyChar());
sCommentaar = "" + e.getKeyChar();
if( vCommentaarData.size() >= selectedRow )
vCommentaarData.setSize(selectedRow + 1);
vCommentaarData.setElementAt(vHulp, selectedRow);
tmCommentaar.fireTableDataChanged();
jtable.setCellSelectionEnabled(true);
jtable.getCellEditor(selectedRow - 1, selectedColumn).cancelCellEditing();
jtable.changeSelection(selectedRow, selectedColumn, false, false);
jtable.grabFocus();
}
}
}
}
public void keyPressed(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER){
if(selectedRow > 0){
String sBestemmeling = (String) ((Vector) vCommentaarData.get(selectedRow-1)).get(0);
Vector vHulp = new Vector();
vHulp.add(sBestemmeling);
vHulp.add("");
if( vCommentaarData.size() >= selectedRow )
vCommentaarData.setSize(selectedRow + 1);
vCommentaarData.setElementAt(vHulp, selectedRow);
tmCommentaar.fireTableDataChanged();
jtable.setCellSelectionEnabled(true);
jtable.getCellEditor(selectedRow - 1, selectedColumn).cancelCellEditing();
jtable.changeSelection(selectedRow, selectedColumn, false, false);
jtable.grabFocus();
}
}
}
}
在CommentaarTableKeyListener> KeyReleased中,您可以看到按“ Enter”鍵時會發生什么,在CommentaarTableKeyListener> KeyTyped中,您可以看到達到最大長度時會發生什么。 在CommentaarTableMouseListener中,您可以看到沒有為雙擊定義任何內容。
誰能幫我? 如果您還有其他問題,請詢問。
格蕾茲·西爾維(Greetz Sylvie)
我自己找到的。 這與將長度為66個字符的字符串放入65個字符的固定長度文本字段有關。 這樣問題就解決了!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.