Panel auf eine gewisse grösse zwingen bei AWT????
-
Hallo zusammen
Ich habe da ein Problem mit dem AWT.
Und zwar folgendes. Ich habe ein Panel (panel1) das ein Gridlayout (gridlayout1) verwendet. Das Grid besteht aus 5 Reihen und 2 Spalten
Jetzt habe ich links Labels plaziert und rechts Textfields.
Das alles klappt auch wunder bar.
Zur Entwicklungszeit sieht auch alles schön und normal aus nur wenn ich dann Zur Laufzeit Werte in das Textfield schreibe dann vergössern sich die Textfelder.
Ich will aber das die Textfelder so gross bleiben wie sie sind.
Eine Methode wie setResizebl gibt es bei TextFields nicht und bei Panels auch nicht.Wie kann ich es jetzt anstellen das sich die Komponnenten nicht vergrössern wenn man da längere Strings in die Textfield schreibt.
Danke bye
-
Wahrscheinlich musst du mit der Anzahl der Spalten des TextFields arbeiten. Versuche mal setColumns auf einen Wert zu setzen und beobachte dann, ob das von dir geschilderte Verhalten erneut auftritt.
-
Also Cengiz ja es macht es.
Ich stell mal den Code hier rein.
package client.userinterfaces; import java.awt.*; import java.awt.event.*; import com.bizframe.Customer; /** * <p>Title: </p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2003</p> * <p>Company: </p> * @author not attributable * @version 1.0 */ public class CustomerInfo extends Panel { BorderLayout borderLayout1 = new BorderLayout(); Checkbox checkbox1 = new Checkbox(); Panel panel1 = new Panel(); GridLayout gridLayout1 = new GridLayout(); Label lblCustomerID = new Label(); TextField txtStrasse = new TextField(); Label lblStrasse = new Label(); TextField txtName2 = new TextField(); Label lblName2 = new Label(); TextField txtName = new TextField(); Label lblName = new Label(); TextField txtCustomerID = new TextField(); Label lblPLZ = new Label(); TextField txtPLZ = new TextField(); Label lblOrt = new Label(); TextField txtOrt = new TextField(); CheckboxGroup checkboxGroup1; Label lblTel = new Label(); TextField txtTel = new TextField(); Customer customer; public CustomerInfo() { try { jbInit(); } catch(Exception ex) { ex.printStackTrace(); } } public CustomerInfo(CheckboxGroup checkboxGroup1, Customer customer){ this.checkboxGroup1 = checkboxGroup1; this.customer = customer; try { jbInit(); } catch(Exception ex) { ex.printStackTrace(); } } void jbInit() throws Exception { this.setSize(new Dimension(240, 171)); checkbox1.setCheckboxGroup(checkboxGroup1); this.setLayout(borderLayout1); panel1.setLayout(gridLayout1); panel1.setSize(240, 170); lblCustomerID.setText("Customer ID"); gridLayout1.setColumns(2); gridLayout1.setHgap(0); gridLayout1.setRows(0); lblStrasse.setText("Strasse"); lblName.setText("Kundenname"); lblName2.setText(""); lblPLZ.setText("PLZ"); lblOrt.setText("Ort"); lblTel.setText("Tel."); txtCustomerID.setText(customer.getCustomerID()); checkbox1.setLabel(customer.getCustomerID() + " Kunde Übernehmen"); txtName.setText(customer.getName()); txtName2.setText(customer.getName2()); txtStrasse.setText(customer.getStreet()); txtPLZ.setText(customer.getPostalcode()); txtOrt.setText(customer.getCity()); txtTel.setText(customer.getTelephone()); this.add(checkbox1, BorderLayout.SOUTH); this.add(panel1, BorderLayout.CENTER); panel1.add(lblCustomerID, null); panel1.add(txtCustomerID, null); panel1.add(lblName, null); panel1.add(txtName, null); panel1.add(lblName2, null); panel1.add(txtName2, null); panel1.add(lblStrasse, null); panel1.add(txtStrasse, null); panel1.add(lblPLZ, null); panel1.add(txtPLZ, null); panel1.add(lblOrt, null); panel1.add(txtOrt, null); panel1.add(lblTel, null); panel1.add(txtTel, null); } }
Diesen Panel verwende ich dann nachher in einem Frame.
-
Was du auch noch machen könntest wäre getPreferredSize von TextField zu überschreiben und immer denselben Wert zurück zu geben. Anscheinend rechnet er das stets neu aus.
-
Also ich habe das jetzt so gelösst das ich das Layout von dem Panels auf null setze und dann das in mein Frame einsetze.
Das ist aber keine elegante lösung da muss ich sehr lange von hand hin und her verschieben bis das geht.Was hat es den mit dme getPreferedSize auf sich.
Wofür ist den die Methode.
Was meinst du mit Überschreiben soll ich etwa ne Klasse von Textfield Ableiten und dann die methode so schreiben das sie mir immer einen gewissen wert gibt.Danke bye
-
Genau. Das kannst du aber auch über eine anonyme Klasse machen die lediglich diese eine Methode überschreibt.
-
Danke Gengiz ich habe es jetzt so gemacht wie du es gesagt hast ich habe eine Klasse von der Komponente abgeleitet die ich brauche und habe da nun feste Breiten und höhen eingegeben.
MAl ne andere Frage kann ich jetzt die Methode setSize auch so überschreiben das ich damit immer wieder die Werte von prerferedSize neu eingebe.
Wenn ja wie könnte ich das am besten machen.
Danke.
BYE
-
Wenn du damit meinst, dass du per setSize eine Größe x definierst und ein Aufruf von getPreferredSize genau dieses x wieder zurück gibt dann ja. Dafür benötigst du eine Membervariable die du innerhalb von setSize setzt und in getPreferredSize wieder zurückgibst.
-
Warum ist sowas simples in Java so kompliziert?
-
Im AWT ist das tatsächlich etwas kompliziert gestaltet. Allerdings ist das AWT auch nicht das, was man eigentlich nutzen würde. Ich schätze CoTech muss dies aufgrund einer mobilen Anwendung nutzen - ansonsten empfehle ich die Nutzung von Swing oder gar SWT.
-
Das ist wirklich kompliziert ich muss jetzt für fast jee Komponente eine eingene abgeleitete Klasse erstellen.
Ja cengiz du hast recht ich muss Personal Java(JDK 1.1.8) verwenden, weil JVM´s auf den PDA´s auf dem stand von JDK1.1.9 sind.
Manchmal denke ich wirklich das .NET in mobilen Anwendungen angebrachter ist.