2016-06-11 6 views
4

Ich habe eine einfache JTable, die die Details (im Spaltenformat) einer Zeile von einem anderen JTable zeigt. Das funktioniert gut. Manchmal ist der Text in einer Zeile jedoch sehr lang, so dass der Benutzer am Ende über den Ordner blättern muss, der nicht sauber ist.Wie Zeilenumbruch in einer JTable-Zeile

Wie kann ich den Text in einer Zeile umbrechen und die Zeilenhöhe ändern, um den gesamten Text anzuzeigen. Hier

ist der Code:

table.getSelectionModel().addListSelectionListener(new ListSelectionListener() { 
      @Override 
      public void valueChanged(ListSelectionEvent e) { 
       if (!e.getValueIsAdjusting()) { 
        int selectedRow = table.getSelectedRow(); 
        DefaultTableModel newModel = new DefaultTableModel(); 
        String rowName = "Row: " + selectedRow; 
        newModel.setColumnIdentifiers(new Object[]{rowName}); 
        for (int i = 0; i < table.getModel().getColumnCount(); i++) { 
         newModel.addRow(new Object[]{table.getModel().getValueAt(selectedRow, i)}); 
        } 
        JTable newTable = new JTable(newModel) { 
         /** 
         * 
         */ 
         private static final long serialVersionUID = 1L; 

         @Override 
         public Dimension getPreferredScrollableViewportSize() { 
          return new Dimension(140, 240); 
         } 
        }; 
        newTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
        newTable.setRowHeight(14, 30); 
        TableColumnAdjuster tcanewTable = new TableColumnAdjuster(newTable);   
        tcanewTable.setColumnHeaderIncluded(true); 
        tcanewTable.setColumnDataIncluded(true); 
        tcanewTable.setOnlyAdjustLarger(true); 
        tcanewTable.setDynamicAdjustment(true); 
        tcanewTable.adjustColumns(); 

        // Apply any custom renderers and editors 
        JOptionPane.showMessageDialog(frame, new JScrollPane(newTable), 
         rowName, JOptionPane.PLAIN_MESSAGE); 
       } 
      } 
     }); 
+0

Post 'SSCCE', der das Problem demonstriert. Sie wurden in der Vergangenheit gebeten, eine 'SSCCE' mit jeder Frage zu veröffentlichen: http://stackoverflow.com/a/37606317/131872 – camickr

Antwort

6

Sie können dies erreichen, indem eine JTextArea als eine TableCellRenderer für diese Spalte in der Tabelle. Zum Beispiel:

static class WordWrapCellRenderer extends JTextArea implements TableCellRenderer { 
    WordWrapCellRenderer() { 
     setLineWrap(true); 
     setWrapStyleWord(true); 
    } 

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
     setText(value.toString()); 
     setSize(table.getColumnModel().getColumn(column).getWidth(), getPreferredSize().height); 
     if (table.getRowHeight(row) != getPreferredSize().height) { 
      table.setRowHeight(row, getPreferredSize().height); 
     } 
     return this; 
    } 
} 

Um WordWrapCellRenderer in Ihrer Tabelle zu verwenden:

table.getColumnModel().getColumn(columnIndex).setCellRenderer(new WordWrapCellRenderer());