# JScrollPane im JPanel im JFrame SWING



## mr.warft (6. Dez 2007)

Hallo,

ich sitze nun schon fast zwei Tage an meinem Problem :autsch: ...vielleicht kann mir jemand eine Richtung zeigen.

Mein Problem:

Ich besitze ein Hauptfenster mit einem Menu (also ein ganz normales Fenster mit "Datei" und sowas). Also kurz gesagt ein JFrame mit jMenuBar und diversen jPanels. Nun habe ich in einer anderen Klasse "GUI" mir ein JScrollPane erzeugt in dem eine JTable sitzt, an der auch Inhalt übergeben wird...das funktioniert alleine auch ganz gut. Nun möchte ich diese Klasse über die Hauptklasse in einem JPanel aufrufen...also übergebe ich als Rückgabewert der Klasse ein JScrollPane und rufe dieses dann mit 

"jPanel1.add(new GUI().initGUI());"     auf. Nur leider wird dieses JScrollPane bzw die Tabelle nicht angzeigt.

Kann mir vielleicht jemand einen TIP geben woran das liegen könnte?

Als Info: Ich habe die Panels nicht per Hand anglegt sonder habe Jigloo dafür benutzt.

Hier sonst der Code der Klasse GUI.


```
public class GUI extends javax.swing.JPanel{
	private JScrollPane jScrollPane1;
	private JTable jTable1 = null;

	/**
	* Auto-generated main method to display this 
	* JPanel inside a new JFrame.
	*/
	public static void main(String[] args) {
		JFrame frame = new JFrame();
		frame.getContentPane().add(new GUI());
		frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		frame.pack();
		frame.setVisible(true);
	}
	
	public GUI() {
		super();
		initGUI();
	}
	
	public JScrollPane initGUI() {
		
		try {
			javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName());
			
			
				jScrollPane1 = new JScrollPane();
				this.add(jScrollPane1);
				jScrollPane1.setPreferredSize(new java.awt.Dimension(539, 280));

					
					
			
					
					ArrayList<Aequivalenzziffer> al = new ArrayList<Aequivalenzziffer>();
					al = new AequivalenzzifferConnect().getArrayList();
					Object[][] data = null;
					System.out.println(al.size());
					for (Aequivalenzziffer ae : al){
		
						
						data = new Object[][] {{
								ae.getKostenstellenNr(),
								ae.getKostentraegerNr(),
								ae.getZiffer()}};	
					}
					TableModel jTable1Model = new ITCTableModel(
								data,
								new String[] { "Kostenstellen Nr", "Kostenträger Nr", "Aequivalenzziffer" });
					jTable1 = new JTable();
					jScrollPane1.setViewportView(jTable1);
					jTable1.setModel(jTable1Model);
					jTable1.setPreferredSize(new java.awt.Dimension(539, 259));
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return jScrollPane1;
	}

}
```

Wäre super wenn mir da jemand helfen könnte.

DANKE.

Gruß,
mr.warft


----------



## happy_robot (7. Dez 2007)

strick das alles mal so um:

- panel kreieren
- table zum panel hinzufügen
- scrollpane mit


```
scrollpane = new JScrollPane(panel);
```

kreieren.

lass den ganzen viewport-krempel weg. das macht jscrollpane fein alleine.


EDIT:

und noch ne faustregel. 

IMMER erst das model auf Components setzen bevor man sie in container einfügt!


----------



## mr.warft (7. Dez 2007)

Hallo

danke für die schnelle antwort.

ich habe deinen Ratschlag mal versucht umzusetzen (bin leider noch nicht so lange bei Swing). Bekomme aber ne Fehlermeldung.

Hast du vielleicht Beispielcode für deine Beschreibung? Ich weiß, ich weiß...es ist eigentlich viel zu primitiv danach zu fragen aber ich schlage mich jetzt schon zwei Tage herum und ich wollte morgen wenigstens Ergebnisse liefern können.

Also falls du was hast, wäre das wirklich ne Erleichterung für mich.

Danke noch einmal für die schnelle Antwort.

Gruß


----------



## happy_robot (7. Dez 2007)

funktioniert tadellos bei mir (jdk 1.5_13):



```
import java.util.ArrayList;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;


public class GUI extends javax.swing.JPanel{
   private JScrollPane jScrollPane1;
   private JTable jTable1 = null;

   /**
   * Auto-generated main method to display this
   * JPanel inside a new JFrame.
   */
   public static void main(String[] args) {
      JFrame frame = new JFrame();
      frame.getContentPane().add(new GUI());
      frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
      frame.pack();
      frame.setVisible(true);
   }
   
   public GUI() {
      super();
      initGUI();
   }
   
   public JScrollPane initGUI() {
      
      try {
         javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName());
         
         
            jScrollPane1 = new JScrollPane();
            this.add(jScrollPane1);
            jScrollPane1.setPreferredSize(new java.awt.Dimension(539, 280));

               
               Object[][] data = new Object[20][3];
               for(int n = 0; n <= 2; n++) {
                   for(int m = 0; m < 20; m++) {
                	   data[m][n] = new String(n+"::"+m);
                   }
               }
               
               TableModel jTable1Model = new DefaultTableModel(data, new String[] { "Kostenstellen Nr", "Kostenträger Nr", "Aequivalenzziffer" });
               jTable1 = new JTable();
               jScrollPane1.setViewportView(jTable1);
               jTable1.setModel(jTable1Model);
               jTable1.setPreferredSize(new java.awt.Dimension(539, 259));
         
      } catch (Exception e) {
         e.printStackTrace();
      }
      
      return jScrollPane1;
   }

}
```


das einzige was ich geändert habe ist das zusammenstricken der daten.
kann es vielleicht sein daß dein model nix zurückgibt? nimm mal DefaultTableModel, wie hier in dem beispiel.


----------



## mr.warft (7. Dez 2007)

DANKE

Ich habe vorhin gesehen, das mein Problem nicht in der Klasse GUI lag sonder das es am Hauptfenster lag...aber wo genau weiß ich immer noch nicht.

Habe aber gleich eine erneute Anfrage zum Code


```
ArrayList<Aequivalenzziffer> al = new ArrayList<Aequivalenzziffer>();
					al = new AequivalenzzifferConnect().getArrayList();
					Object[][] data = new Object[al.size()][];
					System.out.println(al.size());
					for (Aequivalenzziffer ae : al){
						
						System.out.println("in der for");
						
						
						data = new Object[][] {{
								ae.getKostenstellenNr(),
								ae.getKostentraegerNr(),
								ae.getZiffer()}};
						
					}
					TableModel jTable1Model = new DefaultTableModel(data, new String[] { "Kostenstellen Nr", "Kostenträger Nr", "Aequivalenzziffer" });
```

in diesem Code wird leider nur der letzte Datensatz aus der ArrayList zurück gegeben bzw. angezeigt. Gibt es da irgendwie eine Lösung? Leider gibt in jTable1Model keine addRow() oder sowas in der Art.

Danke.

Gruß


----------

