Problem mit Swing Komponenten

Stephan2009

Aktives Mitglied
Hallo zusammen, mein Problem ist das ich nicht genau weiß wie ich hier weitere Panels oder Buttons einsetzen kann weil ich von JPanel erbe hier mal der Code

Java:
 static String string = "Polizei";
	    static String string1 = "Feuerwehr";
	    static String string2 = "Rettungsdienst";

	    JLabel picture;
	    
	    Container cont=getRootPane();
	    JPanel panel1=new JPanel();
	    

	    public Benutzereinstellung() {
	        super(new BorderLayout());
	        
	        panel1.add(new JLabel("Benutzereinstellung:"));
	        cont.add(panel1,BorderLayout.NORTH);
	        
	        //RadioButtons
	        JRadioButton radiobutton1 = new JRadioButton(string);
	        radiobutton1.setMnemonic(KeyEvent.VK_B);
	        radiobutton1.setActionCommand(string);
	        radiobutton1.setSelected(true);

	        JRadioButton radiobutton2 = new JRadioButton(string1);
	        radiobutton2.setMnemonic(KeyEvent.VK_C);
	        radiobutton2.setActionCommand(string1);

	        JRadioButton radiobutton3 = new JRadioButton(string2);
	        radiobutton3.setMnemonic(KeyEvent.VK_D);
	        radiobutton3.setActionCommand(string2);

	        //Gruppieren der Radiobuttons
	        ButtonGroup group = new ButtonGroup();
	        group.add(radiobutton1);
	        group.add(radiobutton2);
	        group.add(radiobutton3);


	        radiobutton1.addActionListener(this);
	        radiobutton2.addActionListener(this);
	        radiobutton3.addActionListener(this);


	        // Ersetze das Label durch unterschiedliche Bilder (Gruppierung)
	        picture = new JLabel(createImageIcon("images/" + string + ".gif"));

	        // Größe Bilder festlegen
	        picture.setPreferredSize(new Dimension(300, 300));


	        // Zum Panel hinzufügen
	        JPanel radioPanel = new JPanel(new GridLayout(0, 1));
	        radioPanel.add(radiobutton1);
	        radioPanel.add(radiobutton2);
	        radioPanel.add(radiobutton3);

	        add(radioPanel, BorderLayout.LINE_START); // Buttons Rechts anordnen
	        add(picture, BorderLayout.SOUTH);
	        //setBorder(BorderFactory.createEmptyBorder(20,20,20,20)); // Leere Border um Buttons nach rechts zu schieben
	        
	    }

Ich benötige diese Klasse als Panel weil ich diese in eine JTAbbedPane lade. Wie füg ich am besten weitere Komponenten in diese Klasse ein weil ich hier Container cont=getContentPane(); nicht nutzen kann. Dankeschön.
 
Java:
 JPanel panel1=new JPanel();
panel1.add(new JLabel("Benutzereinstellung:"));

Danach hab ich das immer in einen Container gesetzt das geht hier aber nicht weil ich festlegen will wohin er ins BorderLayout soll.
 
Ich versteh die Frage nicht so richtig, aber wenn du in dein JPanel weitere Komponenten setzen willst, brauchst du für dein JPanel einen LayoutManager. Standardmäßig hat JPanel wohl das FlowLayout.
 
Also hier mal der ganze Code meiner Klasse

Java:
public class Benutzereinstellung extends JPanel implements ActionListener {
         
		static String string = "Polizei";
	    static String string1 = "Feuerwehr";
	    static String string2 = "Rettungsdienst";

	    JLabel picture;
	    
	    //Container cont=getRootPane();
	    JPanel panel1=new JPanel();
	    

	    public Benutzereinstellung() {
	        super(new BorderLayout());
	        
	        panel1.add(new JLabel("Benutzereinstellungen:"),BorderLayout.NORTH);
	        //cont.add(panel1,BorderLayout.NORTH);
	        
	        //RadioButtons
	        JRadioButton radiobutton1 = new JRadioButton(string);
	        radiobutton1.setMnemonic(KeyEvent.VK_B);
	        radiobutton1.setActionCommand(string);
	        radiobutton1.setSelected(true);

	        JRadioButton radiobutton2 = new JRadioButton(string1);
	        radiobutton2.setMnemonic(KeyEvent.VK_C);
	        radiobutton2.setActionCommand(string1);

	        JRadioButton radiobutton3 = new JRadioButton(string2);
	        radiobutton3.setMnemonic(KeyEvent.VK_D);
	        radiobutton3.setActionCommand(string2);

	        //Gruppieren der Radiobuttons
	        ButtonGroup group = new ButtonGroup();
	        group.add(radiobutton1);
	        group.add(radiobutton2);
	        group.add(radiobutton3);


	        radiobutton1.addActionListener(this);
	        radiobutton2.addActionListener(this);
	        radiobutton3.addActionListener(this);


	        // Ersetze das Label durch unterschiedliche Bilder (Gruppierung)
	        picture = new JLabel(createImageIcon("images/" + string + ".gif"));

	        // Größe Bilder festlegen
	        picture.setPreferredSize(new Dimension(300, 300));


	        // Zum Panel hinzufügen
	        JPanel radioPanel = new JPanel(new GridLayout(0, 1));
	        radioPanel.add(radiobutton1);
	        radioPanel.add(radiobutton2);
	        radioPanel.add(radiobutton3);

	        add(radioPanel, BorderLayout.LINE_START); // Buttons Rechts anordnen
	        add(picture, BorderLayout.SOUTH);
	        //setBorder(BorderFactory.createEmptyBorder(20,20,20,20)); // Leere Border um Buttons nach rechts zu schieben
	        
	    }

	    
	    public void actionPerformed(ActionEvent e) {
	        picture.setIcon(createImageIcon("images/"+ e.getActionCommand()+ ".gif"));	                                                                             
	    }

	    protected static ImageIcon createImageIcon(String path) {
	        java.net.URL imgURL = Benutzereinstellung.class.getResource(path);
	        if (imgURL != null) {
	            return new ImageIcon(imgURL);
	        } else {
	            System.err.println("Bilder wurden nicht gefunden! " + path);
	            return null;
	        }
	    }

Diese Klasse wird einer Gui übergeben die JTabbedPane mit anzeigt. Wenn ich nun die Tab anklicke erscheint dieser Inhalt meiner Klasse mit den RadioButtons. Ich möchte nun aber in dieser Klasse noch Buttons, Panels usw einsetzten sie werden aber nicht angezeigt würde mich freuen wenn ihr mit helfen könntet.
 
Ich möchte nun aber in dieser Klasse noch Buttons, Panels usw einsetzten sie werden aber nicht angezeigt
Wo und wie hast du denn diese Komponenten eingefügt?
 
Zuletzt bearbeitet von einem Moderator:
Habe noch eine Frage zur Ausrichtung der Elemente wie Buttons oder Textfelder und zwar wenn ich diese im BorderLayout Norden setzte möchte ich die Elemente gerne links oder rechts ausrichten gibts es da eine Möglichkeit für?
 
Habe noch eine Frage zur Ausrichtung der Elemente wie Buttons oder Textfelder und zwar wenn ich diese im BorderLayout Norden setzte möchte ich die Elemente gerne links oder rechts ausrichten gibts es da eine Möglichkeit für?

Also zunächst einmal kann man Komponenten mit verschiedenen Layouts verschachteln.

Beispiel:

Du erstellst dir ein JPanel mit Boxlayout.X-AXIS und machst dann

Code:
panel.add(button1);
panel.add(button2);
panel.add(Box.createGlue());
panel.add(textfeld);

und dann noch

Code:
getContentPane().add(BorderLayout.NORTH, panel);

dann hast du oben links die beiden Knöpfe und ganz rechts dein Textfeld.

...ist wie gesagt nur ein Beispiel und lässt sich beliebig mit den verschiedenen LayoutManagern variieren.

Gruß Vanny
 
Zuletzt bearbeitet von einem Moderator:
Ich würd dann oben einfach ein GridLayout-Panel mit 3 Spalten und einer Zeile machen ("new GridLayout(3, 1)" oder andersrum). Zuerst mit add die linke Komponente, dann
Code:
panel.add(new JLabel(" "));
Und dann die rechte Komponente. So hast du sogar eine kleien Trennung in der Mitte.

Das Panel mit dem GridLayout-Panel muss du nebenbei dann nur noch dem BorderLayout übergeben. Das ist dann, wie gesagt, eine Verschachtelung der Layouts.

Gruß, Thomas
 

Zurück
Oben