PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java Layoutmanager



Hans-Georg Normann
28-10-2003, 21:35
Muss ich in Java eigentlich diese hochintelligenten und nervtötenden Layoutmanger für die Maskenerstellung verwenden oder kann man sich das sparen?

Wenn ich die Komponenten zu Fuß platziere, bin ich bestimmte schneller als mit dieser elenden Rumprobiererei, es sei denn, es gibt soetwas wie den designer von QT.

Nach vier Stunden nichtszustandebringenmitlayoutmangeres sollte es dann für heute mal genug sein.

Hans

Lin728
29-10-2003, 06:30
Layoutmanager sind so gesehen was gutes, auch wenn mir das Modell der Boxen und Tabellen in GTK mehr zugesagt hat, da es besser mit designern zu bearbeiten ging.
Layoutmanager sorgen dafür, dass wenn z.B. deine Schriftgröße von der eingestellten abweicht, dass die Schrift am Ende nicht unter dem nächsten Element verschwindet (weils ja größer wird), sondern das nächste Element verschoben wird.
Oder wenn jemand dein Fenster vergrößert, dass sich die einzelnen Elemente auch vergrößern.....

Designer gibt viele, hier ein paar brauchbar:
netbeans, jbuilder,....

lg

PS: Das mit den Layoutmanagern wird schon noch, ist viel gewohnheit...

bischi
29-10-2003, 11:58
Kommt ganz darauf an, was du machen willst. Je nachdem ist ein Layoutmanager praktischer oder nicht.

MfG Bischi

peschmae
29-10-2003, 12:03
der Programmieraufwand ist zugegebenermassen gross. Vor allem wenn du das mit Delphi vergleichst.

Ich habe zwischendurch meine Dialoge für n SWT-Programm auch zuerst mal in Delphi zusammengeklickt und sie dann erst mit Layoutmanager und allem implementiert.

Wenn du aber konsequent Layoutmanager verwendest ist das nicht nur oft einfacher (anordnen der Komponente bei resize geht dann automatisch) sondern auch sonst sauberer (schon mal unter Windows die Schriftgrössen umgestellt? Die Programme verwenden alle keine Layoutmanager. Oft gehts gut - aber manchmal bricht dann das Chaos aus.)

Ich würd mich auf keinen Fall darum Drücken, die Dinger zu verwenden.

MfG Peschmä

Hans-Georg Normann
29-10-2003, 19:26
Also probieren wir unser Glück noch einmal. Habe meine Ansprüche mal auf ein GridLayout (2 Spalten * 2 Reihen) zurückgeschraubt. Geht ja auch, aber zwei Sachen stören mich:

1. nach dem Starten des Applets im Appletviewer sehe ich nichts. Wenn ich das Fenster in der Größe verändere, werden meine Kmponenten gezeichnet.

2. Die Komponenten sind überdimensioniert, insbesondere die Label. In einem normalen Fenster steht die Methode pack() zur Verfügung. Was aber mache ich in einem Panel oder Applet?

hier mal mein Code:


import java.applet.Applet;
public class jdbio extends Applet {
public jdbio(){
setName("jdbioApplet");
}


public void init() {
super.init();
this.setBounds(150,50,350,250);
TPanelFamily panelFamily = new TPanelFamily();
add(panelFamily);
}

public String getAppletInfo() {
return "jdbio Version 1.0, (c) 2003 Hans-G. Normann";
}

public String[][] getParameterInfo() {
String[][] ret = {
{"nothing to do", "nothing to do", "nothing to do"},
{"","",""}
};
return ret;
}
}


import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;

public class TPanelFamily extends Panel {
private Label lbNachname = new Label("Nachname");
private Label lbVorname = new Label("Vorname");
public TextField edVorname = new TextField(30);
public TextField edNachname = new TextField(30);
public GridLayout gl = new GridLayout(2,2);

public TPanelFamily(){
setLayout(gl);
setSize(150,200);
add(lbVorname);
add(edVorname);
add(lbNachname);
add(edNachname);
}
}

Hans-Georg Normann
29-10-2003, 21:47
So Problem 1 (sehe nichts nachdem Appletview gestartet ist) habe ich ja rausbekommen.
public jdbio(){
setName("jdbioApplet");
}habe irgendwo gelesen, dass das der Construktor (hätte man ja auch dranschreiben können ;) ) sei und man den bei Applets nicht überschreiben darf.

Das mit den Breiten Spalten bekomme ich nicht in den Griff. Sch..... ........ger:mad:

Lin728
29-10-2003, 21:51
Hmm, wegen Problem 1: Versuche einmal ein validate auf die AppletKlasse zu machen.
z.B. MeinApplet.validate, nachdem du vorher deine ganzen MeinApplet.add(blabla) gemacht hast...

zu Problem 2:
Das kann nur GridBagLayout :-(
Is am Anfang kompliziert, geht aber mit der zeit....

lg

fonz
30-10-2003, 09:45
schaut euch mal diesen alternativen
layout-manager an, bin sehr zufrieden damit

http://www.java-magazin.de/itr/online_artikel/psecom,id,442,nodeid,11.html

Hans-Georg Normann
30-10-2003, 19:56
Langsam habe ich die Nase voll von Layoutmangern. Wieso machen die eigentlich was sie wollen und nicht das was ich will. Das artet ja in eine ABM aus!

Ich bringe es einfach nicht fertig, dass meine vier Felder links im Applet stehen. Kann machen was ich will, der Manger ist anderer Meinung.

Habe dann mal versucht bei den Feldern den Hintergrund einzufärben (um zu sehen wie groß die sind). Der Manager pfeifft mir was.

Habe auch versucht, ein weiteres Feld zu definieren, weit rechts außen. Der Manager oder wer auch immer hat keine Lust.

Also wenn man in Java für die Ergründung jedr Komponete eine Woche benötigt, dann sollte ich das ganze einstampfen und irgendwo steinekloppen gehen, ist bestimmt nicht frustrierender und mit Managern hat man da auch weniger zu tun!:mad:

Dann noch einmal schnelle einen letzten Verzweifelten Versuch mit dem Appletviewer. Mist sieht ja anders aus als im Browser! Stelle fest, dass ich den Browse (Mozilla 1.5, FireBird 0.7) jedesmal neu starten muß, damit meine Änderungen angezeigt werden. Shift Reload und Chache löschen zeigten keinen Erfolg. Is ja zum Mäusemelken. OK, werde ich demnächst wieder einmal öfters in den Appltviewr sehen.

Was jedoch geblieben ist, das die Applets grunsätzlich zentriert angezeigt werden. Habe ich keine Möglichkeit die Ausrichtung nach Belieben zu setzen?

Mal den aktuellen Stand meines Frustrationslaufes:


import java.applet.Applet;
import java.awt.Color;

public class jdbio extends Applet {
public void init() {
super.init();
this.setName("jdbioApplet");
this.setBounds(0,0,350,600);
this.setBackground(Color.GREEN);
TPanelFamily panelFamily = new TPanelFamily();
panelFamily.setBackground(Color.CYAN);
add(panelFamily);
}

public String getAppletInfo() {
return "jdbio Version 1.0, (c) 2003 Hans-G. Normann";
}

public String[][] getParameterInfo() {
String[][] ret = {
{"nothing to do", "nothing to do", "nothing to do"},
{"","",""}
};
return ret;
}
}



import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.Color;

public class TPanelFamily extends Panel {
private Label lbNachname = new Label("Nachname");
private Label lbVorname = new Label("Vorname");
private Label lbDummy = new Label("<--->");
public TextField edVorname = new TextField(30);
public TextField edNachname = new TextField(30);
public GridBagLayout gbl = new GridBagLayout();
private GridBagConstraints gbc;

public TPanelFamily(){
setSize(300,500);
setLayout(gbl);

// Row 1
gbc = makegbc(0,0,1,1);
lbVorname.setBackground(Color.GREEN);
gbl.setConstraints(lbVorname, gbc);
add(lbVorname);

gbc = makegbc(2,0,3,1);
gbl.setConstraints(edVorname, gbc);
add(edVorname);

//Row2
gbc = makegbc(0,1,1,1);
gbl.setConstraints(lbNachname, gbc);
add(lbNachname);

gbc = makegbc(2,1,3,1);
gbl.setConstraints(edNachname, gbc);
add(edNachname);

gbc = makegbc(1,1,1,1);
gbl.setConstraints(lbDummy, gbc);
lbDummy.setBackground(Color.GREEN);
add(lbDummy);

}

/**
* @param gridx
* @param gridy
* @param gridwidth
* @param gridheight
* @return GridBagConstraints
*/
public GridBagConstraints makegbc(
int x, int y, int width, int height)
{
GridBagConstraints lgbc = new GridBagConstraints();
lgbc.gridx = x;
lgbc.gridy = y;
lgbc.gridwidth = width;
lgbc.gridheight = height;
//lgbc.insets = new Insets(1, 1, 1, 1);
//lgbc.fill = GridBagConstraints.NONE;
//lgbc.anchor = GridBagConstraints.WEST;
return lgbc;
}

}


Hans

Lin728
30-10-2003, 21:31
Das geht net mir einem GridBagLayout, der ordnet die Elemente immer vom Zentrum aus an, die position (nw, w, s, ..) gint nur an, wie die Komponente in einer Zelle liegen soll, die sie nicht ganz ausfüllt.

lg

Hans-Georg Normann
30-10-2003, 21:47
Original geschrieben von ceisserer
PS: So schlimm is es doc nich :-)) Nee, viel schlimmer ;)

Sag mal, den TableLayoutManger, wo finde ich den? Habe schon in diversen Quellen nachgesehen. Auch bei sun in der Referenz nicht zu entdecken. Thrid Party?

Hans

Hans-Georg Normann
30-10-2003, 22:27
Eigentlich hätte ich ja ein scweißtriefendes Icon anbringen müssen.:D

Also wenn ich mein Panel in ein FlowLayout packe, dann bekomme ich das, was ich wollte. Empfinde ich als ein seltsames Verhalten, aber was soll's.

Na dann werde ich mal weitermachen.

Hans

peschmae
31-10-2003, 08:14
Original geschrieben von Hans-Georg Normann
Sag mal, den TableLayoutManger, wo finde ich den? Habe schon in diversen Quellen nachgesehen. Auch bei sun in der Referenz nicht zu entdecken. Thrid Party?


im Artikel auf den sich fonz bezog hats zuunterst einen Link zur HP von dem LayoutManager. Der ist Third-Party. Einfach das Jar ziehen und dem CLASSPATH hinzufügen :)

MfG Peschmä

Hans-Georg Normann
31-10-2003, 15:33
dann werde ich mir den auch noch einmal zu Gemüte ziehen. Wird schon Schief gehen.

Hans