Brauche Layout Hilfe

Status
Nicht offen für weitere Antworten.

najjannaj

Aktives Mitglied
Hi,
ich möchte gerne folgendes Layout erstellen:


layout.gif


http://www.maep.de/layout.gif

wobei das Gelbe nur ein Label ist(ist auf der Zeichung fallsch gezeichnet)!
Kann mir da jemand ein Layout schreiben oder mir Zumindest einen Tip geben, welche Layouts und wie ich die Verwenden muss?? (http://java.sun.com/docs/books/tutorial/uiswing/layout/example-1dot4/index.html#GridBagLayoutDemo <-- hab ich schon gelesen bring tmich auch nicht weiter!)
Wäre für jeden erdenklichen Tip sehr Dankbar!
Vielen Dank auch schonmal im Vorraus!
Mit freundlichen Grüßen
najjannaj


----------------------------------
[schild=1 fontcolor=000000 shadowcolor=C0C0C0 shieldshadow=1]Java-Forum4Ever[/schild]
 
Hallo,

ich würde deine anzeige in mehrere jpanels unterteilen.

eine view (... extends jpanel) für oben (was auch immer albumtitle sein mag...)
eine view für das label und textArea (zusammengefasst mit gridlayout 1 spalte, 2 zeilen o. ä. geht auch mit borderlayout
center für label und south für textarea.... je nach geschmack..)
eine view für die buttons (die wiederum mit boxlayout oder flowlayout anordnen)

dann die 3 views zusammenpacken und in eine neue view zusammenfassen:
für diese nimm das borderlayout die oben .NORTH, die zusammengesetzte aus label und textfield in .CENTER und die Button .SOUTH....

damit erreichst du, dass der mittlere teil "dynamisch" ist. die buttons und der titel oben bleiben "fest".

wenn du das label wirklich scrollbar machen willst, dann baue nochmals eine eigene view mit scrollbar die eine jlabel beinhaltet.

musst a bisserl rumprobieren aba damit solltest du weiter kommen.

wenns probleme dann mit eventhandling gibt einfach nochma posten...
 
Und wie geht das im großen und ganzen?? So grundsüge weiß ich schon! Nur der rest fehlt 🙂 Wäre echt cool wenn ihr mir nochweiterhelfen würdet! Das Label will ich nicht mit ner Scrollbar machen! Das war keine Absicht! Falsches Visio Objekt!
Danke im Vorraus!
Mit freundlichen Grüßen
Jan
 
ufff, nagut, hier ein bisschen code..... achtung alles nich komplett und ohne gewähr..
geht sicher alles noch viel schöner und toller mit gridbaglayout, insets und weiß der geier was... -> wer zeit hat :wink:


also zuerst die view für die buttons....

Code:
public class ButtonView extends JPanel {

	private JButton button1;
	private JButton button2;
	
	private List listeners;
	
	public ButtonView() {
		listeners = new ArrayList();
		initControl();
	}

	/**
	 * 
	 */
	private void initControl() {
		FlowLayout layout = new FlowLayout();
		setLayout(layout);

		ButtonViewController controller = new ButtonViewController();
		
		button1 = new JButton("button1");
		button1.setActionCommand("actionbutton1");
		button1.addActionListener(controller);
		add(button1);
		
		button2 = new JButton("button2");
		button2.setActionCommand("actionbutton2");
		button2.addActionListener(controller);
		add(button2);

		//usw.
	}

.... // usw.

dann baust du eine für die "mitte".....

Code:
public class MiddleView extends JPanel {

	public MiddleView() {
		GridLayout layout = new GridLayout(2, 1);
		setLayout(layout);
		
		JLabel label = new JLabel();
		add(label);
		
		JTextArea area = new JTextArea(10,20);
		
		JPanel textAreaWithBorder = new JPanel();
		textAreaWithBorder.setBorder(new CompoundBorder(new TitledBorder(null,
                "Kommentar", TitledBorder.LEFT, TitledBorder.TOP), null));
		textAreaWithBorder.add(area);
		add(textAreaWithBorder);
	}

.... //usw.

}


eine für die überschrift... vielleicht kommt da ja irgendwann noch mehr rein

Code:
public class HeadView extends JPanel {

	public HeadView() {
		JLabel header = new JLabel("Ueberschrift");
		add(header);
	}
}


soooo, das ganze baust du ungefähr so zusammen...

Code:
public class MainView extends JPanel {


	public MainView() {
		HeadView head = new HeadView();
		MiddleView middle = new MiddleView(); 
		ButtonView buttons = new ButtonView();
		
		BorderLayout layout = new BorderLayout();
		setLayout(layout);
		add(head, BorderLayout.NORTH);
		add(middle, BorderLayout.CENTER);
		add(buttons, BorderLayout.SOUTH);

	}
}


ächz, nun noch n frame drumrum:

Code:
public class MainFrame extends JFrame {

	public MainFrame() {
		//listeners = new ArrayList();
		
		BorderLayout layout = new BorderLayout();
		getContentPane().setLayout(layout);
		setResizable(false);
		MainView view = new MainView();
		getContentPane().add(view, BorderLayout.CENTER);
		//main.addActionListener(controller);
	}
}

und starten mit:

Code:
public class Runner {

	public static void main(String[] args) {
		MainFrame frame = new MainFrame();
		frame.pack();
		frame.setVisible(true);
	}
}


soooooooo, damit hättest du im groben das layout.... events hab ich jetzt keine eingebaut -> selber probieren!
du musst nur von den jeweiligen views die actions quasi bündeln und entsprechend weiterleiten und
dann abarbeiten.... jenachdem was du damit vorhast...

der stil hier ist zwar aufwendig aber wiederverwendbar..... z. b. kannst du die buttonview für alles mögliche hernehmen... solche gibts ja öfters...

soweit so gut... viel spass!!!!
 
Hallo ronny,
du bist ab jetzt mein JAVA-Gott! Geil, genau so wollte ich es! Bohrr. Danke! Hey echt cool! Vielen Dank nochmal, muss jetzt nur noch das Prob mit dem ActionListener hinbekommen! Ich versteh das noch nicht so ganz! 🙁 Werd halt mal rumbrobieren! Aber ist echt verdammt gut geworden! Vielen Tausend Dank!
Liebe Grüße
najjannaj
 
wow, vielen dank!

naja, man kann da natürlich noch einiges besser und schöner machen....
aber wenn es dir soweit erstmal reicht dann ist es super!

am anfang ist es halt erstmal wichtig, dass man nen groben plan
bekommt, wie so ne gui funktioniert und wie ich komponenten
anordnen und wieder in andere komponenten packen kann etc....
daher diese strikte einteilung in eigene geschachtelte views.

du kannst das selbstverständlich auch alles in eine klasse packen
und dann mit dem observer/obserable interfaces arbeiten um
die events abzudecken. das ist am anfang einfacher und vielleicht
fürs verständnis besser, als hart alle sender und empfänger selbst
zu bauen......

dann erstmal viel spass beim rumwerkeln!!! 🙂
 
ach du meine Güte, ich versuch seit heute morgen(7.00Uhr) die Befehlsabfrage zu bewältigen! 🙁
Die Knöpfe müssen eigentlich nichts schwieriges machen, z.b muss ein Knopf unten nur zum Beispiel die Zeile "Hallo" ausgeben aber nur in die Console also:

Code:
System.out.println("Hallo");

mehr nicht! Zumindest fürs erste nicht! Wie kann ich da jetzt denn knöpfen das zuweißen! Ich steh wieder voll aufm Schlauch! Wäre echt cool wenn du mir nochmal helfen könntest, da ich das bis Montag fertig haben muss! Wäre dir echt sehr Dankbar!

Mit freundlichen Grüßen
Jan Löbel


P.S. Hast du ICQ? Keine Sorge, ich würde dich nicht streßen, nur um vllt 1oder2 weitere Probleme nachzufragen??
 
ok, das is nich so schwierig

du musst natürlich deinem button nen actionlistener mitgeben, damit der sich
dann drum kümmern kann, wenn der button geklickt wurde.

das machst du einfach in deiner View mit: (siehe auch schon weiter oben... da muss auch das ActionCommand beim button gesetzt sein.....)



Code:
.
.
ButtonViewController con = new ButonViewController();

button1.setActionCommand("actionbutton1");
button1.setActionListener(con);

.
.

den ButtonViewController realisierst du als private klasse (normalerweise)

Code:
	private class ButtonViewController implements ActionListener {
		/* (non-Javadoc)
		 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
		 */
		public void actionPerformed(ActionEvent e) {
			//fireActionEvent(new ActionEvent(ButtonView.this, e.getID(), e.getActionCommand()));
			
			if (e.getActionCommand().equals("actionbutton1")) 
				System.out.println("button 1 geklickt!");
			else if (e.getActionCommand().equals("actionbutton2"))	
				System.out.println("button 2 geklickt!");
		}
	}

so kannst du die actions "abfangen" und abarbeiten...

EIGENTLICH sollte die view maximal entkoppelt sein um beste wiederverwendbarkeit zu garantieren....
das ist die zeile, die auskommentiert ist... diese würde die action an "weiter oben" liegende views weiterleiten, die sich an der Buttonview als listener registriert haben. (wenn du das brauchst, musst du geeignete methoden dafür bereitstellen... addxylistener, removexylistener, firexyevent)

die dort natürlich wieder abgefangen werden und evtl. weitergeleitet oder abgearbeitet werden..
aber ok, wenn dir das so reicht wie oben, dann mach es so...

damit solltest du weiterkommen...

achja, eventhandling ist nicht so trivial auf den ersten blick... das dauert a bisserl, bis man das überrissen hat...
und es gibt zig verschiedene möglichkeiten der implementierung...
ist aba generell wichtig, weil man damit SAUGEILE sachen machen kann 🙂


icq hab ich nicht!
 
Hallo,
jetzt mal ohne Witz! Du hast es voll drauf! Genau so wollte ich das haben! Jetzt muss ich nur noch denn rest des Programmes hinbekommen, aber das dürfte ich auch noch so schaffen! Hast mir echt viel weitergeholfen!
Thank's a Lot!
Bis mein [schild=1 fontcolor=000000 shadowcolor=C0C0C0 shieldshadow=1]JAVA-GOTT[/schild]

Liebe Grüße
najjannaj
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben