JTable und nicht sichbare Spalten
-
Hab hier ein kleines Problem, dies als Test.
Ich will in meine Andwenung verschiedene artige Tabellen anzeugenlassen.
eigentlich dachte ich, es könnte so gelöst werden.
Aber die Spalten werden nicht angezeigt.import javax.swing.SwingUtilities; import java.awt.BorderLayout; import java.util.Vector; import javax.swing.JPanel; import javax.swing.JFrame; import javax.swing.JTable; public class TEST extends JFrame { private static final long serialVersionUID = 1L; private JPanel jContentPane = null; private JTable jTable = null; /** * This method initializes jTable * * @return javax.swing.JTable */ JTable getJTable() { if (jTable == null) { jTable = new JTable(); } return jTable; } /** * @param args */ public static void main(String[] args) { // TODO Automatisch erstellter Methoden-Stub SwingUtilities.invokeLater(new Runnable() { public void run() { TEST thisClass = new TEST(); thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); thisClass.setVisible(true); } }); } /** * This is the default constructor */ public TEST() { super(); initialize(); Vector<String> c = new Vector<String>(); c.add("Hello"); c.add("Welt"); Vector<String> h = new Vector<String>(); h.add("Spalte1"); h.add("Spalte2"); getJTable().setModel(new TestModel(c,h)); } /** * This method initializes this * * @return void */ private void initialize() { this.setSize(300, 200); this.setContentPane(getJContentPane()); this.setTitle("JFrame"); } /** * This method initializes jContentPane * * @return javax.swing.JPanel */ private JPanel getJContentPane() { if (jContentPane == null) { jContentPane = new JPanel(); jContentPane.setLayout(new BorderLayout()); jContentPane.add(getJTable(), BorderLayout.CENTER); } return jContentPane; } } class TestModel extends javax.swing.table.AbstractTableModel { TestModel(Vector<String> content, Vector<String> header) { super(); m_content = content; m_header = header; } Vector<String> m_content; Vector<String> m_header; public int getColumnCount() { return m_header.size(); } public int getRowCount() { return 1; } public Object getValueAt(int rowIndex, int columnIndex) { return m_content.get(columnIndex); } }
-
Die Spaltenüberschriften?
Bei JTable sind diese über die Methode getTableHeader() erreichbar. Man könnte also folgendes machen:
jContentPane.add(getJTable(), BorderLayout.CENTER); jContentPane.add(getJTable().getTableHeader(), BorderLayout.NORTH);
Üblich ist es allerdings, die Tabelle in ein JScrollPane-Exemplar einzubetten. Bei diesem Vorgang werden in der addNotify-Methode von JTable dem JScrollPane mittels setColumnHeaderView() die Spaltenüberschriften zugewiesen:
jContentPane.add(new JScrollPane(getJTable()), BorderLayout.CENTER);
-
Vielen Danke