kostenloser Webspace werbefrei: lima-city


BoxLayout linksbündig

lima-cityForumProgrammiersprachenJava

  1. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Hallo zusammen,

    mein gesamter Content ist ein BorderLayout. Im Westen des BorderLayouts habe ich ein BoxLayout, welches wiederum vier FlowLayouts untereinander hat, welche jeweils eine Checkbox und einen Text nebeneinander haben. Diese FlowLayouts sollen linksbündig sein. Das ist mein Code, welcher den Westen des BorderLayouts füllt:

    JPanel pAntworten = new JPanel();
    pAntworten.setLayout(new BoxLayout(pAntworten, BoxLayout.Y_AXIS));
    JPanel pAntwort[] = new JPanel[anzAntworten];
    
    for(int i = 0; i < anzAntworten; i++){
    	lAntwort[i] = new JLabel(antworten[i].getSymbol() + ": " + antworten[i].getText());
    	cbAntwort[i] = new JCheckBox();
    	
    	pAntwort[i] = new JPanel(new FlowLayout());
    	pAntwort[i].setAlignmentX(Component.LEFT_ALIGNMENT);
    			
    	pAntwort[i].add(cbAntwort[i]);
    	pAntwort[i].add(lAntwort[i]);
    			
    	pAntworten.add(pAntwort[i]);
    }
    content.add(pAntworten, BorderLayout.WEST);


    Wie ihr seht habe ich schon versucht die einzelnen FlowLayouts linksbündig zu machen, das klappt aber nicht. Es sieht bei mir so aus:

    http://img5.fotos-hochladen.net/uploads/quiz7yxvhstr5l.png

    Weiß jemand was ich ändern muss?

    Viele Grüße :)
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Was du auf jeden Fall tun kannst: die FlowLayouts durch weitere BorderLayouts o.ä. ersetzen, wo in West je eine Checkbox ist und in Center das Label. Problematisch wirds da allerdings, sobald nicht überall nur eine Checkbox drin ist.

    Alternativ gab es mal bei den JDK-Beispielen ein »LabeledPairLayout«, mit dem du vermutlich genau das hinbekommst, oder spätestens nach kleinen Anpassungen … Code:
    import java.awt.*;
    import javax.swing.*;
    import java.util.*;
    
    public class LabeledPairLayout implements LayoutManager {
    	Vector labels = new Vector();
    	Vector fields = new Vector();
    
    	int yGap = 2;
    	int xGap = 2;
    
    	public void addLayoutComponent(String s, Component c) {
    		if (s.equals("label")) {
    			labels.addElement(c);
    		}  else {
    			fields.addElement(c);
    		}
    	}
    
    	public void layoutContainer(Container c) {
    		Insets insets = c.getInsets();
    
    		int labelWidth = 0;
    		Enumeration labelIter = labels.elements();
    		while(labelIter.hasMoreElements()) {
    			JComponent comp = (JComponent)labelIter.nextElement();
    			labelWidth = Math.max( labelWidth, comp.getPreferredSize().width );
    		}
    
    		int yPos = insets.top;
    
    		Enumeration fieldIter = fields.elements();
    		labelIter = labels.elements();
    		while(labelIter.hasMoreElements() && fieldIter.hasMoreElements()) {
    			JComponent label = (JComponent)labelIter.nextElement();
    			JComponent field = (JComponent)fieldIter.nextElement();
    			int height = Math.max(label.getPreferredSize().height, field.getPreferredSize().height);
    			label.setBounds( insets.left, yPos, labelWidth, height ); 
    			field.setBounds( insets.left + labelWidth + xGap, 
    					 yPos, 
    					 c.getSize().width - (labelWidth +xGap + insets.left + insets.right), 
    					 height ); 
    			yPos += (height + yGap);
    		}
    
    	}
    
    	public Dimension minimumLayoutSize(Container c) {
    		Insets insets = c.getInsets();
    
    		int labelWidth = 0;
    		Enumeration labelIter = labels.elements();
    		while(labelIter.hasMoreElements()) {
    			JComponent comp = (JComponent)labelIter.nextElement();
    			labelWidth = Math.max( labelWidth, comp.getPreferredSize().width );
    		}
    
    		int yPos = insets.top;
    
    		labelIter = labels.elements();
    		Enumeration fieldIter = fields.elements();
    		while(labelIter.hasMoreElements() && fieldIter.hasMoreElements()) {
    			JComponent label = (JComponent)labelIter.nextElement();
    			JComponent field = (JComponent)fieldIter.nextElement();
    			int height = Math.max(label.getPreferredSize().height, field.getPreferredSize().height);
    			yPos += (height + yGap);
    		}
    		return new Dimension( labelWidth * 3 , yPos );
    	}
    
    	public Dimension preferredLayoutSize(Container c) {
    		Dimension d = minimumLayoutSize(c);
    		d.width *= 2;
    		return d;
    	}
    
    	public void removeLayoutComponent(Component c) {}
    }
  4. Du musst das FlowLayout links ausrichten, also
    new FlowLayout(FlowLayout.LEFT))
    .
  5. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    sfhdd schrieb:
    Du musst das FlowLayout links ausrichten, also
    new FlowLayout(FlowLayout.LEFT))
    .


    Sehr gut danke, das hat das Problem behoben :) Hab recht lange gesucht und nirgendwo diese Antwort gefunden, also danke :) Und danke auch an die anderen :)
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!