JTable zeigt keinen JSrollPane

The_Answer1985

Erfahrenes Mitglied
Hallo miteinander,

ich habe eine Klasse, in der u. a. eine Tabelle angezeigt werden soll. Die Tabelle soll später Daten aus einer DB enthalten.

Momentan bin ich aber noch beim Layout und verzweifle beinahe der JTable einen ScrollPane hinzuzufügen.
(Ja, ich hab die Suche benutzt, aber nichts gefunden, dass das Problem gelöst hat...)


Code, der die Tabelle auf den JFrame legt:
Code:
JTable table = new JTable(new tabellenModell());
        table.setPreferredScrollableViewportSize(new Dimension(500, 70));
        table.setFillsViewportHeight(true);

        JScrollPane scrollPane = new      JScrollPane(table,ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        getContentPane().add(scrollPane);


Code, der das tableModel erzeugt.
Code:
public class tabellenModell extends AbstractTableModel {

        
    String[] columnNames = {"First Name",
                "Last Name",
                "Sport",
                "# of Years",
                "Vegetarian"};
    Object[][] data = {
                {"Mary", "Campione",
                    "Snowboarding", new Integer(5), new Boolean(false)},
                {"Alison", "Huml",
                 "Rowing", new Integer(3), new Boolean(true)},
                {"Kathy", "Walrath",
                 "Knitting", new Integer(2), new Boolean(false)},
                {"Sharon", "Zakhour",
                 "Speed reading", new Integer(20), new Boolean(true)},
                {"Philip", "Milne",
                 "Pool", new Integer(10), new Boolean(false)},
                {"Isaac", "Rabinovitch", 
                 "Nitpicking", new Integer(1000), new Boolean(false)}
    };
    

    public int getColumnCount() {
        return columnNames.length;
    }

    public int getRowCount() {
        return data.length;
    }

    public String getColumnName(int col) {
        return columnNames[col];
    }

    public Object getValueAt(int row, int col) {
        return data[row][col];
    }
    
    public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }
    
}

Es handelt sich bei der Klasse mit dem tableModel um Quelltext aus einem Sun-Tutorial.

Ich habe in meiner GUI weder ScrollPane, noch die Spaltenbezeichnungen.

Bin für jede Hilfe dankbar.

mfg
 
Alles andere wird so dargestellt, wie es sein soll.
Ich verwende verschiedene LayoutManager. Das Panel, dem ich die Tabelle zuweise, verwendet BorderLayout (standardmäßig, weil ich keinen Layouter hinzugefügt habe).

mfg
 
Mit welcher Entwicklungsumgebung arbeitest du denn. Die table muss in der ScrollPane liegen:

Code:
jScrollPane1 =  new javax.swing.JScrollPane();
jTable1 =          new javax.swing.JTable();
 
jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
));
 
jScrollPane1.setViewportView(jTable1);
 
Probier mal folgendes:

Statt

Java:
getContentPane().add(scrollPane);

probier mal


Java:
getContentPane().add(scrollPane, BorderLayout.CENTER);
 
Danke für eure schnellen Tipps!

@ dontschew
Ich benutze JDK 5.0 in Eclipse.
Wie meinst du das, dass die Table in der ScrollPane liegen muss? Zuerst ScrollPane initialisieren, dann Table und zum Schluss dem ScrollPane die Table zuweisen

--> wenn ich es so richtig verstanden habe aus deinem Code, leider hat das aber auch nicht funktioniert!

@ mki_germo

hat leider auch nichts geändert!
 
Ersetz mal das die ScrollPane durch ein Farbiges Panel, einfach um zu sehen, ob es generella am Hinzufügen zur ContentPane liegt.
Wenn das funktioniert (Panel wird angezeigt), dann gib in deiner getValueAt-Methode mal per System.out.println aus, was zurückgegeben wird.
 
ja so hab ich es gemeint. Das muss ich mal schnell probieren das muss doch so gehen.
 
Du musst zuerst eine ScrollPane auf deinem Frame/Panel (oder was auch immer) plazieren. Die Tabelle kommt anschliessend in die ScrollPane.

Also etwa so:
PHP:
	private void initialize() {
        this.setSize(new Dimension(421, 319));
        this.setContentPane(getJScrollPane());
        this.setDefaultCloseOperation(0);
	}

	private JScrollPane getJScrollPane() {
		if (jScrollPane == null) {
			jScrollPane = new JScrollPane();
			jScrollPane.setViewportView(getJTable());
		}
		return jScrollPane;
	}

	private JTable getJTable() {
		if (jTable == null) {
			jTable = new JTable();
		}
		return jTable;
	}
 

Neue Beiträge

Zurück