einfügen eines veränderlichen Panels in ein Frame

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,
habe folgendes Problem : habe ein kleines Programm geschrieben, geht in etwa so
Code:
 public class MyFrame extends JFrame
{
public myFrame
{
...
//hier werden verschiedene Buttons,Panels usw. initialisiert
...
}

public static void main(....)
{
 MyFrame myFrame = new MyFrame();
}

public void actionPerformed(Event evt)
{
...
//*bei einem Event, z.B. drücken eines Buttons soll ein neues JPanel ins myFrame eingefügt werden, mit mehreren JTextFiled usw.*/
textPanel = new JPanel();
textPanel.setLayout(...);
myFrame.getContentPane().add(textPanel);
}
}
das klappt auch,nur werden die neuen Elemente im myFrame nicht mehr gezeichnet (da sie nicht im Construtor drin stehen ?). Ich kann aber das textPanel erst, nachdem ein ActionEvent passiert ist, einfügen, da ich davor nicht weiss wie es aussehen wird. Ich kann natürlich das textPanel auch im Constructor implementieren und dann erst in actionPerformed verändern, aber das hat den gleichen Effekt, das man die Änderungen nicht mehr sieht.

Kann mir jemand sagen, wie ich bei so einem Problem vorgehen kann? Gibt es ein Weg, wie man bei einem Frame einen Refresh, also so etwas in der Art wie repaint() machen kann?
 
B

Beni

Gast
Am einfachsten das ganze Programm posten (wenn's ein kleines ist, wie du selbst sagst), damit die Helfer das ganze ausprobieren können (P.S. wenn sie dazu nur einmal copy-paste machen müssen sind sie sehr glücklich), oder direkt einen Fehler finden, an den Du nicht gedacht hast :wink:

Ansonsten: ist das ContentPane leer? welches Layout hat es? wird das actionPerformed überhaupt aufgerufen? ...

mfg Beni
 
G

Guest

Gast
ok, wollte nur nicht zu viel überflüssigen Code reinschreiben
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MyFrame extends JFrame implements ActionListener,ItemListener
{
	private MyPanel myPanel;
	private JPanel startChoicePanel, inputsChoicePanel, settingsPanel;
	private JButton newButton, createButton, beispiel1Button, beispiel2Button;
	private Choice startChoice, inputsChoice;
	private JLabel startLabel, inputsLabel;
	private GridLayout tableGridLayout;
	private int inputs, start;
	
	public MyFrame(String title)
	{
		super(title);
		addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});
		
		Container contentPane = getContentPane();
		contentPane.setLayout(new BorderLayout());
		
		/*	Panels initialisieren	*/
		settingsPanel = new JPanel();
		settingsPanel.setLayout(new GridLayout(6,1,2,2));		
		startChoicePanel = new JPanel();
		startChoicePanel.setLayout(new FlowLayout());
		inputsChoicePanel = new JPanel();
		inputsChoicePanel.setLayout(new FlowLayout());	
		
		
		/* Labels & Choices hinzufügen */
		startLabel = new JLabel("Text");
		startChoice = new Choice();
		startChoice.add("1");
		startChoice.add("2");
		startChoice.add("3");
		startChoice.addItemListener(this);
		startChoicePanel.add(startLabel);
		startChoicePanel.add(startChoice);
		
		inputsLabel = new JLabel("Anzahl Inputs");
		inputsChoice = new Choice();
		inputsChoice.add("1");
		inputsChoice.add("2");
		inputsChoice.add("3");
		inputsChoice.add("4");
		inputsChoice.add("5");
		inputsChoice.addItemListener(this);
		inputsChoicePanel.add(inputsLabel);
		inputsChoicePanel.add(inputsChoice);
		
		settingsPanel.add(startChoicePanel);
		settingsPanel.add(inputsChoicePanel);

		
		/* Buttons hinzufügen */
		newButton = new JButton("neu");
		newButton.addActionListener(this);
		beispiel1Button = new JButton("Beispiel 1");
		beispiel1Button.addActionListener(this);
		beispiel2Button = new JButton("Beispiel 2");
		beispiel2Button.addActionListener(this);
		createButton = new JButton("OK");
		createButton.addActionListener(this);
		settingsPanel.add(newButton);
		settingsPanel.add(beispiel1Button);
		settingsPanel.add(beispiel2Button);
		settingsPanel.add(createButton);
		
		
		contentPane.add(settingsPanel,BorderLayout.WEST);
	}
	
	public void actionPerformed(ActionEvent evt)
	{
		String command = evt.getActionCommand();
		if (command.equals("neu") && start != 0 && inputs !=0)
		{
			myPanel = new MyPanel(start,inputs);
			this.getContentPane().add(myPanel,BorderLayout.EAST);
		}
	}
	
	public void itemStateChanged(ItemEvent evt)
	{
		Choice sourceChoice = (Choice)evt.getSource();
		String command = evt.getItem().toString();
		if (sourceChoice.equals(startChoice))
		{
			start = Integer.parseInt(command);
		}
		if (sourceChoice.equals(inputsChoice))
		{
			inputs = Integer.parseInt(command);
		}
		
	}
}

class MyPanel extends JPanel
{
	protected GridLayout gridLayout;
	private JTextField test1,test2,test3;
	
	public MyPanel(int rows, int columns)
	{
		gridLayout = new GridLayout(rows,columns);
		setLayout(gridLayout);
		
		test1 = new JTextField("test1");
		test2 = new JTextField("test2");
		test3 = new JTextField("test3");
		
		this.add(test1);
		this.add(test2);
		this.add(test3);
		
		
	}
}

Das ganze wird aus einem anderen Frame mit einem Button-Klick gestartet
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MainFrame extends JFrame implements ActionListener
{
	
	private JButton tableButton;
	private JPanel buttonleiste; 
	private BorderLayout borderLayout;
	private MyFrame myFrame;
	
	
	public MainFrame(String title)
	{
		super(title);
		addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});
		
		Container contentPane = getContentPane();
		contentPane.setLayout(new BorderLayout());

		/*	Panels initialisieren	*/	
		buttonleiste = new JPanel();
		borderLayout = new BorderLayout();
		buttonleiste.setLayout(borderLayout);
		buttonleiste.setBackground(Color.lightGray);
		

		/* Buttons hinzufügen */
		tableButton = new JButton("Table");
		tableButton.addActionListener(this);

		buttonleiste.add(tableButton,borderLayout.CENTER);	
		
		contentPane.add(buttonleiste,BorderLayout.NORTH);
	
		
		
	}

	public static void main(String args[])
	{
		MainFrame mainFrame = new MainFrame("MainFrame");
		mainFrame.setSize(600,600);
		mainFrame.setVisible(true);

	}

	
	public void actionPerformed(ActionEvent evt)
	{
		String command = evt.getActionCommand();
		if (command.equals("Table"))
		{
			myFrame = new MyFrame("Table");
			myFrame.setSize(400,400);
			myFrame.setVisible(true);			
		}
	}
}
Das ganze funktioniert einwandfrei, nur das Problem ist, dass beim Einfügen von myPanel nichts neu gezeichnet wird, erst wenn ich das Fenster manuell mit der Maus kurz auseinanderziehe, erscheinen die neuen Komponenten im Fenster...
 
B

bygones

Gast
versuch es, nachdem du neuen Panel hinzugefügt hast mit repaint(); (oder validate()) - eins von beiden sollte gehen !
 
B

Beni

Gast
deathbyaclown hat recht: validate.

Code:
   public void actionPerformed(ActionEvent evt)
   {
      String command = evt.getActionCommand();
      if (command.equals("neu") && start != 0 && inputs !=0)
      {
         myPanel = new MyPanel(start,inputs);
         this.getContentPane().add(myPanel,BorderLayout.EAST);
         validate();
      }
   }


mfg Beni

P.S. start und inputs sind 0 wenn man nichts verändert hat, setz die doch auf einen Default-Wert von 1 (stimmt ja dann mit dem ComboBoxen überein)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A 3D-Grafik Quelltext eines Würfels einfügen AWT, Swing, JavaFX & SWT 3
W JTabel Header - Einfügen eines Textfeldes AWT, Swing, JavaFX & SWT 3
I Swing: Menü verschwindet beim Einfügen eines Bildes AWT, Swing, JavaFX & SWT 15
S Einfügen eines JTextFields in einen JTree AWT, Swing, JavaFX & SWT 6
T Hintergrundbild einfügen AWT, Swing, JavaFX & SWT 1
S Swing Coding richtig einfügen AWT, Swing, JavaFX & SWT 3
ExceptionOfExpectation MouseListener-Objekte zu den Graphics-Objekten einfügen AWT, Swing, JavaFX & SWT 3
N Bilder auf Button einfügen und mehrmals ändern (ein Button, mehrere ActionListener) AWT, Swing, JavaFX & SWT 2
Ø Ein FXML-File mehrfach einfügen AWT, Swing, JavaFX & SWT 6
G Z Buffer / Depth Buffer in Bufferstrategy einfügen AWT, Swing, JavaFX & SWT 1
H Tabelle in JFrame einfügen AWT, Swing, JavaFX & SWT 1
P Swing Icon einfügen wirft eine Fehlermeldung AWT, Swing, JavaFX & SWT 3
Kirby.exe Bilder in GUI einfügen AWT, Swing, JavaFX & SWT 8
T Bilder bei einem JFrame einfügen AWT, Swing, JavaFX & SWT 4
Hatsi09 Swing JPanel Bild einfügen AWT, Swing, JavaFX & SWT 14
T JFrame Bild einfügen AWT, Swing, JavaFX & SWT 9
K TreeTableView (cellFactory) - wie Daten in Spalten einfügen AWT, Swing, JavaFX & SWT 0
A Swing JPanels dynamisch untereinander einfügen AWT, Swing, JavaFX & SWT 3
L Kalendar als JLabel einfügen AWT, Swing, JavaFX & SWT 3
Q-bert JTextField per Mausklick einfügen AWT, Swing, JavaFX & SWT 3
G Wie Scrollbar einfügen? AWT, Swing, JavaFX & SWT 1
Kanda Sorata Inhalt einer .txt Datei einlesen und in ein Label einfügen (JavaFX) AWT, Swing, JavaFX & SWT 2
D Icon in Menuitem einfügen AWT, Swing, JavaFX & SWT 8
P Jframe Bild einfügen, Hintergrund Farbe ändern, und Button schrift Größe ändern AWT, Swing, JavaFX & SWT 2
MrSnake Bilder aus Unterordner einfügen AWT, Swing, JavaFX & SWT 2
U Java FX Zusätzliches Label per Knopfdruck während der Laufzeit auf Panel einfügen. AWT, Swing, JavaFX & SWT 2
S NetBeans, Panel in Frame einfügen AWT, Swing, JavaFX & SWT 3
F neuen Menüpunkt in jcombobox einfügen AWT, Swing, JavaFX & SWT 1
L Swing Datensätze aus DB in jTable einfügen AWT, Swing, JavaFX & SWT 2
Z Canvas in Frame einfügen. Problem mit 4-Gewinnt AWT, Swing, JavaFX & SWT 1
A Swing Externe Klassen aufrufen und in einem bereits vorhandenen Container einfügen AWT, Swing, JavaFX & SWT 0
GenerationLost Bilder an bestimmten Platz einfügen/Objekte visualisieren AWT, Swing, JavaFX & SWT 1
S Grafik in einer Klassen einfügen/hinzufügen AWT, Swing, JavaFX & SWT 1
D JavaFX Scene Builder 2.0 einfügen einer CheckBoxListCell AWT, Swing, JavaFX & SWT 0
Seikuassi Swing JTextField nimmt kein Einfügen (Strg+V) an AWT, Swing, JavaFX & SWT 4
F Bilder in jFrame einfügen AWT, Swing, JavaFX & SWT 3
I JavaFX BorderPane ins Tree einfügen AWT, Swing, JavaFX & SWT 11
M Image in JTable einfügen AWT, Swing, JavaFX & SWT 9
E JavaFX Bild einfügen AWT, Swing, JavaFX & SWT 6
L Zwei String Array in eine Spalte einfügen AWT, Swing, JavaFX & SWT 1
B Swing JPanel in JScrollPane einfügen AWT, Swing, JavaFX & SWT 2
M Bild in JPanel mit Maus einfügen AWT, Swing, JavaFX & SWT 0
G Scrollbar für das Fenster einfügen AWT, Swing, JavaFX & SWT 3
B JAVAFX icon in ComboBox einfügen AWT, Swing, JavaFX & SWT 5
kaoZ Frage zum einfügen von Componenten AWT, Swing, JavaFX & SWT 14
S Swing JTable zusätzliche Spalte mit einer Checkbox einfügen AWT, Swing, JavaFX & SWT 7
M Swing Mit Java in der GUI einen Belegungsplan einfügen AWT, Swing, JavaFX & SWT 23
H Swing Hintergrundbild in einen JFrame einfügen AWT, Swing, JavaFX & SWT 7
Kenan89 3D Models aus anderen Spielen in eigene einfügen AWT, Swing, JavaFX & SWT 3
K JEditorPane Text einfügen AWT, Swing, JavaFX & SWT 4
S Ein externes Bild in ein JFrame einfügen AWT, Swing, JavaFX & SWT 8
A Textfeld nachträglich einfügen AWT, Swing, JavaFX & SWT 4
C Eigenes Hintergrundbild einfügen AWT, Swing, JavaFX & SWT 6
E Button einfügen AWT, Swing, JavaFX & SWT 6
Karuka 2D-Grafik Bilder in GridLayout einfügen AWT, Swing, JavaFX & SWT 7
C Neue Benutzeroberfläche einfügen? AWT, Swing, JavaFX & SWT 12
C Swing JTable Daten einfügen AWT, Swing, JavaFX & SWT 6
S Probleme jDialog einfügen AWT, Swing, JavaFX & SWT 4
P Bild DIREKT in JFrame einfügen AWT, Swing, JavaFX & SWT 8
H Verschiedene JPanels aus eigenen Klassen in JFrame einfügen, nur ein Panel sichtbar AWT, Swing, JavaFX & SWT 4
R komplette Objekte in JTable einfügen AWT, Swing, JavaFX & SWT 18
M Panel in SWT einfügen AWT, Swing, JavaFX & SWT 12
G Etched Border nur an einer Seite einfügen AWT, Swing, JavaFX & SWT 16
K Bilder nacheinander einfügen AWT, Swing, JavaFX & SWT 3
D Bild in JLabel einfügen AWT, Swing, JavaFX & SWT 15
B Swing JButtons in eine Arraylist<JButton> einfügen AWT, Swing, JavaFX & SWT 2
F Swing Mehrere Textfelder in Scrollpane einfügen und dann zum Scrollen bringen? AWT, Swing, JavaFX & SWT 4
G SWT Button in Composite vor anderem Button einfügen AWT, Swing, JavaFX & SWT 10
Meldanor Swing JTable - Eine neue Zeile vor einer bestehenden Einfügen AWT, Swing, JavaFX & SWT 2
0 JTable leere Zeilen einfügen AWT, Swing, JavaFX & SWT 3
C Swing JLabels entfernen und neue einfügen AWT, Swing, JavaFX & SWT 6
K JComboBox: Beim Einfügen neuer Werte ItemStateChanged blocken. AWT, Swing, JavaFX & SWT 2
N JList in JTable einfügen AWT, Swing, JavaFX & SWT 13
B Eigene Methoden in TABs einfügen AWT, Swing, JavaFX & SWT 8
P LayoutManager Komponenten einfügen (FlowLayout, BoxLayout) AWT, Swing, JavaFX & SWT 2
Sammay Swing JPanel nach dem einfügen neu zeichnen AWT, Swing, JavaFX & SWT 6
jueki eigenen Button in JFileChooser einfügen AWT, Swing, JavaFX & SWT 7
B Wie ein Hintergrundbild einfügen??? AWT, Swing, JavaFX & SWT 18
R Bilder über URL einfügen AWT, Swing, JavaFX & SWT 4
G JComponent nachträglich in JPanel einfügen AWT, Swing, JavaFX & SWT 5
X NullPointerException beim Einfügen einer JMenuBar AWT, Swing, JavaFX & SWT 4
T DND mit JList Elemente nicht am Ende einfügen AWT, Swing, JavaFX & SWT 3
V Zeichnen auf JPanel und in JFrame einfügen AWT, Swing, JavaFX & SWT 16
C LayoutManager Icon Einfügen? AWT, Swing, JavaFX & SWT 6
E In JTable neue Zeile mit Tabulator einfügen AWT, Swing, JavaFX & SWT 5
P Bilder einfügen AWT, Swing, JavaFX & SWT 4
S Swing Kleine Bilder in Panel einfügen AWT, Swing, JavaFX & SWT 13
T SWT String mitten ins Textfeld einfügen + richtige Cursorposition AWT, Swing, JavaFX & SWT 3
E Swing Wieder ein Bild einfügen AWT, Swing, JavaFX & SWT 2
M Probleme beim Bild einfügen in CenterPanel AWT, Swing, JavaFX & SWT 5
N im fenster ein hintergrund bild einfügen AWT, Swing, JavaFX & SWT 18
A Swing Bilder in JFrame einfügen AWT, Swing, JavaFX & SWT 2
A Swing Bild in runnable jar einfügen AWT, Swing, JavaFX & SWT 25
R Swing RadioButtons in JTable einfügen AWT, Swing, JavaFX & SWT 18
A Swing JTable Zeilen einfügen verbieten AWT, Swing, JavaFX & SWT 3
I Probleme mit Bild einfügen AWT, Swing, JavaFX & SWT 5
Z Swing Gif's in panels einfügen AWT, Swing, JavaFX & SWT 11
N ScrollPane in ein Fenster einfügen AWT, Swing, JavaFX & SWT 2
G JList und ein neues Element oben in der Liste einfügen AWT, Swing, JavaFX & SWT 4
G Button einfügen AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben