Hi,
ich muss in meinem Programm ein innen liegendes Layout zur Laufzeit verändern, ich habe aber keine Ahnung wie ich das machen soll...
Ich habe ja in der Methode panelLayoutErzeugen() ein GridLayout(0,1,10,10) gesetzt. Mit den Radiobuttons möchte ich das Layout auf (0,1,50,50) und (0,1,100,100) verändern. Das habe ich über den Listener versucht, klappt aber nicht. Gibt keine Fehlermeldung, es passiert einfach nichts, außer dass sich der Text ändert, wenn ich auf den mittleren Button und dann auf anwenden klicke. Danach kann ich den Text mit dem Programm auch nicht mehr ändern.
Hier der Code:
Kann mir jemand helfen?
ich muss in meinem Programm ein innen liegendes Layout zur Laufzeit verändern, ich habe aber keine Ahnung wie ich das machen soll...
Ich habe ja in der Methode panelLayoutErzeugen() ein GridLayout(0,1,10,10) gesetzt. Mit den Radiobuttons möchte ich das Layout auf (0,1,50,50) und (0,1,100,100) verändern. Das habe ich über den Listener versucht, klappt aber nicht. Gibt keine Fehlermeldung, es passiert einfach nichts, außer dass sich der Text ändert, wenn ich auf den mittleren Button und dann auf anwenden klicke. Danach kann ich den Text mit dem Programm auch nicht mehr ändern.
Hier der Code:
Java:
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DecimalFormat;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.TitledBorder;
public class LayoutVeraendernGUI extends JFrame{
private static final long serialVersionUID = 3006212012028893840L;
//drei RadioButtons zum Verändern des Layouts
private JRadioButton klein, mittel, gross;
//zwei Schaltflächen
private JButton schaltflaecheAnwenden, schaltflaecheBeenden;
//ein Label für die Anzeige, welches Layout aktiv ist
private JLabel layout;
//die innere Klasse für die Ereignisverarbeitung
class MeinListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
//wurde auf Beenden geklickt?
//dann das Programm beenden
if (e.getActionCommand().equals("ende"))
System.exit(0);
//wurde Anwenden geklickt? Text und Layout ändern
if (e.getActionCommand().equals("anwenden"))
if (klein.isSelected()) {
layout.setText("kleine Layout");
}
if (mittel.isSelected()) {
layout.setText("mittlere Layout");
panelLayoutErzeugen().setLayout(new GridLayout(0, 1, 50, 50));
}
if (gross.isSelected()) {
layout.setText("große Layout");
}
}
}
//der Konstruktor
public LayoutVeraendernGUI(String titel) {
super(titel);
//insgesamt vier Panels
JPanel panelEinAus, panelAuswahl, panelButtons, gross;
//die Panels über die Methoden erstellen
panelEinAus = panelLayoutErzeugen();
panelAuswahl = panelAuswahlErzeugen();
panelButtons = panelButtonErzeugen();
//das Border-Layout benutzen
//es ist Standard und muss nicht gesetzt werden
//die Panels hinzufügen
//die beiden größeren Panel fassen wir noch einmal zusammen
gross = new JPanel();
gross.add(panelEinAus);
gross.add(panelAuswahl);
//die beiden kommen in die Mitte
add(gross,BorderLayout.CENTER);
//das Panel mit den Buttons nach rechts
add(panelButtons, BorderLayout.EAST);
//die Standard-Aktion setzen
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//packen und anzeigen
pack();
setVisible(true);
}
//die Methode erzeugt das Panel für das Layout
//und liefert es zurück
private JPanel panelLayoutErzeugen() {
JPanel tempPanel = new JPanel();
layout = new JLabel("kleine Layout", SwingConstants.CENTER);
//das Panel bekommt ein GridLaoyut mit zwei Spalten und etwas Abstand
tempPanel.setLayout(new GridLayout(0, 1, 10, 10));
//Label für den ersten Text
tempPanel.add(new JLabel("Sie haben das ", SwingConstants.CENTER));
//Label für den veränderbaren Text
tempPanel.add(layout);
//Label für den dritten Text
tempPanel.add(new JLabel(" gewählt!", SwingConstants.CENTER));
//einen Rahmen um das Panel ziehen
tempPanel.setBorder(new TitledBorder("Layout"));
//das Panel zurückliefern
return tempPanel;
}
//Das Panel mit den AuswahlButtons
private JPanel panelAuswahlErzeugen() {
JPanel tempPanel = new JPanel();
//es enthält die Gruppe mit den Optionsfeldern
klein = new JRadioButton("kleines Layout");
mittel = new JRadioButton("mittleres Layout");
gross = new JRadioButton("großes Layout");
ButtonGroup gruppe = new ButtonGroup();
gruppe.add(klein);
gruppe.add(mittel);
gruppe.add(gross);
//klein ist ausgewählt
klein.setSelected(true);
//das Panel bekommt ein GridLaoyut mit 1 Spalte
tempPanel.setLayout(new GridLayout(0, 1));
tempPanel.add(klein);
tempPanel.add(mittel);
tempPanel.add(gross);
//und einen Rahmen
tempPanel.setBorder(new TitledBorder("Layout auswählen: "));
//das Panel zurückliefern
return tempPanel;
}
//die Methode erzeugt das Panel für die Schaltflächen
//und liefert es zurück
private JPanel panelButtonErzeugen() {
JPanel tempPanel = new JPanel();
schaltflaecheBeenden = new JButton(" Beenden ");
//das Aktion-Command setzen
schaltflaecheBeenden.setActionCommand("ende");
schaltflaecheAnwenden = new JButton("Anwenden");
schaltflaecheAnwenden.setActionCommand("anwenden");
//Zwischenpanel für die Schaltflächen
//ebenfalls ein GridLayout
tempPanel.setLayout(new GridLayout(0, 1));
tempPanel.add(schaltflaecheAnwenden);
//ein leeres Label einfügen
tempPanel.add(new JLabel());
tempPanel.add(schaltflaecheBeenden);
//die Schaltflächen mit dem Listener verbinden
MeinListener listener = new MeinListener();
schaltflaecheBeenden.addActionListener(listener);
schaltflaecheAnwenden.addActionListener(listener);
//das Panel zurückliefern
return tempPanel;
}
}