JScrollPane nicht scrollbar (mit KSKB!)

TimeIsTheKey

Aktives Mitglied
Hallo

Ich hab wieder ein Problem mit JScrollBars ... Irgendwie sitze ich gerade auf dem Schlauch. Ist auch ein bisschen spät. Meine JScrollPanes sind nicht richtig scrollbar. Irgendwas beim setzen der Grössen mache ich falsch, aber auch nach rumspielen bin ich nicht darauf gekommen was (sowohl Haupt JPanel als auch TextArea ...). Sieht jemand das Problem?

Hier ein Beispiel Programm

Code:
import java.awt.Dimension;
import java.util.ArrayList;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ScrollPaneConstants;
import javax.swing.WindowConstants;


public class Beispiel1 extends JFrame{

	private static final long serialVersionUID = 1938670911753068875L;
	
	JPanel panel1;
	JScrollPane spane1;
	
	public Beispiel1(){
		initComponents();
	}
	
	public void initComponents(){
		this.setLayout(null);
		this.setSize(700,835);
        this.setLocationRelativeTo(null);
        this.setResizable(false);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
           
        panel1 = new JPanel();
        panel1.setSize(this.getSize());
        panel1.setPreferredSize(new Dimension(panel1.getWidth() + 40, panel1.getHeight()));
        panel1.setLocation(0,0);
        
        doExample(panel1);
        
        panel1.setPreferredSize(panel1.getSize());
        
        spane1 = new JScrollPane(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        spane1.setViewportView(panel1);
		spane1.getVerticalScrollBar().setUnitIncrement(10);
		spane1.getHorizontalScrollBar().setUnitIncrement(10);
		spane1.setSize(this.getSize());
        
        this.add(spane1);
		
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
	}
	
	public void doExample(JPanel panel){
			ArrayList<String> stupid = new ArrayList<String>();
			String bsp1 = "Hallo";
			
			fillArrayList(stupid,bsp1);
			
			int start_x = 5;
			int start_y = 5;
			
			panel.setLayout(null);
			
			for (int i = 0; i < stupid.size(); i++) {
				JLabel temp = new JLabel(stupid.get(i));
				JScrollPane stemp = new JScrollPane(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
				JTextArea ttemp = new JTextArea(5, 30);

				ttemp.setLineWrap(true);
				ttemp.setWrapStyleWord(true);
				stemp.setViewportView(ttemp);

				temp.setBounds(start_x, start_y, (int) temp	.getPreferredSize().getWidth(), (int) temp.getPreferredSize().getHeight());
				start_y += (temp.getHeight() + 10);
				stemp.setBounds(start_x, start_y, (int) ttemp.getPreferredSize().getWidth(), (int) ttemp.getPreferredSize().getHeight());
				start_y += (stemp.getHeight() + 30);

				ttemp.setPreferredSize(ttemp.getSize());
				panel.add(temp);
				panel.add(stemp);
			}
	}
	
	public void fillArrayList(ArrayList<String> list, String text){
		for(int i = 0; i < 10;i++){
			list.add(text);
		}
	}
	
	public static void main(String[] args) {
		Beispiel1 gui1 = new Beispiel1();
	}
	
}

Danke, MfG
 
Du benutzt das Null-Layout und wunderst dich, dass es nicht geht? Der ist echt gut.
Du setzt die Pref Size der JTextAreas auf die Größe der JScrollPanes und wunderst dich, dass er dich nicht sonderlich weit scrollen lässt? Der ist noch besser.

Das Fenster hat btw. nicht ganz in meinen Bildschirm gepasst. Benutz doch pack(). Ach, geht ja nicht. :lol:
 
@Volvagia, wie man eine ScrollPane positioniert ist eigentlich völlig egal und hat auch nichts mit dem was IN der ScrollPane passiert.

@TO, wie auch schon im Chat:
Code:
ttemp.setPreferredSize(ttemp.getSize());
muss weg.
 
Sagte ja, dass er die Pref. Size auf die Größe des ScrollPanels setzt und deshalb nicht scrollen kann. (Zumindest nicht sonderlich weit)

Es ging mir ja nicht darum, wie sie positioniert werden (abgesehen davon, dass das Fenster für meine Auflösung wirklich zu groß war) sondern, dass der LayoutManager nicht nur etwas ist, das schnell mal ein paar Komponenten auf dem Parent kleistert sondern (auch wenn es nicht sehr viel mehr ist) auch die Preferred Size zurückgibt. Die wird auf einen Null-Layout-Programm nicht sonderlich oft gebraucht, aber in einen JScrollPane ist sie wichtig. In dem Fall war es der Fehler, dass er sie überhaupt gesetzt hat und damit die PrefSize der TextArea überschrieben hat. Anderstrum muss er aber eine PrefSize setzen, falls der Komponent der scrollbar gemacht werden soll das Null-Layout hat. (Vermutlich ein JPanel.) Noch schlimmer wird es, falls auf diesen JPanel Komponenten geändert, hinzugefügt oder entfernt werden soll. Deshalb wollte ich ihm auf meine (leider nicht immer direkte und aufschlussreiche) Art sagen, dass das nicht allzulange gut gehen wird.
Imho sind mit Null-Layout JScrollPanes die am schwersten zu managenden Komponenten überhaupt. (Nicht, dass ich es benutzen würde.)
 
Zuletzt bearbeitet:
Du benutzt das Null-Layout und wunderst dich, dass es nicht geht? Der ist echt gut.
Du setzt die Pref Size der JTextAreas auf die Größe der JScrollPanes und wunderst dich, dass er dich nicht sonderlich weit scrollen lässt? Der ist noch besser.

Das Fenster hat btw. nicht ganz in meinen Bildschirm gepasst. Benutz doch pack(). Ach, geht ja nicht. :lol:

Ich bevorzuge es keinen Layout-Manager zu verwenden, wenn die Applikation nur für mich gedacht ist. Erspart mir eine Menge Arbeit und das Layout ist dann auch wirklich so wie ich es möchte (bis du das im GridBagLayout hinkriegst bin ich mit der Applikation fertig).

@Volvagia, wie man eine ScrollPane positioniert ist eigentlich völlig egal und hat auch nichts mit dem was IN der ScrollPane passiert.

@TO, wie auch schon im Chat:
Code:
ttemp.setPreferredSize(ttemp.getSize());
muss weg.

Ich war vielleicht nicht mehr im Chat, sorry. Nachdem ich das KSKB gepostet habe erhielt ich längere Zeit keine Antwort mehr und ging dann raus. Klappt nun danke.

Sagte ja, dass er die Pref. Size auf die Größe des ScrollPanels setzt und deshalb nicht scrollen kann. (Zumindest nicht sonderlich weit)

Es ging mir ja nicht darum, wie sie positioniert werden (abgesehen davon, dass das Fenster für meine Auflösung wirklich zu groß war) sondern, dass der LayoutManager nicht nur etwas ist, das schnell mal ein paar Komponenten auf dem Parent kleistert sondern (auch wenn es nicht sehr viel mehr ist) auch die Preferred Size zurückgibt. Die wird auf einen Null-Layout-Programm nicht sonderlich oft gebraucht, aber in einen JScrollPane ist sie wichtig. In dem Fall war es der Fehler, dass er sie überhaupt gesetzt hat und damit die PrefSize der TextArea überschrieben hat. Anderstrum muss er aber eine PrefSize setzen, falls der Komponent der scrollbar gemacht werden soll das Null-Layout hat. (Vermutlich ein JPanel.) Noch schlimmer wird es, falls auf diesen JPanel Komponenten geändert, hinzugefügt oder entfernt werden soll. Deshalb wollte ich ihm auf meine (leider nicht immer direkte und aufschlussreiche) Art sagen, dass das nicht allzulange gut gehen wird.
Imho sind mit Null-Layout JScrollPanes die am schwersten zu managenden Komponenten überhaupt. (Nicht, dass ich es benutzen würde.)

Die Applikation ist fertig also ging alles noch gut. Ich bin es von Web-Auftritten her gewöhnt ohne etwas wie den Layout-Manager zu arbeiten und es fällt mir auch leichter, weil das bei einem Layout-Manager manchmal Jahre dauern kann, bis man das gewünschte Resultat hat.
 

Neue Themen


Zurück
Oben