Scrollbar

guguli

Bekanntes Mitglied
Hallo zusammen,

Ich möchte eine GUI erstellen, die an der Seite Rechts und unten einen Scrollbar hat. Kann mir einer dabei helfen???

also ich habe eine Methode, mit der ich neue Labels unter einandern erstellen kann. Irgendwann ist ja anzahl der labels Mehr als das Fenster groß ist, dann will ich ein Scrollbar an der Seite erscheint wenn das der Fall ist. Kann mir einer Bitte dabei Helfen ????
 

guguli

Bekanntes Mitglied
Hi,
ich kenne diese Seite, hab ich mir ma durch gelesen, aber ich bin nicht so ganz schlau draus geworden.
Also ich erstelle meine Labels dynamisch:

Java:
public void createLabel(ArrayList<String> a){
		int x=0,y=0, Breite =1000,Höhe=50;
		if(labels==null){
			labels = new JLabel[DataRead.längeDesArrays];
		}
	
		for(int i = 0; i<a.size();i++){
			labels[i] = new JLabel (a.get(i));
			labels[i].setBounds(x, y, Breite , Höhe);
			getContentPane().add(panel);
			panel.add(labels[i]);	
			y+=20;
		
		}
		
	}
Nun will ich da irgendwie die Scrollbar einbinden :(

THX
 

ssoul26

Bekanntes Mitglied
Hi,
ich kenne diese Seite, hab ich mir ma durch gelesen, aber ich bin nicht so ganz schlau draus geworden.
Also ich erstelle meine Labels dynamisch:

Java:
public void createLabel(ArrayList<String> a){
		int x=0,y=0, Breite =1000,Höhe=50;
		if(labels==null){
			labels = new JLabel[DataRead.längeDesArrays];
		}
	
		for(int i = 0; i<a.size();i++){
			labels[i] = new JLabel (a.get(i));
			labels[i].setBounds(x, y, Breite , Höhe);
			getContentPane().add(panel);
			panel.add(labels[i]);	
			y+=20;
		
		}
		
	}
Nun will ich da irgendwie die Scrollbar einbinden :(

THX

Das Scrollpanel ist ein Container. Das heisst, dass du im einen anderen Untercontainer übergeben musst.


Bsp.:

Java:
   public JScrollPane getScrollPanel(int amount) {
      // Panel erstellen, welches die Label aufnimmt.
      // Übergebe gleich Layout als Gridlayout mit. Beliebige Zeilen (0) aber nur eine
      // Spalte(1)
      JPanel temp = new JPanel(new GridLayout(0, 1));
      // Bestimmte Anzahl an Label erstellen
      for (int i = 0; i < amount; i++) {
         JLabel lab = new JLabel("Label : " + i);
         temp.add(lab);
      }
      // Scrollpane initialisieren mit Panel als Parameter
      JScrollPane sp = new JScrollPane(temp);
      // Gebe die Scrollpane nun zurück.
      return sp;
   }
 

guguli

Bekanntes Mitglied
Hi, ich hab das jetzt so gemacht aber, die labels werden nicht mehr angezeigt :(

Java:
public class Gui extends JFrame {

	
	private static final long serialVersionUID = 1L;
	
	int x=0, y=0, width=800, height = 600;
	
	static JLabel labels[] = null;
	static JTextField valueEingabe[] = null;
	JPanel panel = new JPanel(new GridLayout(0, 2));


	public static ArrayList<String> parameterArray = DataRead.getParameterArray();
	public static ArrayList<String> valueArray = DataRead.getValueArray();
	

	public Gui(){

	    panel.setLayout(null);
		Toolkit tk = Toolkit.getDefaultToolkit();
		Dimension dim = tk.getScreenSize();
		
		x = (int) ((dim.getWidth()-width)/2);
		y = (int) ((dim.getHeight()-height)/2);
		
		setTitle("GUI");
		setBounds(0, 0, 800, 600);

		this.getScrollPanel();

        
		this.setVisible(true);
	}
	

	public JScrollPane getScrollPanel(){
		
		
		
		this.createLabel(parameterArray);
		this.createTextField(valueArray);
		
		JScrollPane sp = new JScrollPane(panel);
		
		return sp;
	}
	
	public void createLabel(ArrayList<String> a){
		int x=0,y=0, Breite =1000,Höhe=50;
		if(labels==null){
			labels = new JLabel[DataRead.längeDesArrays];
		}
	
		for(int i = 0; i<a.size();i++){
			labels[i] = new JLabel (a.get(i));
			labels[i].setBounds(x, y, Breite , Höhe);
			getContentPane().add(panel);
			panel.add(labels[i]);	
			y+=20;
		
		}
		
	}
	
	public void createTextField(ArrayList<String> valueArray){
		int x=150,y=35, Breite =200,Höhe=20;
		if(valueEingabe==null){
			valueEingabe = new JTextField[DataRead.längeDesArrays];
		}
		for(int i = 0; i<valueArray.size();i++){
			valueEingabe[i] = new JTextField(valueArray.get(i));
			valueEingabe[i].setBounds(x, y, Breite , Höhe);
			getContentPane().add(panel);
			panel.add(valueEingabe[i]);
			y+=20;
			
		}
	}

	public static void main(String[] args) {
		DataRead.reader();
		new Gui();
		
	}

}
kannste mir sagen wo mein Fehler ist

THX
 

guguli

Bekanntes Mitglied
Also ich hab das Gefühl das hat irgendwie mit
Java:
panel.setLayout(null);
zutun.
wenn ich diese Zeile auskommentiere und den code so ändere dann kommt das was ich will aber leider nur hinter einandern, und nicht unter einandern :(
Java:
public class Gui extends JFrame {

	
	private static final long serialVersionUID = 1L;	
	int x=0, y=0, width=800, height = 600;

	static JLabel labels[] = null;
	static JTextField valueEingabe[] = null;
	static JPanel panel = new JPanel();

	public static ArrayList<String> parameterArray = DataRead.getParameterArray();
	public static ArrayList<String> valueArray = DataRead.getValueArray();

	public Gui(){

		JDialog meinJDialog = new JDialog();
	 //   panel.setLayout(null);
		Toolkit tk = Toolkit.getDefaultToolkit();
		Dimension dim = tk.getScreenSize();
		
		x = (int) ((dim.getWidth()-width)/2);
		y = (int) ((dim.getHeight()-height)/2);
		
		meinJDialog.setTitle("GUI");
		meinJDialog.setBounds(0, 0, 800, 600);

		this.createLabel(parameterArray);

		 JScrollPane scrollPane = new JScrollPane (panel, 
		            ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
		            ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);

		        // JScrollPane wird dem Dialog hinzugefügt
		        meinJDialog.add(scrollPane);
		        // Wir lassen unseren Dialog anzeigen
		        meinJDialog.setVisible(true);
	
	}
	
	public  void createLabel(ArrayList<String> a){
		int x=0,y=0, Breite =1000,Höhe=50;
		if(labels==null){
			labels = new JLabel[DataRead.längeDesArrays];
		}
	
		for(int i = 0; i<a.size();i++){
			labels[i] = new JLabel (a.get(i));
			labels[i].setBounds(x, y, Breite , Höhe);
//			getContentPane().add(panel);
			panel.add(labels[i]);	
			y+=20;
		
		}
		
	}
	


	public static void main(String[] args) {
		DataRead.reader();
		new Gui();
	     
	}

}
 

kaoZ

Top Contributor
setz mal ein
Code:
BoxLayout();
[WR]null-Layouts are Evil :hihi:[/WR]

Das Problem ist das du bei einem Null-Layout sämtliche bounds für alle Komponenten Setzen musst, und da sich dein Panel in einem ScrollPane befindet und wird das nix. da du ja dem Panel eine Feste Größe zuweisen müsstest.

[EDIT]
Zum Verständnis :
[/EDIT]

wenn du
Code:
meinPanel.setLayout(null);
aufrufst, also keine LayoutManager verwendest, bekommt das Panel automatisch folgende Größe

Code:
0,0,0,0

Sicher könntest du jetzt mit
Code:
.setSize();
oder
Code:
.setPrefferedSize();
arbeiten , aber was würde dann die ScrollPane für einen Sinn machen ?

Bedeutet es wird nix angezeigt, und du müsstest über
Code:
setBounds(int x, int y, int b, int h);
erst festlegen wo , und wie das Panel angezeigt wird.

[TIPP]Zudem solltest du für sowas
Java:
int x=0, y=0, width=800, height = 600;

Kostanten verwenden :

Java:
final static int GUI_WIDTH = 800, GUI_HEIGHT = 600;
[/TIPP]

Oder besser noch bei einem Maximiertem Frame, um das Ganze flexibel und nicht so statisch zu gestalten.

Java:
final static int GUI_WIDTH = (int) Toolkit.getDefaultToolkit().getSreenSize().getWidth();
 
Zuletzt bearbeitet:

guguli

Bekanntes Mitglied
danke für die Antwort ich hab das folgendermaßen geändert.

Java:
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

nun bekomme ich alles in einer spalte. wie kann ich denn das so ändere, dass ich selbst die Position der Labels bestimmen kann??
also ich möchte die Labels in einer spalte haben und in der Zweiten spalte Texfields.


THX
 

kaoZ

Top Contributor
Wenn du 2 Spalten haben möchstest musst du ein anders Layout verwenden, in deinem Fall höchstwahrscheinlich ein Grid(Bag)Layout();

ich vermute mal du möchtest es folgendermaßen aufbauen ?

Java:
-------Scrollpane--------

   -------Panel------

  Text -------- Textfeld
  Text -------- Textfeld



  -------------------
-------------------------

Entweder du verwendest das
Code:
GridLayout();

welches es dir ermöglicht ähnlich einer Tabelle zu formatieren

oder das noch etwas Komplexere
Code:
GridBagLayout();
in welchem du über/mit
Code:
GridBagConstraints();
auch mehrzeilige Elemente ermöglichen kannst

am besten du schaust mal hier :

Layoutmanger Guide
 
Zuletzt bearbeitet:

guguli

Bekanntes Mitglied
Also ich lese zuerst eine txt datei und speichere die Informationen aus dieser Datei dann möchte ich die GUI erstellen. diese Datei hat bestimmte bereiche, die mehrere Labels und dazugehörige Textfields haben.
Also die Spalten werden dann dynamisch erstellt.

Es könnte dann beispielsweise so aussehen:
Java:
bereich 1........    bereich2........    .....
label---textfield   label---textfield
label---textfield   label---textfield
.                         .
.                         .
.                         .
 

kaoZ

Top Contributor
Es könnte dann beispielsweise so aussehen:
Java:
bereich 1........    bereich2........    .....
label---textfield   label---textfield
label---textfield   label---textfield
.                         .
.                         .
.                         .

Soll sich denn dann bereich 1 und 2 nebeneinander in dem Scrollpane befinden ?

du könntest ein GridLayout verwenden ( welches deine Bereiche enthält) und diesen dann jeweils ein weiteres panel mit Gridlayout zuweisen welches die Bereiche darstellt.

Quasi:

Java:
----------Scrollpane---------

   -----Panel(GridLayout)----

---panel(GL)---  ---panel(GL)----

   label---txt     label---txt

[TIPP]Allgemein in SWING ist es so das du komplexe , oder überhaupt Layouts designen kannst indem du einfach mehrere Panel, mit verschiedenen Layoutmanagern einfach verschachtelst.[/TIPP]
 
Zuletzt bearbeitet:

guguli

Bekanntes Mitglied
Hi,

Ja ich hab Gridlayout benutzt und es funktioniert ganz ok, aber ein Problem hab ich noch.

Der Code sieht so aus:
Java:
public class Gui  {

	
//	private static final long serialVersionUID = 1L;	
	int x=0, y=0, width=800, height = 600;

	static JLabel labels[] = null;
	static JTextField valueEingabe[] = null;
	static JPanel panel = new JPanel();
	static JPanel panel2 = new JPanel();
	static JPanel panel3 = new JPanel();
	static GridLayout gridLayout = new GridLayout(0,2);
	static BoxLayout boxLayout = new BoxLayout(panel, BoxLayout.X_AXIS);

	public static ArrayList<String> parameterArray = DataRead.getParameterArray();
	public static ArrayList<String> valueArray = DataRead.getValueArray();

	public Gui(){

		JDialog meinJDialog = new JDialog();
		
	    panel2.setLayout(gridLayout);
	    panel3.setLayout(gridLayout);
		panel.setLayout(boxLayout);
		
		this.createLabel(panel2, parameterArray, valueArray);
		this.createLabel(panel3, parameterArray, valueArray);
		
		panel.add(panel2);
		panel.add(panel3);
		
		Toolkit tk = Toolkit.getDefaultToolkit();
		Dimension dim = tk.getScreenSize();
		
		x = (int) ((dim.getWidth()-width)/2);
		y = (int) ((dim.getHeight()-height)/2);
		
		meinJDialog.setTitle("GUI");
		meinJDialog.setBounds(0, 0, 800, 600);

		
		 JScrollPane scrollPane = new JScrollPane (panel, 
		            ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
		            ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);

//		        // JScrollPane wird dem Dialog hinzugefügt
		 meinJDialog.add(scrollPane);
//		        // Wir lassen unseren Dialog anzeigen
		 meinJDialog.setVisible(true);

	}
	
	public  void createLabel(JPanel panel_to_add, ArrayList<String> a, ArrayList<String> valueArray){

		if(labels==null){
			labels = new JLabel[DataRead.längeDesArrays];
		}
		if(valueEingabe==null){
			valueEingabe = new JTextField[DataRead.längeDesArrays];
		}
		for(int i = 0; i<a.size();i++){
			labels[i] = new JLabel (a.get(i), JLabel.TRAILING);
			valueEingabe[i] = new JTextField(valueArray.get(i));
			labels[i].setSize(200, 20);
			panel_to_add.add(labels[i]);
			panel_to_add.add(valueEingabe[i]);
		}
		
	}


	public static void main(String[] args) {
		DataRead.reader();
		new Gui();
	     
	}
}

Das problem ist, dass der Label size genau so groß ist wie textfield size, wie kann ich das abändern.
Siehe das Bild:
 

Anhänge

  • Unbenannt.jpg
    Unbenannt.jpg
    101,8 KB · Aufrufe: 19

guguli

Bekanntes Mitglied
Also die Labels sollen links anfangen, und die textfields size soll halbiert sein.
So zu sagen, ich möchte die Size der labels und tetfield selbst einrichten.

THX
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Scrollbar funktioniert nicht AWT, Swing, JavaFX & SWT 10
CptK Ordentlicher Code & Panel ab bestimmter Komponentenzahl scrollbar machen AWT, Swing, JavaFX & SWT 12
ralfb1105 jTextArea Scrollbar hinzufügen - mit Jigloo erstellt AWT, Swing, JavaFX & SWT 7
G Wie Scrollbar einfügen? AWT, Swing, JavaFX & SWT 1
A Swing Panel mit ScrollBar AWT, Swing, JavaFX & SWT 7
M JavaFX TextArea disabled - ScrollBar enabled AWT, Swing, JavaFX & SWT 3
H JavaFX Abstand rechts zur scrollbar AWT, Swing, JavaFX & SWT 1
I Swing Scrollbar AWT, Swing, JavaFX & SWT 2
W Scrollbar in Registerkarte AWT, Swing, JavaFX & SWT 1
M eigene horizontale Scrollbar AWT, Swing, JavaFX & SWT 1
M JTable horizontale scrollbar löschen AWT, Swing, JavaFX & SWT 3
G Scrollbar für das Fenster einfügen AWT, Swing, JavaFX & SWT 3
M Swing JTextArea mit ScrollBar AWT, Swing, JavaFX & SWT 9
A JScrollPane - ScrollBar Buttongröße verändern AWT, Swing, JavaFX & SWT 1
A Scrollbar gestalten AWT, Swing, JavaFX & SWT 2
E JavaFX ScrollBar in TableView bei Column Resize AWT, Swing, JavaFX & SWT 2
T Swing JScrollPane Farbe der Scrollbar AWT, Swing, JavaFX & SWT 3
B Export eines Panel mit ScrollBar AWT, Swing, JavaFX & SWT 4
5 Scrollbar AWT, Swing, JavaFX & SWT 4
M Swing JTextPane + Scrollbar = Fragen AWT, Swing, JavaFX & SWT 15
H Swing JTextPane hat unästhetisches Scrollbar AWT, Swing, JavaFX & SWT 3
M Horizontal Scrollbar wird ignoriert AWT, Swing, JavaFX & SWT 10
M Swing Scrollbar im JFrame (JPanel?) AWT, Swing, JavaFX & SWT 6
W jTable Scrollbar Problem AWT, Swing, JavaFX & SWT 2
A Swing JPanel in JScrollBar scrollbar machen AWT, Swing, JavaFX & SWT 4
M SWT Table disabled und Scrollbar enabled AWT, Swing, JavaFX & SWT 11
P Scrollbar JTextArea AWT, Swing, JavaFX & SWT 23
S SWT GridLayout scrollbar machen? AWT, Swing, JavaFX & SWT 7
0 2D-Grafik Screenshot von ScrollBar-Inhalt AWT, Swing, JavaFX & SWT 2
D JList Scrollbar machen geht nicht AWT, Swing, JavaFX & SWT 4
D Scrollbar für Tabelle AWT, Swing, JavaFX & SWT 2
J Beliebtes Problem: Scrollbar in JTextArea AWT, Swing, JavaFX & SWT 4
S SWT ScrollBar Bug AWT, Swing, JavaFX & SWT 5
B GridLayout und scrollbar AWT, Swing, JavaFX & SWT 5
L Scrollbar übermalt AWT, Swing, JavaFX & SWT 2
H JList in JScrollPane -> ScrollBar ans Ende setzen AWT, Swing, JavaFX & SWT 5
M SWT keine Scrollbar bei widgets.List und GridLayout AWT, Swing, JavaFX & SWT 2
N Swing JTable Überschrift ohen scrollbar? AWT, Swing, JavaFX & SWT 2
R Scrollbar nur ohne STRG AWT, Swing, JavaFX & SWT 4
D Swing Spaltenköpfe verschieben sich nicht mit, wenn man an horizontaler Scrollbar zieht AWT, Swing, JavaFX & SWT 9
A SWT Table hat keine Scrollbar AWT, Swing, JavaFX & SWT 12
P JTextbox mit Scrollbar AWT, Swing, JavaFX & SWT 6
Roumeo Swing jTable mit Scrollbar AWT, Swing, JavaFX & SWT 13
D Swing [Erledigt]Panel mit ScrollBar , anpassbare Größe AWT, Swing, JavaFX & SWT 15
velocity Swing JList Scrollbar passt sich an AWT, Swing, JavaFX & SWT 4
S Scrollbar in einem JTabbedPane AWT, Swing, JavaFX & SWT 4
slawaweis JXTreeTable, jede Spalte einzeln scrollbar machen? AWT, Swing, JavaFX & SWT 2
Spot84 scrollbar die linksbündig angezeigt wird nur anzeigen wenn sie gebraucht wird AWT, Swing, JavaFX & SWT 5
K Größe einer Scrollbar im Dialogfenster ändern AWT, Swing, JavaFX & SWT 2
S Seltsam: SWT Table zeigt keine Scrollbar an AWT, Swing, JavaFX & SWT 12
T JList ScrollBar AWT, Swing, JavaFX & SWT 2
T ScrollBar aus ScrollPane verstecken AWT, Swing, JavaFX & SWT 2
J JList ohne vertikale Scrollbar AWT, Swing, JavaFX & SWT 3
M Scrollbar anpassen (Position) AWT, Swing, JavaFX & SWT 6
T Scrollbar wird nicht angezeigt - aber warum? AWT, Swing, JavaFX & SWT 3
O ScrollBar.setValue(int value); ? AWT, Swing, JavaFX & SWT 3
A JTable Header + ScrollBar AWT, Swing, JavaFX & SWT 4
N eine Zeichnung scrollbar machen AWT, Swing, JavaFX & SWT 4
DeeDee0815 JDesktopPane scrollbar AWT, Swing, JavaFX & SWT 2
ModellbahnerTT Problem mit Scrollbar AWT, Swing, JavaFX & SWT 10
S JTextArea soll mit Scrollbar ausgestattet sein AWT, Swing, JavaFX & SWT 4
Tom299 JScrollPane(JTextArea) Scrollbar soll am Anfang stehen AWT, Swing, JavaFX & SWT 2
S ScrollBar, bitte helft mir! AWT, Swing, JavaFX & SWT 9
G ScrollBar mit Frame verbinden? AWT, Swing, JavaFX & SWT 8
G Scrollbar hinzufügen AWT, Swing, JavaFX & SWT 10
C Grafikkomponente und Scrollbar AWT, Swing, JavaFX & SWT 5
N Scrollbar zu einem Dialog hinzufügen AWT, Swing, JavaFX & SWT 4
M Scrollbar AWT, Swing, JavaFX & SWT 4
L scrollbar von rot nach greun AWT, Swing, JavaFX & SWT 2
L Mehrere Scrollbar objekte miteinander verbinden AWT, Swing, JavaFX & SWT 3
G Wieso wird meine Scrollbar nicht angezeigt? AWT, Swing, JavaFX & SWT 3
M Scrollbar AWT, Swing, JavaFX & SWT 1
W Rat zur GUI - Scrollbar (SWT) AWT, Swing, JavaFX & SWT 2
A SWT: Group Scrollbar machen. AWT, Swing, JavaFX & SWT 5
G Scrollbar größe regeln AWT, Swing, JavaFX & SWT 18
A vertikale Scrollbar AWT, Swing, JavaFX & SWT 6
lhein Breite der Scrollbar in einer Combobox ändern AWT, Swing, JavaFX & SWT 5
K Mouse Events der Scrollbar/pane AWT, Swing, JavaFX & SWT 2
S JTextArea mit Scrollbar,append Text mit Fokus? AWT, Swing, JavaFX & SWT 5
A Update von Frameinhalt und Scrollbar AWT, Swing, JavaFX & SWT 11
M JTextPane mit ScrollBar AWT, Swing, JavaFX & SWT 5
K Scrollbar funzt net :-/ AWT, Swing, JavaFX & SWT 4
T JScrollPane Scrollbar-Position AWT, Swing, JavaFX & SWT 2
R JScrollPane die ScrollBar manipulieren ? AWT, Swing, JavaFX & SWT 3
S keine ScrollBar AWT, Swing, JavaFX & SWT 15
lin Startposition einer ScrollBar AWT, Swing, JavaFX & SWT 2
S scrollbar AWT, Swing, JavaFX & SWT 2
D JList ohne Scrollbar-ich weiss es ist durchgelutscht,aber. AWT, Swing, JavaFX & SWT 3
G Bei JScrollpane statt Scrollbar eine Vorschau verwenden AWT, Swing, JavaFX & SWT 3
B einzelne Zellen scrollbar machen innerhalb einer Tabelle AWT, Swing, JavaFX & SWT 3
javasdann Vertical ScrollBar in JTable verfälscht anzeigen. AWT, Swing, JavaFX & SWT 12
D Scrollbar AWT, Swing, JavaFX & SWT 6
Student JTable - eine fixe Spalte, der Rest scrollbar AWT, Swing, JavaFX & SWT 18
P Scrollbar/Pane auch mit negativen x,y - Werten AWT, Swing, JavaFX & SWT 2
R Wert von ScrollBar ausgeben AWT, Swing, JavaFX & SWT 7
M Scrollbar: Scrollbalken versetzen AWT, Swing, JavaFX & SWT 2
L JTextArea Scrollbar-Problem! AWT, Swing, JavaFX & SWT 2
chik Scrollbar AWT, Swing, JavaFX & SWT 26
L Probleme mit Scrollbar und LayoutManager AWT, Swing, JavaFX & SWT 3
N 2 Fragen (zu binärem Suchen und Scrollbar) AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben