[Erledigt] JTextField, JLabel, JList Länge definieren

Hallo Miteinander,

ich möchte die länge von JTextField, JLabel und JList fest definieren.
Also wenn ich z.b. mein Fenster größer ziehe, nicht automatisch das TextField sich mit vergrößert. Das es z.b. immer 50 Zeichen lang ist.

Bei JLabel z.b. new JLabel("Album:", JLabel.LEFT); nicht die länge “Album:” hat, sondern z.b. 10 Zeichen.
Damit es nicht so aussieht:
Name:XYZ
Telefonnummer:000

sondern geordnet untereinandern:
Name: XYZ
Telefonnummer: 000

hab bei java.sun.com leider keine passende methode gefunden.

ein weiteres problem ist, das meine JList nicht neben meinem JLabel angezeigt wird. sondern darunter.

Box kategorieLabelBox = Box.createHorizontalBox();
kategorieLabelBox.add(new JLabel("Kategorie:", JLabel.LEFT));
kategorieLabelBox.add(Box.createGlue());
String dvdkategorie[] =
{
   "Comedy",
   "Thriller",
   "Sport",
};
final JList kategorieEingabe = new JList(dvdkategorie);
kategorieEingabe.setVisibleRowCount(3);
Box kategorieBereich = Box.createHorizontalBox();
kategorieBereich.add(kategorieLabelBox);
kategorieBereich.add(kategorieEingabe);

mit **createHorizontalBox **hats beim JLabel funktioniert.

Über Tipps würde ich mich freuen. Danke.

Du arbeitest sicher mit dem NullLAyout. Von dem ist eigentlich abzuraten, weil man sich in bestimmten Situationen das gesamte GUI zerwürfeln kann.
Also besser mit einem LayoutManager arbeiten und Layouts mit Hilfe von [japi]JPanel[/japi]s verschachteln. So bekommt man auch sehr kompilzierte Layouts recht einfach hin.

Aber um deine Frage zu beantworten. Probiere es mal mit der Methode setPreferredSize() oder setBounds().

ich arbeite mit JPanels :slight_smile: aber vermutlich sind die ein wenig verwirrt.
sollte wohl noch ein wenig beim suchen auf java.sun üben :frowning:
setPreferredSize() hat bei den JLabels wunderbar funktioniert.
beim JTextfeld nimmt er den Befehl auch an, aber nur die höhe. länge lässt er unverändert?

Hab jetzt erst mal keine Idee, aber mir fällt sicher was ein, wenn du mal etwas von deinem Code postest. :wink:

Übrigens du kannst dein Code als Java formatieren, dann sieht das so aus(besser):

public class Test {
	public static void main(String[] args) {
		int a = 0;
                ...```
;)
private Container DVDPanelErstellen()
{
Box spielzeitLabelBox = Box.createHorizontalBox();
JLabel l3 = new JLabel("Spielzeit:", JLabel.LEFT);
l3.setPreferredSize(new Dimension(120,10));
spielzeitLabelBox.add(l3);
spielzeitLabelBox.add(Box.createGlue());
final JTextField spielzeitEingabe = new JTextField(50);
spielzeitEingabe.setPreferredSize(new Dimension(100,30));
Box spielzeitBereich = Box.createHorizontalBox();
spielzeitBereich.add(spielzeitLabelBox);
spielzeitBereich.add(spielzeitEingabe);

 
 
Box kategorieLabelBox = Box.createHorizontalBox();
JLabel l4 = new JLabel("Kategorie:", JLabel.LEFT);
l4.setPreferredSize(new Dimension(120,10));
kategorieLabelBox.add(l4);
kategorieLabelBox.add(Box.createGlue());
 
String dvdkategorie[] =
{
"Horror",
"Action",
"Comedy",
};
 
final JList kategorieEingabe = new JList(dvdkategorie);
kategorieEingabe.setVisibleRowCount(3);
Box kategorieBereich = Box.createHorizontalBox();
kategorieBereich.add(kategorieLabelBox);
kategorieBereich.add(kategorieEingabe);
 
 
Box einzeiligeEingaben = Box.createVerticalBox();
 
einzeiligeEingaben.add(titelBereich);
einzeiligeEingaben.add(regisseurBereich);
einzeiligeEingaben.add(spielzeitBereich);
einzeiligeEingaben.add(kategorieBereich);
einzeiligeEingaben.add(new JScrollPane(kategorieEingabe));
 
JPanel eingabePanel = new JPanel();
eingabePanel.setLayout(new BorderLayout());
eingabePanel.add(einzeiligeEingaben, BorderLayout.NORTH);
 
 
JPanel panel = 
new JPanel();
 
panel.setLayout(new BorderLayout());
 
panel.add(eingabePanel, BorderLayout.CENTER);

panel.add(dvdbuttonLeiste, BorderLayout.SOUTH);
return panel;

Fehler1: spielzeitEingabe nimmt nur die höhe 30 an und nicht die länge 100.
Fehler2: kategorieBereich wird nicht neben JLabel l4 angezeigt sondern darunter.

dies ist nicht der komplette code, sollte aber die betreffenden stellen beinhalten.
Danke.

Was hat denn Box für einen LayoutManager?

es wurde nur der Lightweight-Container “box” verwendet. der dazugehörige Layout-Manager “BoxLayout” wurde nicht benützt, bzw. wurden ihm keine angaben übergeben.
^^ ist der komplette code für box.

Fehler1: spielzeitEingabe nimmt nur die höhe 30 an und nicht die länge 100.

Setz doch auch mal die MinimumSize auf den gleichen Wert wie die PreferredSize.

Fehler1: MinimumSize greift bei der länge auch nicht. liegt vermutlich irgendwie am panel.
Fehler2: warum er die Kategorie nicht nebendran anzeigt bleibt mir schleierhaft…,is lieder auch der wichtigere fehler.

Fehler1: MinimumSize greift bei der länge auch nicht. liegt vermutlich irgendwie am panel.

Jo, irgendsowas. S.u.

Fehler2: warum er die Kategorie nicht nebendran anzeigt bleibt mir schleierhaft…,is lieder auch der wichtigere fehler.

Lässt sich anhand des spärlichen Codes kaum herausfinden.

        //Spielzeitbereich:
        JLabel l3 = new JLabel("Spielzeit:", JLabel.LEFT); 
        l3.setPreferredSize(new Dimension(120,20)); 
        l3.setMinimumSize(new Dimension(120,20)); 
        l3.setMaximumSize(new Dimension(120,20)); 
        final JTextField spielzeitEingabe = new JTextField(); 
        spielzeitEingabe.setPreferredSize(new Dimension(100,30)); 
        spielzeitEingabe.setMaximumSize(new Dimension(100,30)); 
        spielzeitEingabe.setMinimumSize(new Dimension(100,30)); 
        Box spielzeitBereich = Box.createHorizontalBox(); 
        spielzeitBereich.add(l3); 
        spielzeitBereich.add(spielzeitEingabe);
        spielzeitBereich.add(Box.createHorizontalGlue());
        //Kategoriebereich:
        JLabel l4 = new JLabel("Kategorie:", JLabel.LEFT); 
        l4.setPreferredSize(new Dimension(120,20)); 
        l4.setMinimumSize(new Dimension(120,20)); 
        l4.setMaximumSize(new Dimension(120,20)); 
        String dvdkategorie[] = { "Horror", "Action", "Comedy", };
        final JList kategorieEingabe = new JList(dvdkategorie); 
        kategorieEingabe.setVisibleRowCount(3); 
        JScrollPane scKategorieEingabe = new JScrollPane(kategorieEingabe);
        scKategorieEingabe.setPreferredSize(new Dimension(100,60));
        scKategorieEingabe.setMinimumSize(new Dimension(100,60));
        scKategorieEingabe.setMaximumSize(new Dimension(100,60));
        Box kategorieBereich = Box.createHorizontalBox(); 
        kategorieBereich.add(l4); 
        kategorieBereich.add(scKategorieEingabe);
        kategorieBereich.add(Box.createHorizontalGlue());
        //Alles zusammensetzen:
        Box einzeiligeEingaben = Box.createVerticalBox();
        einzeiligeEingaben.add(titelBereich); 
        einzeiligeEingaben.add(regisseurBereich); 
        einzeiligeEingaben.add(spielzeitBereich); 
        einzeiligeEingaben.add(kategorieBereich); 
        JPanel eingabePanel = new JPanel(); 
        eingabePanel.setLayout(new BorderLayout());
        eingabePanel.add(einzeiligeEingaben, BorderLayout.NORTH); 
        JPanel panel = new JPanel();
        panel.setLayout(new BorderLayout());
        panel.add(eingabePanel, BorderLayout.CENTER); 
        panel.add(dvdbuttonLeiste, BorderLayout.SOUTH); 
        return panel;
    }```

Ich dachte er hat minimum, maximum und preferredSize schon gesetzt gehabt?

Das ist nicht das Einzige, was ich geändert habe.
Da kommt auch noch ein add(Box.createHorizontalGlue()) hinzu.

minimum, maximum und preferredSize, hatte ich auch gesetzt, aber nicht extra nochmal dafür den code hier gepostet :slight_smile:

@Andre Uhres: Besten Dank!!! hat funktioniert!!!
@all: danke auch für eure Hilfe!