2012-03-31 3 views

Antwort

3

im Grunde kann man jede Art von JComponents auf die JTable Zelle setzen, hängt von wenn ist Inhalt editierbar, das ist im Gespräch mir folgt

  • JTable mit einem TableColumn ohne TableHeader

  • JPanel (GridBagLayout) mit JLabels oder JTextFields

  • JList

-2

Wenn eine Tabelle große Datenmengen enthält, wird die Verwendung der Bildlaufleiste in der JTable angewendet. Das JScrollPane bietet Ihnen eine scrollbare Funktion zum Scrollen der Bildlaufleiste und Sie erhalten den gesamten Inhalt. Einfaches Beispiel JTable mit:

import javax.swing.*; 
import javax.swing.table.*; 
import java.awt.*; 

public class ScrollableJTable{ 
public static void main(String[] args) { 
new ScrollableJTable(); 
} 
public ScrollableJTable(){ 
JFrame frame = new JFrame("Creating a Scrollable JTable!"); 
JPanel panel = new JPanel(); 
String data[][] = 
    {{"001","abc","xyz","wtwt","gwgw","tttr","rtrt"}, 
    {"002","rwtr","ttrt","rtttr","trt","rtrt","trtrd"}, 
    {"003","rtt","trt","trt","trrttr","trt","rtr"}, 
    {"004","trt","trtt","trtrt","rtrtt","trt","trrt"}, 
    {"001","rttr","trt","trt","trtr","trt","trttr"}, 
    ; 
    JTable table = new JTable(data,col); 
    JTableHeader header = table.getTableHeader(); 
    header.setBackground(Color.yellow); 
    JScrollPane pane = new JScrollPane(table); 
    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
    panel.add(pane); 
    frame.add(panel); 
    frame.setSize(500,150); 
    frame.setUndecorated(true); 
    frame.getRootPane().setWindowDecorationStyle(JRootPane.PLAIN_DIALOG); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 
    } 
} 

Jetzt können Sie diese Tabelle ändern nach Ihren Anforderungen

+0

at line 'neue JTable (data, col)', 'col' Variable kann nicht gefunden werden. Was ist es? –

+4

Dies entspricht nicht annähernd der Frage des ursprünglichen Posters. Er möchte mehrere Zeilen in einer Tabellenzelle. –

+0

@HovercraftFullOfEels Ich habe gerade eine Demo für diese Frage gezeigt, so dass er sie entsprechend ändern kann – harry

9

mehrzeilige JTable Zelle kann leicht eine angepasste TableCellRenderer machen verwenden. Verwenden Sie die folgenden Schritte, um das TableCellRenderer zu erstellen.

Schritt 1: TableCellRenderer

folgenden Code erstellen zeigt eine mehrzeilige TableCellRenderer für String[] Werte zu schaffen. Es ist möglich, die String[] in eine Vector oder einem anderen Collection

Typ
public class MultiLineTableCellRenderer extends JList<String> implements TableCellRenderer { 

    @Override 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
     //make multi line where the cell value is String[] 
     if (value instanceof String[]) { 
      setListData((String[]) value); 
     } 

     //cell backgroud color when selected 
     if (isSelected) { 
      setBackground(UIManager.getColor("Table.selectionBackground")); 
     } else { 
      setBackground(UIManager.getColor("Table.background")); 
     } 

     return this; 
    } 
} 

Schritt 2 zu ändern: mein getestet Screenshot Set TableCellRenderer in die JTable

MultiLineTableCellRenderer renderer = new MultiLineTableCellRenderer(); 

    //set TableCellRenderer into a specified JTable column class 
    table.setDefaultRenderer(String[].class, renderer); 

    //or, set TableCellRenderer into a specified JTable column 
    table.getColumnModel().getColumn(columnIndex).setCellRenderer(renderer); 

Dies ist:

Multi-line TableCellRenderer Test

+0

Upvoted, um den elegantesten Weg mit TableCellRenderer zu zeigen. –

+0

was für ein Wack, es funktioniert einfach nicht. awt saugt: '( – mekkanizer

+0

@mekkanizer: Ich kann es durchgehen, wenn Sie Ihren Code mit mir teilen. –