# JFrame



## SirWayne (14. Mai 2007)

Hallo,

ich haben ein JFrame (1024 * 768) wenn ich dieses JFrame starte und selber kleiner ziehe ,welche Methode wird dann ausgeführt?
Und kann man auf ein JFrame eine ScrollPane adden?Da wenn ich das JFrame kleiner mache ich jedes mal meine Panles anpassen muss... Mit einer Scrollpane wäre alles dynamischDanke


----------



## MeinerEiner_80 (14. Mai 2007)

> Hallo,
> ich haben ein JFrame (1024 * 768) wenn ich dieses JFrame starte und selber kleiner ziehe ,welche Methode wird dann ausgeführt?


ComponentListener.componentResized(ComponentEvent e)



> Und kann man auf ein JFrame eine ScrollPane adden?Da wenn ich das JFrame kleiner mache ich jedes mal meine Panles anpassen muss... Mit einer Scrollpane wäre alles dynamischDanke



Nutze einen LayoutManager. Diese sind nämlich u.a. genau für sowas gedacht:
http://java.sun.com/j2se/1.4.2/docs/api/java/awt/LayoutManager.html
http://java.sun.com/docs/books/tutorial/uiswing/layout/using.html


*grüssle*
MeinerEiner


----------



## SirWayne (14. Mai 2007)

Danke das 1. hat funktioniert.
Meine Layouts sind alle null und ich hab die Location meiner Componenten alle selber gesetzt... Wenn ich mein Frame beliebig klein ziehe werden meine Komponenten einfach ausgeblendet(was ja logisch ist) aber wenn ich eine Scrollpane habe müsste ich diesen effekt ja umgehen können... wenn ich meine Felder jedes mal neu berechne und mit dem manager dynamisch mache hängen sie irgendwann alle mal aufeinander drauf


----------



## zerix (14. Mai 2007)

Hallo,

du könntest in deinem JFrame einen anderen LayoutManager wählen (z.b. BorderLayout, GridLayout). Deine Ganzen Elemente packst du in ein JPanel, genau so wie du es gerade auf im JFrame machst. Dieses JLabel fügst du dann der ScrollPane hinzu. So müsste es funktionieren ohne Berechnungen.

Mir stellt sich aber eine Frage. Warum willst du es so komliziert machen, wenn es mit LayoutManager wesentlich einfacher geht

MFG

zEriX


----------



## SirWayne (14. Mai 2007)

warum sollte es mit dem LayoutManager leichter gehen?
ja ich nehm mein JFrame mit einem BorderLayout und versuch es mal damit
mein problem besteht ja nur darin dass wenn ich mein frame kleiner mache(per hand) das dann meine feler weg sind, da kann mir der layoutmanager auch nicht weiterhelfen oder ich hab was falsch verstanden


----------



## Kulabac (14. Mai 2007)

Naja, ein Layout-Manager passt die Größer deiner Komponenten dynamisch an. Natürlich kannst du festlegen was wie angepasst werden soll (Höhe, Breite, überhaupt, je nach Layoutmanager), aber es besteht beispielsweise die Möglichkeit einen Button immer so groß wie das Frame zu machen, egal wie groß es ist (ist jetzt ein schlechtes Beispiel). Und natürlich brauchst du auch weiterhin ein JScrollPane, falls du das Fenster so klein machst, dass deine Komponenten auch mit minimaler Größe nicht mehr reinpassen.


----------



## zerix (14. Mai 2007)

Wenn was auf den Pixel genau positionieren möchtest, dann solltest du das Null-Layout wählen, aber nur für die Komponente auf der sich die anderen Komponenten befinden und nicht für alles. Wenn du alles komplett mit dem Null-Layout machen willst, hast du die Probleme die du jetzt hast.

Wenn du jetzt alle Elemente positioniert hast und jemand zieht das Fenster größer, dann bleiben deine Elemente wo sie sind und das kann auch sehr blöd aussehen, besonders wenn das Fenster viel größer gezogen wird.

Bei einem LayoutManager hast du diese Probleme nicht, weil sich da alles neu anpasst und die Größe neu zugordnet wird. Mit setMinimumSize, setMaximumSize und setPreferedSize kannst du bestimmen wie klein ein , wie groß es maximal und wie groß es normal ist(falls möglich) ein Element sein darf.

MFG
zEriX


----------



## SirWayne (14. Mai 2007)

mhm ja dasist mir bewusst dass ich meine Komponeten so groß machen kann wie mein frame egal wie groß es istaber soviel ich weiß kann ich doch nur setPreferredSize und setMinSize eingeben!dadurch ist es dynamisch ...ok aber wie gesagt wenn mein frame irgendwann zu klein ist sollte ich scrollen können... leider klappt das nicht


----------



## SirWayne (14. Mai 2007)

also ich hab ein Borderlayout verwendet was mein Problem nicht gelöst hat ,wenn ich mein frame kleine ziehe werden die irgendwann nimmer angezeigt...eigentlich sollte es so funktionieren wie beim inet explorer wenn man oben auf die leiste doppelt klickt wird das fesnter kleiner und wird schön mit 2 scrollpans angezeigt


----------



## flashray (14. Mai 2007)

Hallo SirWayne,

schau mal hier:
http://www.exampledepot.com/egs/javax.swing/pkg.html#JScrollPane
http://www.galileocomputing.de/open...14_016.htm#mjae195fa969346d98709dc3bb022f3cc0
http://java.sun.com/docs/books/tutorial/uiswing/components/scrollpane.html
http://www.tutorials.de/forum/java/272940-jpanel-mit-jscollpane.html

Vg Erdal


----------



## SirWayne (14. Mai 2007)

ja ich weiß aber es zeigt meine Scrollpane einfach nichtso sieht mein prinzip aus
JFrame ---> add JScrollpane(panel)


----------



## flashray (14. Mai 2007)

Hallo,

ja und wo ist das Problem. Du erstellst ein JPanel mit NullLayout das deine Komponenten beinhaltet. Setzt die Größe vom Panel. Jetzt addest du das ScrollPane dem Frame und dem ScrollPane gibt es du das Panel als Argument.

JScrollPane s;
myFrame.add(s = new JScrollPane(myPanel));
s.setPreferredSize(...);


Vg Erdal


----------



## SirWayne (14. Mai 2007)

```
public void componentResized(ComponentEvent e) 
	{
	panel=new MEDButtonPanel(getContentPane());
	panel.setPreferredSize(MEDSizeManager.getBildschirmSize());
höhe=1024 breite=1280
	sp = new JScrollPane(panel);
	sp.setSize(new Dimension(e.getComponent().getSize().width,e.getComponent().getSize().height));
höhne=600 breite =600
	super.add(sp);
	}
```


----------



## SirWayne (14. Mai 2007)

ja also mein problem wenn ich das mein JFrame kleiner mache zeigt er meine Scrollpane nicht mehr an gerade da wird es ja wichtig aber ich weiß nicht warum ich berechne ja alles neu!!mich bringt des ding noch um den verstand ich mein wenn es sogar microsoft mit ihrem i-net explorer hinbekommen


----------



## flashray (14. Mai 2007)

Hallo,

schau mal hier:

```
import java.awt.Color;
import java.awt.Dimension;

import javax.swing.*;

public class ScrollPaneExample extends JFrame {

	public ScrollPaneExample() {
		super("ScrollPane Example");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setLocationByPlatform(true);

		JButton b1 = new JButton("Button1");
		JButton b2 = new JButton("Button2");
		JButton b3 = new JButton("Button3");

		b1.setBounds(30, 30, 100, 50);
		b2.setBounds(130, 130, 100, 50);
		b3.setBounds(230, 230, 100, 50);

		JPanel panel = new JPanel();
		panel.setPreferredSize(new Dimension(500, 500));
		panel.setLayout(null);
		panel.setBackground(Color.BLUE);

		panel.add(b1);
		panel.add(b2);
		panel.add(b3);

		JScrollPane s = new JScrollPane(panel);
		s.setPreferredSize(new Dimension(400, 400));

		this.add(s);

		this.pack();
		this.setVisible(true);
	}

	public static void main(String[] args) {
		new ScrollPaneExample();
	}
}
```


Vg Erdal


----------



## SirWayne (15. Mai 2007)

vielen dank!!keine ahnung hatte einen hänger keine ahnung warum ich so um ecken gedacht hab


----------



## zerix (15. Mai 2007)

Der Quelltext sagt im ungefähr das aus, was ich versucht hab dir zu erklären. 

Vielleicht hatte ich mich nur etwas unklar ausgedrückt.

MFG

zEriX


----------

