Labels in Box linksbündig ausrichten

Status
Nicht offen für weitere Antworten.

Landei

Top Contributor
Hiho,

ich habe ein kleines nerviges Problem. Schreibe ich etwas wie:

Code:
Box box = Box.createVerticalBox();
box.add(new JLabel("Das sieht")); 
box.add(new JTextField());
box.add(new JLabel("einfach")); 
box.add(new JTextField());
box.add(new JLabel("blöd aus"));

sind alle Komponenten ordentlich links ausgerichtet, nur die blöden JLabels nicht. Ich würde Box gern öfter verwenden, ist ja praktischer als ein JPanel mit LayoutManager usw., aber ich finde einfach keinen einfachen Weg, die Labels linksbündig zu bekommen. Kann doch nicht so schwer sein...

Ciao!
Landei

[/code]
 

Landei

Top Contributor
Wenn ich eine Border um das Label zeichne, sieht man, dass der Text INNERHALB des Labels ganz links steht. Das gesamte Label hat einen gewissen Abstand zum linken Box-Rand. Habe schon in allen Varianten probiert:
- setHorizontalAlignment
- setAlignmentX
- setMaximumSize
- setPreferredSize
...

:bahnhof:
 

hephaistos

Aktives Mitglied
halloa,

hab genau dasselbe problem momentan :(

hab auch schon ziemlich herumprobiert!
was funktioniert ist: einen JPanel machen und den dort reinwerfen und das Label alignen... leider hab ich es dann nicht geschafft, den Panel auf eine vernünftige Höhe zu bringen :(
hat schon jmd. eine lösung?

thx![/code]
 

mic_checker

Top Contributor
was meinst du mit auf vernünftige höhe bringen ? Hab bei mir bei solchen Problemen meist auch das ganze in nem JPanel separat angeordnet und in die Box gesteckt (bzw. beim BoxLayout verwendet). Gab eigentlich keine Probleme damit.
 

Landei

Top Contributor
Also, wenn ich Handstände machen muss, weil BoxLayout einfach ZU DOOF dafür ist, dann bastele ich mir lieber gleich eine Klasse BoxLayoutWhichCanHandleJLabels...
 

Landei

Top Contributor
Hier ein Progrämmchen zur Problemverdeutlichung:

Code:
import javax.swing.*;
import java.awt.*;

public class BoxTest extends JFrame {

    public BoxTest() {
        getContentPane().setLayout(new FlowLayout());
        setSize(200,200);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        initBox();
        setVisible(true);
    }
    
    private void initBox() {
        Box box = Box.createVerticalBox();
        getContentPane().add(box);
        JLabel label = new JLabel("Das ist ein Test");
        label.setBorder(BorderFactory.createEtchedBorder());
        JLabel label2 = new JLabel("Noch'n Test");
        label2.setBorder(BorderFactory.createEtchedBorder());
        JComboBox cmb = new JComboBox(new String[]{"A","B","C"});
        JTextField field = new JTextField("ödflgjdfö");
        box.add(label);
        box.add(cmb);
        box.add(label2);
        box.add(field);
    }
    
    public static void main(String[] args) {
        new BoxTest();
    }
}

Sieht grauenvoll aus...
 

Landei

Top Contributor
Workaround: Mit Labels statt JLabels funktioniert es. Ist aber auch nicht das Gelbe vom Ei...
 

mic_checker

Top Contributor
hephaistos: poste doch mal deinen code, hab meinen gerad net da...ist aber auch net aufregend: einfach das jpanel geholt, da entsprechend das layout gesetzt und dann das panel ins BoxLayout rein.

Landei: Wenn du alles wie bisher machst nur JLabel durch Label ersetzt funzt es? Denk dran, dass du nicht AWT und SWING mischen solltest.
 

Landei

Top Contributor
Yo, Label statt JLabel und alles ist in Butter (sofern man mit Labels leben kann). Dass es Probleme beim Mixen von Swing und AWT gibt, habe ich selber schon erlebt (z.B. bei Canvas3D), aber hier scheinen sich alle Komponenten zu vertragen. Natürlich wäre mir eine Lösung mit JLabels auch lieber...
 

mic_checker

Top Contributor
hephaistos: hab gerad nochma nachgeguckt, im letzten source in dem ich das verwendet hab , hab ich meine klasse von jpanel abgeleitet.

Code:
		jPreLabel = new JLabel("Preorder :",JLabel.LEFT);
....
		
		preListPanel.add(jPreLabel,"North");

		ct.add(Box.createRigidArea(new Dimension(5,0)));
		ct.add(preListPanel);
		ct.add(Box.createRigidArea(new Dimension(5,0)));
		
		ct.add(inListPanel);
		ct.add(Box.createRigidArea(new Dimension(5,0)));

		ct.add(postListPanel);
		ct.add(Box.createRigidArea(new Dimension(5,0)));

ct war ein Container, inListPanel, postListPanel und preListPanel waren JPanel.

Ist natürlich die Frage wie genau du es haben willst und was du mit der höhe für Probleme hast....
 

hephaistos

Aktives Mitglied
hi!

sorry für die verzögerung!

Code:
        contentPanel.add(new JLabel(name));
    	contentPanel.add(view.getTableHeader());
        contentPanel.add(view);
        contentPanel.add(Box.createRigidArea(new Dimension(0, 20)));
wobei contentPanel ein JPanel mit einem BoxLayout ist...

eure beispiele funktionieren bei mir leider nicht.
mit dem Label statt JLabel funktioniert die Darstellung überhaupt nicht :(

thx!
 

Landei

Top Contributor
Habe einen einfachen (um nicht zu sagen "strohdoofen") LayoutManager geschrieben, der folgende Eigenschaften hat:
- alle Komponenten werden vertikal linksbündig angeordnet
- nur die PreferredSize der Komponenten wird berücksichtigt
- man kann ein VerticalGap zwischen den Komponenten definieren
- eine Border der Papa-Komponente wird berücksichtigt
- mit createVerticalStrut können individuelle Lücken zwischen den Komponenten erzeugt werden (von Box geklaut)
- wenn der Platz zu klein ist - Pech gehabt (man kann den JPanel natürlich in eine JScrollPane packen)

Würde mich freuen, wenn ihr das Ding mal ausgiebig testet...

Code:
import java.awt.*;
import javax.swing.*;

public class ColumnLayout implements LayoutManager {

  private int vgap = 0;

  public ColumnLayout() {
  }

  public ColumnLayout(int vgap) {
    this.vgap = Math.max(0, vgap);
  }

  public void removeLayoutComponent(Component comp) {
  }

  public void layoutContainer(Container parent) {
    Insets insets = parent.getInsets();
    int width = parent.getWidth() - insets.left - insets.right;
    int x = insets.left;
    int y = insets.right;
    for(int i = 0; i < parent.getComponentCount(); i++) {
      Component comp = parent.getComponent(i);
      if (i > 0) {
        y += vgap;
      }
      int h = comp.getPreferredSize().height;
      comp.setBounds(x,y, width, h);
      y += h;
    }
  }

  public void addLayoutComponent(String name, Component comp) {
  }

  public Dimension minimumLayoutSize(Container parent) {
    return preferredLayoutSize(parent);
  }

  public Dimension preferredLayoutSize(Container parent) {
    int w = 0;
    int h = 0;
    for(int i = 0; i < parent.getComponentCount(); i++) {
      Component comp = parent.getComponent(i);
      if (i > 0) {
        h += vgap;
      }
      h += comp.getPreferredSize().height;
      w = Math.max(w, comp.getPreferredSize().width);
    }
    Insets insets = parent.getInsets();
    return new Dimension(w + insets.left + insets.right,
                         h + insets.top + insets.bottom);
  }

  public int getVerticalGap() {
    return vgap;
  }

  public static Component createVerticalStrut(int height) {
    return Box.createVerticalStrut(height);
  }

}

PS: Das Ding funktioniert auch mit JPanels :-D
 

Landei

Top Contributor
Aber wie gesagt, ist noch nicht richtig getestet, also Vorsicht...

PS: Habe gerade nach "ColumnLayout" gegoogelt und ungefähr eine Zillion unterschiedliche Implementierungen gefunden. War wohl nicht der erste mit dem Problemchen...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M JavaFX Abstand zwischen AnchorPane und Labels in dem HBox halten AWT, Swing, JavaFX & SWT 1
Jose05 NullPointerException bei Beschreiben eines Labels aus einem Array AWT, Swing, JavaFX & SWT 12
S Labels abfragen AWT, Swing, JavaFX & SWT 6
S Labels in Panel erstellen AWT, Swing, JavaFX & SWT 1
K Swing labels anpassen AWT, Swing, JavaFX & SWT 1
R Update eines Labels bei Methodenaufruf einer anderen Klasse AWT, Swing, JavaFX & SWT 9
M Gui-Form alle Labels anzeigen AWT, Swing, JavaFX & SWT 4
Z Window Builder - Labels mit setText befüllen AWT, Swing, JavaFX & SWT 11
X Swing Per Button die Labels und Textfelder auslesen AWT, Swing, JavaFX & SWT 8
gamebreiti auf usereingabe warten mit GUI(nur Labels, Buttons etc. keine Texteingaben) AWT, Swing, JavaFX & SWT 3
P Buttons/Labels auf GUI positionieren AWT, Swing, JavaFX & SWT 2
X Swing setContentPane verdeckt mir alle Buttons Labels etc... AWT, Swing, JavaFX & SWT 14
D Wie kann ich Buttons und Labels besser anordnen AWT, Swing, JavaFX & SWT 4
V JTabbedPane Eingefügte Labels verschoben AWT, Swing, JavaFX & SWT 2
C ImageIcon eines Labels auf einem Panel in neuem Fenster anzeigen AWT, Swing, JavaFX & SWT 2
K Hilfe bei Labels AWT, Swing, JavaFX & SWT 3
K richtiges Ausrichten mehrerer Labels AWT, Swing, JavaFX & SWT 3
R Größe eines Labels bei GridBagLayout festlegen AWT, Swing, JavaFX & SWT 9
alex_fairytail LayoutManager NullLayout überlappende Labels werden nicht angezeigt AWT, Swing, JavaFX & SWT 4
S Swing Positionierung eines Labels in einem Panel AWT, Swing, JavaFX & SWT 2
E Swing Drag n Drop Verschieben von Labels o.ä. AWT, Swing, JavaFX & SWT 10
A Swing JFrame vergrößert sich immer bei setText() eines Labels AWT, Swing, JavaFX & SWT 3
D LayoutManager GridLayout, 2 labels nebeneinander AWT, Swing, JavaFX & SWT 8
B bin am verzweifeln, will auf knopfdruck durch ne überprüfung die labels unsichtbar machen AWT, Swing, JavaFX & SWT 2
K Swing Labels & Buttons auf Frame AWT, Swing, JavaFX & SWT 8
D Swing update eines Labels nicht sichtbar AWT, Swing, JavaFX & SWT 9
M AWT TextFelder und Labels nicht ausgerichtet AWT, Swing, JavaFX & SWT 6
O Swing es können keine neuen Labels hinzufügt werden während der Timer läuft AWT, Swing, JavaFX & SWT 14
L Labels sichtbar - JFreeChart AWT, Swing, JavaFX & SWT 5
N Formular mit GridBaglayout und Abstände von Labels AWT, Swing, JavaFX & SWT 2
M Labels in ScrollPane mit Linie verbinden AWT, Swing, JavaFX & SWT 2
P SWT Composite und viele Labels AWT, Swing, JavaFX & SWT 10
G Frage zu Labels mit html AWT, Swing, JavaFX & SWT 3
S Labels und Button übereinander --> Reihenfolge? AWT, Swing, JavaFX & SWT 4
G Text eines Labels verändern? AWT, Swing, JavaFX & SWT 4
G Button vor Labels? AWT, Swing, JavaFX & SWT 5
H Labels mit setter-Methode modifizieren AWT, Swing, JavaFX & SWT 9
T Warum nehmen diese Labels die Hintergrundfarbe nicht an? AWT, Swing, JavaFX & SWT 6
T Labels gleichzeitig bewegen und anklicken AWT, Swing, JavaFX & SWT 3
S Position von Labels, Buttons, etc. festsetzen und Scrollen AWT, Swing, JavaFX & SWT 4
A Zeichnen auf zwei Labels. Geht nit AWT, Swing, JavaFX & SWT 7
D Zurücksetzen des Labels funtioniert nicht AWT, Swing, JavaFX & SWT 6
P Hintergrund eines Labels/Panels setzen AWT, Swing, JavaFX & SWT 3
G der sinn von labels/jlabels ? AWT, Swing, JavaFX & SWT 3
L Labels verschwinden! AWT, Swing, JavaFX & SWT 10
D JPanlels und Labels. AWT, Swing, JavaFX & SWT 7
T Labels verschieben / Flackern AWT, Swing, JavaFX & SWT 2
O JTable linksbündig drucken (nicht der Zelleninhalt) AWT, Swing, JavaFX & SWT 2
C JMenuBar linksbündig AWT, Swing, JavaFX & SWT 6
Spot84 scrollbar die linksbündig angezeigt wird nur anzeigen wenn sie gebraucht wird AWT, Swing, JavaFX & SWT 5
T Komponenten im JPanel linksbündig anordnen? AWT, Swing, JavaFX & SWT 5
M JLabel ausrichten AWT, Swing, JavaFX & SWT 2
B JCheckBox ausrichten ? AWT, Swing, JavaFX & SWT 1
G JavaFX CSS: Label in GridPane rechts ausrichten AWT, Swing, JavaFX & SWT 9
J jTextFields ausrichten AWT, Swing, JavaFX & SWT 5
D JLabel Image ausrichten AWT, Swing, JavaFX & SWT 2
R Swing Wie kann man Internal Frames automatisch ausrichten lassen? AWT, Swing, JavaFX & SWT 3
P LayoutManager GroupLayout an dem rechten Rand ausrichten AWT, Swing, JavaFX & SWT 2
E Seitenabstand ausrichten JLabel AWT, Swing, JavaFX & SWT 2
S Fenster an bestehendem Fenster ausrichten AWT, Swing, JavaFX & SWT 6
T Inhalt von einem Tab an JTabbedPane größe ausrichten? AWT, Swing, JavaFX & SWT 2
A Swing Box Label ausrichten AWT, Swing, JavaFX & SWT 3
P Swing JLabel Text nach Links ausrichten klappt nicht AWT, Swing, JavaFX & SWT 3
E 2D-Grafik Text an Kreispfad ausrichten AWT, Swing, JavaFX & SWT 2
K Links ausrichten AWT, Swing, JavaFX & SWT 5
T LayoutManager Panel in Scrollpane mittig ausrichten AWT, Swing, JavaFX & SWT 2
T Swing JSplitPane Componenten ausrichten AWT, Swing, JavaFX & SWT 4
M Dynamisches generieren und ausrichten von Komponenten AWT, Swing, JavaFX & SWT 11
E JToolBar ausrichten AWT, Swing, JavaFX & SWT 2
data89 Button(s) vertikal mittig in JPanel ausrichten AWT, Swing, JavaFX & SWT 7
D JTextArea rechtsbündig ausrichten ? AWT, Swing, JavaFX & SWT 3
C JScrollPane immer ganz unten ausrichten AWT, Swing, JavaFX & SWT 17
I JDialog relativ zum Parent ausrichten AWT, Swing, JavaFX & SWT 4
M Hallo Herr Uhres, Frage zu DND_Demo: Ausrichten der Panels:) AWT, Swing, JavaFX & SWT 4
P JEditorPane mit HTMLEditorKit Text ausrichten AWT, Swing, JavaFX & SWT 2
G Bündig Ausrichten? AWT, Swing, JavaFX & SWT 11
vogella JLabel - Ausrichten von Text AWT, Swing, JavaFX & SWT 3
frankred SWT Elemente ausrichten AWT, Swing, JavaFX & SWT 9
C TableHeader in JTable ausrichten ? AWT, Swing, JavaFX & SWT 2
J GUI Komponenten ausrichten? AWT, Swing, JavaFX & SWT 2
E JFrame ausrichten AWT, Swing, JavaFX & SWT 2
L JList ausrichten funktioniert nicht AWT, Swing, JavaFX & SWT 6
B BorderLayout/JSplitPane Problem beim Ausrichten AWT, Swing, JavaFX & SWT 5
J GridBagLayout JLabels links ausrichten + vertikaler Freiraum AWT, Swing, JavaFX & SWT 4
A Komponenten in JTree ausrichten AWT, Swing, JavaFX & SWT 2
F GridLayout horizontal ausrichten AWT, Swing, JavaFX & SWT 6
V SWT: Label vertikal ausrichten AWT, Swing, JavaFX & SWT 11
A JLabel links ausrichten AWT, Swing, JavaFX & SWT 4
TRunKX JTextField will sich nicht richtig ausrichten. AWT, Swing, JavaFX & SWT 2
G Komponenten ausrichten unter Swing AWT, Swing, JavaFX & SWT 7
G Schrift vertikal ausrichten AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben