JTable zeigt keinen JSrollPane

geht doch

Code:
public class NewJFrame1 extends javax.swing.JFrame {
    
    
    public NewJFrame1() {
        initComponents();
    }
    
    
    private void initComponents() {
        jScrollPane1 = new javax.swing.JScrollPane();
        mytable = new javax.swing.JTable();
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        mytable.setModel(new tabellenModell());
        jScrollPane1.setViewportView(mytable);
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE,  278, Short.MAX_VALUE)
                .addContainerGap())
        );
        pack();
    }
    
    
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame1().setVisible(true);
            }
        });
    }
    
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable mytable;    
}
 
class tabellenModell extends javax.swing.table.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();
    }   
}
 
@ xanadoo

hat nix geändert...habe aber auch net wirklich verstanden, was sich da ändern sollte.

@ dontschew

dein Code funktioniert einwandfrei, aber wenn ich es in meine Klasse einfüge, bleib die Tabelle unverändert.

Mit den Layouts, die du verwendest, habe ich ehrlich gesagt noch keine Erfahrung.
Was deklarierst du mit

"
layout.setHorizontalGroup()" bzw. "layout.setVerticalGroup()"?
wenn ich das unverändert in meine Klasse einfüge, wird das Fenster übermalt
 
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
Also bei mir sieht das so aus:

ResultSet rs = getResultFromCars();
carTable.setModel(new CarTableModel(rs));
mdbc.close(rs);
jScrollPane1.setViewportView(carTable);

wobei carTable so deklariert ist:

private javax.swing.JTable carTable;

hier noch die Methode getResultFromCars():

public ResultSet getResultFromCars() {

ResultSet rs = null;

try{
rs = (ResultSet) stmt.executeQuery("Select * from cars");
} catch(SQLException e){}

return rs;
}

Der Code von CarTableModel.java:

/*
* CarTableModel.java
*
* Created on 11. April 2007, 09:27
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/

package mysqlop;



import javax.swing.table.AbstractTableModel;
import java.sql.*;
import java.util.ArrayList;

/**
*
* @author jue
*/
public class CarTableModel extends AbstractTableModel {

private int colnum = 4;
private int rownum;
private String[] colNames = { "ID", "Name", "Vendor", "Type" };
private ArrayList<String[]> ResultSets;

/** Creates a new instance of CarTableModel */
public CarTableModel(ResultSet rs) {

ResultSets = new ArrayList<String[]>();

try{
while(rs.next()){

String[] row = {
rs.getString("carid"),rs.getString("name"), rs.getString("vendor"), rs.getString("type")
};
ResultSets.add(row);
}
}
catch(Exception e){
System.out.println("Exception in CarTableModel");
}
}

public Object getValueAt(int rowIndex, int columnIndex) {
String[] row = ResultSets.get(rowIndex);
return row[columnIndex];
}

public int getRowCount() {
return ResultSets.size();
}

public int getColumnCount() {
return colnum;
}

public String getColumnName( int param ) {
return colNames[param];
}


}

Hier noch die Deklaration von jScrollPane1

private javax.swing.JScrollPane jScrollPane1;

Kannst Du was mit anfangen?

Gruss, jue4you.de
 
dann versuch mal das:

PHP:
package javaapplication3;
import javax.swing.*;
import javax.swing.JFrame;
import javax.swing.*;
import java.awt.*;
public class NewJFrame1 extends javax.swing.JFrame {
    
    
    public NewJFrame1() {
        initComponents();
    }
    
    
    private void initComponents() {
        JTable mytable = new JTable(new tabellenModell());
        mytable.setPreferredScrollableViewportSize(new Dimension(500, 200));
        mytable.setFillsViewportHeight(true);
        JScrollPane scrollPane = new JScrollPane(mytable,ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        getContentPane().add(scrollPane);
        
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        scrollPane.setViewportView(mytable);
       
        pack();
    }
    
    
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame1().setVisible(true);
            }
        });
    }
    
   
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable mytable;
    
    
}

class tabellenModell extends javax.swing.table.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();
    }   
}
 
Ach, stell gerade fest da geht das ScrollP wieder nicht ==> siehe Seite 2 da geht es jetzt
 
Zuletzt bearbeitet von einem Moderator:
jetzt geht es aber da hätten wir auch gleich drauf kommen können:
schau dir den Code mal genau an

PHP:
package javaapplication3;
import javax.swing.*;
import javax.swing.JFrame;
import javax.swing.*;
import java.awt.*;
public class NewJFrame1 extends javax.swing.JFrame {
    
    
    public NewJFrame1() {
        initComponents();
    }
    
    
    private void initComponents() {
        
        
        JTable mytable = new JTable(new tabellenModell());
        mytable.setPreferredScrollableViewportSize(new Dimension(500, 200));
        mytable.setFillsViewportHeight(true);
        JScrollPane scrollPane = new JScrollPane();
        //hier war der fehler schau mal in die Argumentenliste was du da ausgeschaltet hast
        //JScrollPane scrollPane = new JScrollPane(mytable,ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        getContentPane().add(scrollPane);
        
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        scrollPane.setViewportView(mytable);
       
        pack();
    }
    
    
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame1().setVisible(true);
            }
        });
    }
    
   
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable mytable;
    
    
}

class tabellenModell extends javax.swing.table.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();
    }
    
}
 
Die Vertical Scrollbar hattest du ausgeschaltet, als ich sie so deklariert verwendet hatte, war sie mit "Always" bzw. "As needed" verwendet.

Wieder geht es mit "always" in deinem Code-Bsp. Meine GUI will das aber überhaupt nicht annehmen, die Tabelle wird immernoch so dargestellt :confused:
 
ich werde es jetzt so probieren, die GUI um dein Code zu "bauen". Dann hab ich wenigstens ne funktionierende Tabelle!

Danke für deine und fur eure Hilfe!

mfg
 
Also jetzt verstehe ich überhaupt nicht mehr was du meinst hab doch extra den ganzen layout Mist raus geworfen und jede einzellne Zeile von dir übernommen.

Wenn ich die main starte bekomme ich das Frame wenn ich es verkleinere wird die scrollPane aktiv wenn ich neue Daten einfüge auch.

Also was geht denn nun nicht?
 
wenn ich es in meine GUI einfüge, ändert es nichts an der Tabelle. Die Tabelle ist immer noch "Kopflos", also die Spaltenbezeichnungen werden nicht angezeigt und der ScrollPane ist ebenfalls nicht da.

In deinem Bsp geht es, genau das wundert mich ja...
 
Zurück