SWT ScrollPane Größe zu klein

martin1989

Aktives Mitglied
Hallo!

Ich habe einen JDialog, in dem ein Panel (BorderLayout) ist. Im SOUTH Berech des Panels befindet sich ein Panel und darin ein Button.

Im CENTER Bereich befindet sich eine scrollpane und darin eine jTable.

Wenn ich das ganze ausführe bekomme ich das links gezeigt bild, ich will das es so aussieht wie rechts dargestellt.

Ich habe mich schon mit scrollpolicy versucht und auch preffered size und pack usw ... aber irgendwie bekomme ich es nicht hin🙁

Hat jemand einen Tipp?

Vielen Dank !

LGas.jpg
 
folgend der code (nicht relevantes entfernt) ...

Java:
public class DialogOne extends JDialog  implements ItemListener{



	static ArrayList<String> findBugsSelected = new ArrayList<String>();
	
	static JCheckBox[] boxes;
	JPanel paneld = new JPanel();
	BorderLayout borderlayout = new BorderLayout();
	JButton bd = new JButton();
	
	
	public DialogOne(){
		

		this.setVisible(false)

}




Java:
	public void init()
	{
		

		       this.setTitle("Properties");

		  //   this.setSize(1000,800);

		        this.setModal(true);
		               
		   
		        
		              
		        paneld.setLayout(borderlayout);
		        
		        JPanel buttonpanel = new JPanel();
		        
		        bd.setPreferredSize(new Dimension(50,40));
		        buttonpanel.add(bd);
		        
		        paneld.add(buttonpanel, borderlayout.SOUTH);
		        
		       
		        this.add(paneld);
		           
		
	TableModel model = new PropertyTableModel();
        JTable table = new JTable(model);
        table.setRowHeight(40);
        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        
        TableColumn col1 = table.getColumnModel().getColumn(0);
        col1.setPreferredWidth(800);
      
        TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>();
   	 
               table.setRowSorter( sorter );
 

        sorter.setModel( model );
        table.getRowSorter().toggleSortOrder( 1 );
        table.getRowSorter().toggleSortOrder( 1 );
        
	 JScrollPane scrollPane = new JScrollPane(table);
     
         paneld.add(scrollPane, borderlayout.CENTER);
          
      
        this.pack();
        this.setLocationRelativeTo(null); 
	}


Danke!
 
Hm, also was mir zumindest auffällt ist folgendes: Du erstellst dein paneld mit BorderLayout. Für den Button erzeugst du dann ein extra JPanel und addest das in den South Bereich deines paneld (hier solltest du auf jeden Fall schonmal die Positionskonstante
Java:
BorderLayout.SOUTH
statisch aufrufen und nicht die deines instanzierten BorderLayout Objektes (Anfangsbuchstabe groß beachten).
Für deine JTable benutzt du jetzt kein seperates JPanel mehr, sondern addest die Komponente direkt in deinen Center Bereich. Bau dir da auch nochmal ein JPanel rein, setze ggfs eine preferredSize für deine Table und stelle die HorizontalScrollbars ab
Java:
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
.
Ich weiss ehrlich gesagt nicht ob es daran liegt, aber probier das mal nacheinander aus.
 
Zuletzt bearbeitet:
Das BorderLayout sollte die preferred size der Komponenten berücksichtigen. Jeder der fünf Bereiche sollte so groß sein, daß die darin enthaltene Komponente an Höhe und/oder Breite mindestends ihre "preferred" Werte zur Verfügung hat.
Eine JScrollPane sollte als preferred size per default eigentlich die Größe der als View verwendeten Komponenten zurückliefern. In deinem Fall funktioniert das offenbar nicht automatisch. Dann könntest du versuchen, die Größe des Viewports der JScrollPane explizit zu setzen, und zwar auf die preferred size der Tabelle.
Versuchs mal mit:
Java:
scrollPane.getViewport().setPreferredSize(table.getPreferredSize());
 
Hm, also was mir zumindest auffällt ist folgendes: Du erstellst dein paneld mit BorderLayout. Für den Button erzeugst du dann ein extra JPanel und addest das in den South Bereich deines paneld

Ja dies mach ich weil der button sonst über den gesamten jdialog gestrecht wird ^^ 🙂


was macht das für einen unterschied ob ich die Positionskonstante statisch aufrufe oder über das instanzierte BL Objekt?



@Harry Kane:

Danke hat auf Anhieb geklappt 🙂
 
was macht das für einen unterschied ob ich die Positionskonstante statisch aufrufe oder über das instanzierte BL Objekt?
Praktisch erstmal nicht, da Java dir das netterweise umwandelt in einen Aufruf über den Klassennamen. Allerdings ist das nicht der Grundgedanke von statischen Methoden/Konstanten, die ja per Definition nicht an eine Instanz gebunden sind. Eigentlich sollte das auch zumindest eine Warnung werfen.
 

Zurück
Oben