Kleines Layout Problem

Status
Nicht offen für weitere Antworten.

jawohl

Mitglied
Also ich möchte 9 Komponenten in einem Panel anordnen nur läuft das noch nicht so ganz wie ich es mir vorstelle:

es Soll so aussehen

------------------------------------------------
| Label | TextField.................... | button|
| Label | TextField.................... | button|
| Label | TextField.................... | button|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
------------------------------------------------

und so wird es angezeigt:

------------------------------------------------
| |
| |
| Label | TextField | button|
| |
| ________________________________ |
| |
| |
| Label | TextField | button|
| |
| ________________________________ |
| |
| |
| Label | TextField | button|
| |
| |
------------------------------------------------

Habe es versucht mit einem SpringLayout zu lösen und etwas besseres fällt mir nicht ein

Code:
	filepathCard.setSize(400,100);
        			filepathCard.setMaximumSize(new Dimension(400,100));
        			configPanel.add(filepathCard,"FilePath");
        			filepathCard.setLayout(new javax.swing.SpringLayout());
              		    //Online Pfad
        				onlinepfadLabel.setText("Online Pfad");
        				onlinepfadButton.setIcon(new javax.swing.ImageIcon(cfg.getGifPath()+"\\toolbarButtonGraphics\\general\\open16.gif"));
        				filepathCard.add(onlinepfadLabel);
        				filepathCard.add(onlinepfadTextfield);
        				filepathCard.add(onlinepfadButton);
        				//Lokaler Pfad
        				lokalpfadLabel.setText("Lokaler Pfad");
        				lokalpfadButton.setIcon(new javax.swing.ImageIcon(cfg.getGifPath()+"\\toolbarButtonGraphics\\general\\open16.gif"));
 	      				filepathCard.add(lokalpfadLabel);
        				filepathCard.add(lokalpfadTextfield);
        				filepathCard.add(lokalpfadButton);
        				//Gif Pfad
        				gifpfadLabel.setText("Gif Pfad");
        				gifpfadButton.setIcon(new javax.swing.ImageIcon(cfg.getGifPath()+"\\toolbarButtonGraphics\\general\\open16.gif"));
 	    				filepathCard.add(gifpfadLabel);
        				filepathCard.add(gifpfadTextfield);
        				filepathCard.add(gifpfadButton);
        				//Layout
        				 SpringUtilities.makeCompactGrid(filepathCard,
                               3, 3, 	//rows, cols
                               6, 6,        //initX, initY
                               6, 6);       //xPad, yPad
 
hab ich schon probiert allerdings wirds dann auch gleich angezeigt:
-> ich will alle komponenten ganz oben haben
 
Ich mach das jeweils mit einem zusätzlichen Panel. Auf das Panel kommen die 9 Komponenten (GridBagLayout), und das Panel kommt dann auf irgendeine Unterlage (ebenfalls mit GridBagLayout).
 
hallo,

ich würde folgendes probieren...

baue eine eigene komponente, die das label, das textfield und den button beinhaltet.
wenn du möchtest, das das textfield linksbündig ist, dann lagere es nochmals aus.

das ganze sollte ungefähr so ausschauen:

das ist die view, damit das textfield linksbündig ist:

Code:
public class TextFieldView extends JPanel{

	public TextFieldView() {
		BorderLayout layout = new BorderLayout();
		setLayout(layout);
		
		JTextField field = new JTextField(10);
		add(field, BorderLayout.WEST);
	}
}

dann machst du:
Code:
public class KomponentenView extends JPanel {

	public KomponentenView() {
		BorderLayout layout = new BorderLayout();
		setLayout(layout);
		
		JLabel label = new JLabel("Label: ");
		add(label, BorderLayout.WEST);
		
		TextFieldView textfield = new TextFieldView();
		add(textfield, BorderLayout.CENTER);
		
		JButton button = new JButton("test");
		add(button, BorderLayout.EAST);
		
	}
}

die wiederum packst du dann in einem frame zusammen:

public class MainFrame extends JFrame {

public MainFrame() {
GridLayout layout = new GridLayout(6,1);
getContentPane().setLayout(layout);

KomponentenView view1 = new KomponentenView();
getContentPane().add(view1);

KomponentenView view2 = new KomponentenView();
getContentPane().add(view2);

KomponentenView view3 = new KomponentenView();
getContentPane().add(view3);

}
}

das sollte dein gewünschtes layout entsprechen... wenn du jetzt den mainframe startest und das fenster größer ziehst
müsste eigentlich das textfield bei dem label bleiben und der button rechtsbündig weggehen....

Code:
	public static void main(String[] args) {
		MainFrame frame = new MainFrame();
		frame.pack();
		frame.setVisible(true);
	}

damit wäre zumindest das layoutproblem gelöst... für die kommunikation kannst du das jederzeit mit controllern erweitern, die actions der einzelnen komponenten bündeln und im mainframe z. b. abarbeiten.....

aber das sind alles nur ideen.. ich weis ja nich, was du letztendlich vor hast...
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben