2013-10-03 18 views
0

我遇到JTable的问题。当我使用固定长度的文本框作为编辑器输入单元格时,当达到长度时,我会自动跳到下一行。那样,我可以继续写作。之后,当我想要更改第一行中的某些文本并双击单元格时,文本就会消失。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中,您可以看到没有为双击定义的内容。

任何人都可以帮助我吗?如果您有更多问题,请询问。

格尔茨 西尔维

+4

请发布SSCCE,而不是 – StanislavL

+0

我减少了它,但我很难知道你需要多少信息。我希望这已经足够了。 –

+1

_你需要多少信息,证明问题的最低限度,通常约为50行代码:-)详细了解SSCCE – kleopatra

回答

-1

我发现它自己。这与在65个字符的固定长度文本字段中放置长度为66个字符的字符串有关。所以问题解决了!

+0

“只是因为它太长了。 – kleopatra

相关问题