2 Scrollbalken

anonym_

Grünschnabel
Hallo, da ich keine Ahnung habe wo der Fehler liegt muss ich wohl ein neues Thema erstellen.
Ich habe ein JEditorpane mit einen Scrollbalken das funktioniert auch soweit.
Das ganze soll nun auf ein weiteren panel, mit einen weiteren Scrollbalken, das Problem ist aber das dieser schlichtweg nicht angezeigt wird und ich keine Ahnung habe wo der Fehler liegt.

Java:
JFrame frame = new JFrame();
JPanel panel = new JPanel();
JPanel grundpanel = new JPanel();
JLabel label = new JLabel("         Termine:");
label.setFont(new Font("Serif", Font.PLAIN, 36));
JEditorPane text = new JEditorPane();
text.setPreferredSize(new Dimension(400, 500));



		JScrollPane scroller = new JScrollPane(text);
		scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		panel.add(scroller);


		JScrollPane grundscroller = new JScrollPane(panel);
		grundscroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		grundscroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
		grundpanel.add(grundscroller);



		grundpanel.setLayout(new BorderLayout());
		grundpanel.add(BorderLayout.CENTER, panel);
		grundpanel.add(BorderLayout.NORTH, label);

		frame.add(grundpanel);
		frame.setSize(750, 750);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Danke schonmal im vorraus :)
 
Zuletzt bearbeitet:
Hallo und Willkommen im Tut.de-Forum

Das was du da gemacht hast sieht ja ganz schön böse aus.

Es würde auch nichts nützen wenn du zum Testen die HorizontalScrollBarPolicy von scroller auf ALWAYS stellen würdest ... der Effekt wäre ja der selbe.
Auch machst du dir den Code umständlich länger und in-performanter ... man kann die Policies auch dierekt dem Konstruktor übergeben.

Was du hier allerdings versuchst ist mir nicht ganz klar.
Du erzeugst ein inneres JScollPane , setzt dessen Viewport auf ein JLabel und packst dieses dann auf ein JPanel. Dann erzeugst du ein äußeres JScrollPane , setzt dessen Viewport auf das innere und bannst dieses dann ebenfalls wieder auf ein JPanel.

Was ich daran gerade üerhaupt nicht verstehe : warum sperrst du die JScrollPane in einem JPanel ein ? Das ist absolut unnötig. Auch ist das Setzen des Viewports auf eine Low-Level-Component nicht gerade sinnvoll.

JScollPane sind eigentlich gedacht um Container aufzunehmen deren benötigte Größe größer ist als der Top-Level-Container ist. Daher ist es schon mal falsch das du den Viewport auf ein JLabel legst. *In bestimmten Ausnahmesituationen mag das legitim sein ... aber nicht so wie du es verwendest.* Auch ist die vorgehensweise das JScrollPane in ein JPanel zu adden falsch. Das JScrollPane ist eben so ein Container wie das JPanel und daher auf der selben Ebene. Die einzig sinnvolle Verbindung dieser beiden Container besteht darin das der Viewport des JScollPane auf das JPanel gelegt wird um es in einem Top-Level-Container vollständig darstellen zu können dessen Größe kleiner ist als die das JPanel.

Das von dem einen JScrollPane überhaupt nichts angezeigt wird liegt daran das es vermutlich irgendwie verschluckt wird.

Mache dir also bitte erstmal gedanken was genau du mit einem JScrollPane "scrollbar" machen willst und überlege dir dann ob das überhaupt sinnvoll ist.

Vielleicht wäre auch eine Beschreibung was genau du eigentlich haben willst nicht schlecht anstatt lediglich zu sagen das irgendwas eben nicht so ist wie du es willst.
 
ok also erst mal vielen vielen dank für die schnelle und vor allem ausführliche Antwort, ich habe jetzt den Code nochmal neu geschrieben und jetzt hat sich das Problem gelöst
 
Wärst du dann auch so fair und würdest den nun funktionierende Code posten damit auch andere was davon haben ? Die schlichte Info : habe es neu geschrieben -> jetzt geht es ... das hättest du dir klemmen können.
 
Ja das hab ich ganz vergessen, ich sollte echt mal öfter vorbeischauen.


Java:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridBagLayout;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.ScrollPaneConstants;

public class d {
JTextPane eingehend;
	public d() {
        ImageIcon skat = new ImageIcon("C:/Users/Elke/Pictures/2011-09-05/012.JPG");
        JLabel linkeslabel = new JLabel();
       JFrame frame = new JFrame();
       frame.setSize(1000, 800);
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       frame.setVisible(true);     
       linkeslabel = new JLabel(skat);
       JPanel grundpanel = new JPanel();
       eingehend = new JTextPane();
       // scrollbar von texteditorpane
       JScrollPane scroller = new JScrollPane(eingehend);
       scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
       scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
       scroller.setPreferredSize(new Dimension(500,500));
       linkeslabel.setLayout(new GridBagLayout());
       linkeslabel.add(scroller);
       String[] listEntries ={"Hans","Peter"};
       JList liste = new JList(listEntries);
        //scrollbar von liste
       JScrollPane listenscroller = new JScrollPane(liste);
       listenscroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
       listenscroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
       listenscroller.setPreferredSize(new Dimension(500,500));
       linkeslabel.add(listenscroller);
   
       //grundscroller
   JScrollPane grundscroller = new JScrollPane(linkeslabel);
   grundscroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
   grundscroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
   grundscroller.setPreferredSize(new Dimension(500,500));
   
   grundpanel.setLayout(new BorderLayout());
   grundpanel.add(BorderLayout.CENTER, grundscroller); 
   
   frame.add(grundpanel);
   }
	public static void main(String[] args) {
		new d();

	}

}
 
Zuletzt bearbeitet von einem Moderator:
Zurück