GridBagLayout stellt Element zu klein da



  • Hallo.

    Ich bin dabei eine StoppUhr zu programmieren. Ich programmieren meine GUI mit GridBagLayout. Allerdinsg werde die Elemente zu klein dargestellt. Besser gesagt wir nur ein Bruchteil angeziegt.

    Hier emin Code :

    package Clock;
    
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JPanel;
    
    import SevenSegmentDisplay.SevenSegmentColon;
    import SevenSegmentDisplay.SevenSegmentNumber;
    
    public class StopWatch extends JPanel{
    
    	private SevenSegmentNumber sevenSegmentHour1, sevenSegmentHour2, sevenSegmentMinute1, sevenSegmentMinute2, sevenSegmentSecond1, sevenSegmentSecond2;
    	private SevenSegmentColon colon1, colon2;
    	private boolean showSeconds		= false;
    	private JButton incHour, decHour, incMinute, decMinute, incSecond, decSecond;
    
    	/**
    	 * 
    	 * @param clockLength				- the length of the clock
    	 * @param fillColor					- the fill color
    	 * @param borderColor				- the border color
    	 * @param showSeconds				- show seconds or not
    	 */
    	public StopWatch(int clockLength, Color fillColor, Color borderColor, boolean showSeconds){
    		this.showSeconds		= showSeconds;
    
    		//======================================= //
    		// calculate the segment size
    		//======================================= //
    		int segmentLength			= 0;
    		if (showSeconds == true){
    			segmentLength 			= 2 + (clockLength / 8) ;
    		}else{
    			segmentLength 			= 2 + (clockLength / 5) ;
    		}
    
    		//======================================= //
    		// create the elements
    		//======================================= //
    		sevenSegmentHour1			= new SevenSegmentNumber(segmentLength, fillColor, borderColor);
    		sevenSegmentHour2			= new SevenSegmentNumber(segmentLength, fillColor, borderColor);
    		colon1						= new SevenSegmentColon(segmentLength, fillColor, borderColor);
    		sevenSegmentMinute1			= new SevenSegmentNumber(segmentLength, fillColor, borderColor);
    		sevenSegmentMinute2			= new SevenSegmentNumber(segmentLength, fillColor, borderColor);
    
    		if (showSeconds == true){
    			sevenSegmentSecond1		= new SevenSegmentNumber(segmentLength, fillColor, borderColor);
    			sevenSegmentSecond2		= new SevenSegmentNumber(segmentLength, fillColor, borderColor);
    			colon2					= new SevenSegmentColon(segmentLength, fillColor, borderColor);
    		}
    
    		incHour						= new JButton(new ImageIcon("Icons/plus.png"));
    		decHour						= new JButton(new ImageIcon("Icons/minus.png"));
    		incMinute					= new JButton(new ImageIcon("Icons/plus.png"));
    		decMinute					= new JButton(new ImageIcon("Icons/minus.png"));
    
    		if (showSeconds == true){
    			incSecond				= new JButton(new ImageIcon("Icons/plus.png"));
    			decSecond				= new JButton(new ImageIcon("Icons/minus.png"));
    		}
    
    		setPreferredSize(new Dimension(clockLength, 100));
    
    		//======================================= //
    		// set the layout
    		//======================================= //
    		GridBagLayout gb			= new GridBagLayout();
    		GridBagConstraints gbc		= new GridBagConstraints();
    		setLayout(gb);
    
    		gbc.gridx					= 0;
    		gbc.gridy					= 0;
    		gbc.gridheight				= 1;
    		gbc.gridwidth				= 1;
    		gb.setConstraints(sevenSegmentHour1, gbc);
    		add(sevenSegmentHour1);
    
    		gbc.gridx					= 1;
    		gbc.gridy					= 0;
    		gbc.gridheight				= 1;
    		gbc.gridwidth				= 1;
    		gb.setConstraints(sevenSegmentHour2, gbc);
    		add(sevenSegmentHour2);
    
    		gbc.gridx					= 0;
    		gbc.gridy					= 1;
    		gbc.gridheight				= 1;
    		gbc.gridwidth				= 1;
    		gb.setConstraints(incHour, gbc);
    		add(incHour);
    
    		gbc.gridx					= 1;
    		gbc.gridy					= 1;
    		gbc.gridheight				= 1;
    		gbc.gridwidth				= 1;
    		gb.setConstraints(decHour, gbc);
    		add(decHour);		
    	}
    }
    

    Hat jemand eine Idee ??? 😕



  • Du rufst nirgendwo pack() auf. IIRC sorgt das erst für die Größen- und Positionsbestimmung.



  • pack() geht auf JPanel nicht



  • Da meine Kristallkugel futsch ist kann ich mir jetzt nicht genau vorstellen was genau nicht stimmt.

    Ein Screenshot wäre vielleicht nicht schlecht 😉





  • hat keiner eine idee ??
    Habe noch ein bischen mit dem Layout rum gespielt. Wenn ich das GridLayout verwende dann wierden die Elemente richtig angezeigt.



  • Du musst bei den add-Methoden die aktuellen Constraints mit übergeben.

    this.add(sevenSegmentHour1, gbc);
    // usw...
    

    EDIT: Hab gerade gesehen dass du vorher setConstraints() aufrufst. Probier mal beim Parent von StopWatch pack() aufzurufen.



  • Leider hat das keinen eroflg gebarcht. habe beide ausprobiert.



  • Also ich verstehe nicht genau, was das Problem ist. Liegt es daran, dass die Komponenten nicht die volle Grösse brauchen?

    Falls ja, dann versuche mal
    gbc.fill = GridBagConstraints.BOTH
    oder sowas in der Art. Bin jetzt nicht mehr 100% sicher obs genau so heisst.



  • Ja genau das ist das Problem. Auf dem Bild sind ja die Buttons zu erkennen, und da drüber nur ein kleiner Ausschnitt vond er 7 - Segment Anzeige.

    Danke für deinen Hinweis werde ihn mal probieren.



  • Falls das nicht klappt:
    Könnte es sein, dass dein JPanel viel zu klein ist. Also dass er gar nicht das ganze Fenster ausfüllt? Ich hatte das Problem auch schon.

    Kannst ja mal einen Rahmen um den JPanel machen, dann siehst du sehr schnell wie gross der JPanel wirklich ist.



  • Die größe scheint zu stimmen.

    Mir ist aufgefallen, wenn ichd as GridLayout verwende, stellt er die eElement richtig da.


Anmelden zum Antworten