# JScrollPane zu JTable hinzufügen



## XSlippy666 (26. Jan 2012)

Hallo liebe Community,

ich habe folgendes Problem. Ich sitze jetzt son nahezu eine Stunde davor und will eine JScrollPane zu einer JTable hinzufügen. Ich habe schon andere Beiträge gelesen und fleißig ausprobiert aber ich kriege es nicht hin. Könnt ihr mir helfen? Das Programm ist für meine Facharbeit auf dem Gymnasium. Dahe bitte ich um schnelle Antworten. Danke an alle die mir helfen können. 

Hier ist mein Quellcode:


```
JTable table4 = new JTable(numbers,columnNames);
        Dimension sizetable4 = table4.getPreferredSize();
        table4.setBounds(20,180,680,(row*28));
        table4.setIntercellSpacing( new Dimension(gapWidth, gapHeight) );
        table4.setRowHeight(28);
        table4.setBorder(compound);
```


----------



## irgendjemand2 (26. Jan 2012)

weder wird aus deinem post noch aus dem code ersichtlich was du machen willst ...

willst du etwa um eine ganze table ein scrollpane ? ... dann einfach die table auf ein panel adden und den viewport des scrollpane darauf setzen ..

ansonsten versuch dich mal bitte etwas deutlich auszudrücken ...


----------



## Michael... (26. Jan 2012)

```
JScrollPane scroll = new JScrollPane(table4);
container.add(scroll...
```


----------



## SlaterB (26. Jan 2012)

> dann einfach die table auf ein panel adden und den viewport des scrollpane darauf setzen ..

zwischen JScrollPane und JTable besser kein JPanel als Zwischenebene?


----------



## XSlippy666 (26. Jan 2012)

tut mir sehr leid leute wie ihr an meinem profil sehen könnt ist das mein erster beitrag 
also nochmal von vorne:

Ich habe eine JTable programmiert und möchte gerne eine vertikale Srcollpane zur Tabelle hinzufügen. Sie wird leider nicht angezeigt wenn ich das so mache: 


```
JTable table4 = new JTable(numbers,columnNames);
        Dimension sizetable4 = table4.getPreferredSize();
        table4.setBounds(20,180,680,(row*28));
        table4.setIntercellSpacing( new Dimension(gapWidth, gapHeight) );
        table4.setRowHeight(28); 
        table4.setGridColor(Color.blue);
        table4.setBorder(compound);
        

       JScrollPane scroll = new JScrollPane(table4);
       schreibe.add(scroll); // schreibe ist der name der Frame
```

meine JFrame hat das Layout null und ich bin ein ziemlicher java anfänger.
Daher wäre es lieb, wenn ihr mir sagt wie ich den quellcode ändern muss, damit meine Tabelle mit einer vertikalen scrollbar versehen ist.


----------



## irgendjemand2 (26. Jan 2012)

SlaterB hat gesagt.:


> > dann einfach die table auf ein panel adden und den viewport des scrollpane darauf setzen ..
> 
> zwischen JScrollPane und JTable besser kein JPanel als Zwischenebene?



keine ahnung .. ist eigentlich ziemlich bums ... habs jetzt nur so ausführlich geschrieben da ich nicht wusste das man den viewport vom scrollpane auch direkt auf ne table setzen kann


----------



## SlaterB (26. Jan 2012)

> meine JFrame hat das Layout null 

von selber passiert das doch nicht oder wenn du das schon schreibst, bist du dann dir nicht über die Konsequenzen im klaren?
verwende entweder wieder ein anderes Layout als null, wie es in JEDEM Anfängertutorial auf den ersten 99% der Seiten kaum anders empfohlen wird,

oder verwende wie für null-Layout eben üblich setBounds(), für das JScrollPane, denn dessen Position musst du ja absolut angeben


----------



## XSlippy666 (26. Jan 2012)

gibt es denn irgenteine möglichkeit dass ich die bounds so festlege, dass die scrollpane  genau unter der table sind?


----------



## SlaterB (26. Jan 2012)

das ScrollPane UMSCHLIESST die Tabelle,
egal wo es (das ScrollPane) im Frame hinsetzt, egal wie breit und hoch, es wird die Tabelle zu sehen sein und gegebenenfalls ScrollBalken


----------



## XSlippy666 (26. Jan 2012)

so jetzt habe ich für die scrollpane folgendes festgelegt: 

```
JTable table4 = new JTable(numbers,columnNames);
        Dimension sizetable4 = table4.getPreferredSize();
        table4.setBounds(20,180,680,(row*28));
        table4.setIntercellSpacing( new Dimension(gapWidth, gapHeight) );
        table4.setRowHeight(28);
        table4.setGridColor(Color.blue);
        table4.setBorder(compound);
        

       JScrollPane scroll = new JScrollPane(table4);
       Dimension scrollsize = scroll.getPreferredSize();
       scroll.setBounds(20,180,table4.getX(),table4.getY());
       schreibe.add(scroll); // schreibe ist der name der Frame
```

leider wird sie immer noch nicht angezeigt...
es wäre wirklich toll wenn jemand mal eine antwort posten könnte die nicht besagt, dass ich ein anfänger bin und deshalb ein anderes layout verwenden soll usw. 
ich habe mich schließlich hier angemeldet um zu lernen


----------



## XSlippy666 (26. Jan 2012)

@SlaterB 

du scheinst dich anscheinend viel besser auszukennen als ich. könntest du mir vieleicht zeigen wie du das programmieren würdest ?


----------



## bERt0r (26. Jan 2012)

Du sollst einen Layoutmanager verwenden, weil du mit einem Layoutmanager genau diese Problemen nicht hast. Anfänger verwenden keinen Layoutmanager (null) weil sie es nicht besser wissen. Keinen Layoutmanager zu verwenden ist in 99,99999999% aller Fälle die umständlichere, fehleranfälligere, hässlichere und schlechtere Entscheidung.
[Edit]Schon Phase 3?[/edit]


----------



## Michael... (26. Jan 2012)

Wieso liest Du die PreferredSize von Table und ScrollPane aus?
und setzt die Breite und Höhe des ScrollPanes entsprechend der Position der Tabelle 
	
	
	
	





```
scroll.setBounds(20,180,table4.getX(),table4.getY());
```
?
Eine Komponente in der ScrollPane ist erst skrollbar, wenn der notwendige Platz zur idealen Darstellung größer als der Platz ist, den die ScrollPane einnimmt. Evtl. ist Deine JTable ja nicht breit genug?


----------



## SlaterB (26. Jan 2012)

> scroll.setBounds(20,180,table4.getX(),table4.getY());

der dritte und vierte Parameter sind keine beliebigen Spasswerte, sondern haben eine Bedeutung, Breite und Höhe,
und du übergibst getX() + getY(), welche hier bestimm noch 0 sind..
was man nicht unbedingt wissen muss, aber z.B. mit System.out.println() ausgeben kann..,

> die nicht besagt, dass ich ein anfänger bin und deshalb ein anderes layout verwenden soll usw.
> ich habe mich schließlich hier angemeldet um zu lernen 

wie wärs mit dieser Aussage: keiner hat die Zeit == Geld, dir Java beizubringen,
schon gar nicht wenn du so schlecht kooperierst, die normalen Wege nicht befolgen willst

bevor ich das gelesen und geantwortet hatte, hatte ich aber schon zusammenkopiert:


```
public class TestGUI
    extends JFrame
{

    public TestGUI()    {
        JFrame schreibe = this;  // nicht gut, aber TestGUI ist nunmal mein JFrame, damit es zu deinem Code passt
String[] columnNames = new String[] {"a","b"};
String[][] numbers = new String[][] {{"a1","b1"},{"a2","b2"},{"a3","b3"},{"a4","b4"}};
schreibe.setLayout(null);
      

        JTable table4 = new JTable(numbers,columnNames);
        Dimension sizetable4 = table4.getPreferredSize();
//        table4.setBounds(20,180,680,(row*28));
//        table4.setIntercellSpacing( new Dimension(gapWidth, gapHeight) );
        table4.setRowHeight(28);
        table4.setGridColor(Color.blue);
//        table4.setBorder(compound);
        
 
       JScrollPane scroll = new JScrollPane(table4);
       Dimension scrollsize = scroll.getPreferredSize();
       scroll.setBounds(20,180,100,100);
       schreibe.add(scroll); // schreibe ist der name der Frame

       
       
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       setSize(400, 400);
       setVisible(true);
    }


    public static void main(String[] args)    {
        new TestGUI();
    }

}
```


----------



## XSlippy666 (26. Jan 2012)

ich habe das mit dem table4.getX() uws. einfach mal auspropiert.... 
mein fachleher möchte, dass ich das null layout verwende... daher habe ich ja auch das problem...
bitte leute ich bin auf EURE hilfe angewiesen


----------



## Michael... (26. Jan 2012)

Eventuell noch

```
table4.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
```


----------



## XSlippy666 (26. Jan 2012)

Vielen Vielen Dank...
Mein Fehler war, dass ich die tabelle nochmals seperat zur frame hinzugefügt habe... 
wenn du in meiner nähe wohnen würdest, dann  würde ich dir ein bier auf zwei ausgeben!!! :applaus:


----------

