2010-02-19 12 views
9

Mit folgenden Beispielcode:Wie setze ich Header für JTable?

String column_names[]= {"Serial Number","Medicine Name","Dose","Frequency"}; 
table_model=new DefaultTableModel(column_names,3); 
table=new JTable(table_model); 

Wir wollen wie in column_names mit dem obigen Code mit den Namen der Spalten-Header setzen, aber es funktioniert nicht. Der Header ist nicht sichtbar, obwohl die Tabelle erstellt wird.

+2

Gemäß den Richtlinien sollten Sie CamelCase anstelle von _: tableModel und columnNames verwenden. Siehe http://java.sun.com/docs/codeconv/html/CodeConventions.doc8.html – Fortega

Antwort

25

Um die Kopfzeile sehen zu können, sollten Sie die Tabelle in eine JScrollPane einfügen.

panel.add(new JScrollPane(table)); 

Oder Sie könnten das Tableheader zu Ihrem Panel speziell hinzufügen, wenn Sie wirklich keine scrollpane wollen (aber: In der Regel Sie dieses Verhalten nicht wünschen):

panel.add(table.getTableHeader(), BorderLayout.NORTH); 
panel.add(table, BorderLayout.CENTER); 
1

Lesen Sie die JTable API und folgen Sie dem Link zum Swing-Tutorial unter "Wie man Tabellen verwendet" für ein funktionierendes Beispiel. Der Trick besteht darin, die Tabelle zu einem JScrollPane hinzuzufügen.

2

See here for more information about JTables and TableModels

JTable Headers nur gezeigt bekommen, wenn die Tabelle ist in einem Bildlauffenster, die in der Regel ist das, was Sie ohnehin tun wollen. Wenn aus irgendeinem Grund müssen Sie ohne Bildlauffenster eine Tabelle zeigen, können Sie tun:

panel.setLayout(new BorderLayout()); 
panel.add(table, BorderLayout.CENTER); 
panel.add(table.getTableHeader(), BorderLayout.NORTH); 
1
MessageFormat header = null; 

if (this.headerBox.isSelected()) 
{ 
    header = new MessageFormat(gradesLabel.toString()); 
} 

MessageFormat footer = null; 

if (this.footerBox.isSelected()) 
{ 
    footer = new MessageFormat(this.footerField.getText()); 
} 

boolean fitWidth = this.fitWidthBox.isSelected(); 
boolean showPrintDialog = this.showPrintDialogBox.isSelected(); 
boolean interactive = this.interactiveBox.isSelected(); 

JTable.PrintMode mode = fitWidth ? JTable.PrintMode.FIT_WIDTH : 
    JTable.PrintMode.NORMAL; 
try 
{ 
    boolean complete = this.gradesTable.print(mode, header, footer, 
    showPrintDialog, null, 
    interactive, null); 

    if (complete) 
    { 
    JOptionPane.showMessageDialog(this, 
     "Printing Complete", 
     "Printing Result", 
     1); 
    } 
    else 
    JOptionPane.showMessageDialog(this, 
     "Printing Cancelled", 
     "Printing Result", 
     1); 
} 
catch (PrinterException pe) 
{ 
    JOptionPane.showMessageDialog(this, 
    "Printing Failed: " + pe.getMessage(), 
    "Printing Result", 
    0); 
} 

Eigentlich ist das jtable Objekt verfügt über eine Methode, die print() menthod ist, die verwendet wird, passieren die Kopf- und Fußzeile als Parameter zum Drucken Hier HeaderBox ist JCheckbox welche ich in meinem Programm erstellt habe und auch hier sind einige Jlabels auch da. Wenn Sie das nicht benötigen, entfernen Sie diese aus diesem Code und führen Sie das Programm

Verwandte Themen