Änderungen an JPanel nicht sichtbar

Status
Nicht offen für weitere Antworten.
M

mike

Gast
habe eine leicht abgeänderte Version von dem Code, den ich hier gepostet habe http://www.java-forum.org/de/topics/java_2553.html
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 = 1;
   private int start = 1;
   
   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"))
      {
         myPanel = new MyPanel(start,inputs);
         this.getContentPane().add(myPanel,BorderLayout.CENTER);
         validate();
      }
   }
   
   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
{
	private JTextField textField[];
	private int rows,columns;

	
	public MyPanel(int a, int b)
	{
		rows = a;
		columns = b;
		setLayout(new GridLayout(rows,columns));	

		textField = new JTextField[rows*columns];
		for (int i = 0; i <= rows*columns-1; i++)
		{
			textField[i] = new JTextField();
			add(textField[i]);
		}
		
	}
}
und
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); 
      }
   }
}

habe nun folgendes Problem, wenn ich durch Drücken von Button "neu" eine neue myPanel erzeuge, dann andere Werte für rows und columns in den choices wähle und mit Hilfe des Buttons "neu" wieder eine neue myPanel erzeuge, wird sie zwar korrekt gezeichnet, aber sobald ich das Fenster minimere oder sonst etwas damit mache, sind die Änderungen weg. Habe schon versucht, das Problem durch Aufruf von repaint(), invalidate() und revalidate() an verschiedensten Programmstellen zu lösen, habe auch versucht vor dem Erzeugen eines neuen myPanel myPanel.removeAll() anzuwenden, aber das bringt nicht den gewüschten Effekt.
Kann mir jemand helfen?

Gruß mike
 
B

Beni

Gast
Auf die Gefahr hin, dass ich dich missverstehe, aber das hast du versucht?

Code:
   public void actionPerformed(ActionEvent evt)
   {
      String command = evt.getActionCommand();
      if (command.equals("neu"))
      {
         myPanel = new MyPanel(start,inputs);
         this.getContentPane().removeAll();  //  <<<< hier neue Zeile
         this.getContentPane().add(myPanel,BorderLayout.CENTER);
         validate();
      }
   }

mfg Beni
 
M

mike

Gast
nein, das würde ja alle Komponenten des Frames löschen oder?
meine Variante ging so:
Code:
   public void actionPerformed(ActionEvent evt)
   {
      String command = evt.getActionCommand();

      if (myPanel != null)  { myPanel.removeAll();  }   // <-- neue Zeile

      if (command.equals("neu"))
      {
         myPanel = new MyPanel(start,inputs);
         this.getContentPane().add(myPanel,BorderLayout.CENTER);
         validate();
      }
   }

Dies hatte aber überhaupt kein Effekt, deswegen habe ich es ganz weggelassen

Gruß mike
 

hanso

Aktives Mitglied
Ich habe die Swing Komponenten immer erst gesehen nachdem sich die grösse des Frames um mindestens 1 Pixel geändert hat!

Code:
        setSize(1200,801);
        setSize(1200,800);

Das hat auch funktioniert wenn ich die Grösse mit dem Mauszeiger manuell geändert habe.
 
M

mike

Gast
@hanso:

ich glaube den gleichen Effekt erreichst du mit validate()

Mein Problem ist genau umgekehrt, wenn ich das Fenster nicht anfasse, sind die Änderungen sichtbar, wenn ich es z.B. mit der Maus auseinanderziehe, dann verschwinden die Änderungen :?

gruß mike
 
B

Beni

Gast
mike hat gesagt.:
nein, das würde ja alle Komponenten des Frames löschen oder?
Ja, würde es. Das war auch der Sinn hinter meiner Antwort.
Denn zurzeit fügst Du ein Panel nach dem anderen hinzu, bis dein Computer wegen Speichermangels abstürzen wird :wink:
Und da die Panels einfach hintereinander gestaffelt werden, glaub ich nicht, dass Du die alten noch sehen willst?

Aber validate ist auch gut.

Gruss Beni
 
M

mike

Gast
Und da die Panels einfach hintereinander gestaffelt werden, glaub ich nicht, dass Du die alten noch sehen willst?
genauso ist es, ich will immer das neuste Panel sehen, die alten brauche ich gar nicht mehr. Deshalb hab ich an myPanel.removeAll() gedacht, aber das hat nicht den gewünschten Effekt gebracht. Weisst du vielleicht mit welchem Befehl ich ein altes myPanel, bevor ich ein neues erzeuge, löschen und den davon besetzten Speicher freimachen kann?
 
B

Beni

Gast
wenn ich meine Hirnzellen mal etwas anstrenge (was ich schon das erste mal hätte tun sollen), komme ich auf:
Code:
getContentPane().remove( myPanel )

oder auch möglich:
Code:
myPanel.getParent().remove( myPanel );
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Swing JPanel nur einmal nach mehreren Änderungen neu zeichnen AWT, Swing, JavaFX & SWT 1
P JavaFX Änderungen am Datenmodell visuell nicht sichtbar AWT, Swing, JavaFX & SWT 3
G JTextField Änderungen überprüfen AWT, Swing, JavaFX & SWT 4
D Swing JTextComponent markieren bei Änderungen AWT, Swing, JavaFX & SWT 5
S JTable übernimmt Änderungen nicht AWT, Swing, JavaFX & SWT 2
G JavaFX TableView - Änderungen werden nicht übernommen. AWT, Swing, JavaFX & SWT 3
S Swing Auf Änderungen eines Models in der View einer JTable reagieren AWT, Swing, JavaFX & SWT 1
X Swing GUI-Änderungen mit invokeLater AWT, Swing, JavaFX & SWT 4
B Row und Cell Änderungen feststellen AWT, Swing, JavaFX & SWT 3
D Änderungen einer Card des CardLayouts zur Laufzeit AWT, Swing, JavaFX & SWT 6
M Swing Änderungen eines TextFelds und JOptionPane AWT, Swing, JavaFX & SWT 5
J JTable DefaultTableModel - Änderungen feststellen AWT, Swing, JavaFX & SWT 8
C Übernahme von Änderungen in einer JTable AWT, Swing, JavaFX & SWT 7
J Verzögerung bei Änderungen der Anzeige abwarten AWT, Swing, JavaFX & SWT 5
R Swing 2 jTables -2 Models - 1 Datenklasse: Änderungen AWT, Swing, JavaFX & SWT 11
M In Jlist auf Änderungen von mehreren JLabels reagieren AWT, Swing, JavaFX & SWT 3
Pithecanthropus [gelöst ]ActionListener soll nur Änderungen "bemerken" AWT, Swing, JavaFX & SWT 2
B Keine Änderungen an JLabel durch Array möglich AWT, Swing, JavaFX & SWT 12
U Beste Möglichkeit JTable-Änderungen in DB zu schreiben? AWT, Swing, JavaFX & SWT 14
S Textfeld soll auf Änderungen von nutzer und program reagiern AWT, Swing, JavaFX & SWT 3
P Änderungen in xml datei speichern AWT, Swing, JavaFX & SWT 7
A JTable Änderungen anzeigen (DefaultTableModel) AWT, Swing, JavaFX & SWT 5
T JTable Änderungen AWT, Swing, JavaFX & SWT 2
S Swing: Änderungen in JLabel oder JTextField sofort anzeigen AWT, Swing, JavaFX & SWT 3
P Zwei JPanel übereianderlegen AWT, Swing, JavaFX & SWT 14
XWing Basic JPanel mit 2 Buttons beutzen. AWT, Swing, JavaFX & SWT 10
G JPanel per Drag and Drop JButtons und Bilder ablegen AWT, Swing, JavaFX & SWT 1
G JPanel mit JButtons und Bilder AWT, Swing, JavaFX & SWT 5
N AWT JPanel zu Jframe hinzufügen AWT, Swing, JavaFX & SWT 2
M clear JPanel before repainting AWT, Swing, JavaFX & SWT 1
B ImageIcon auf JPanel austauschen AWT, Swing, JavaFX & SWT 3
T Swing Reload JPanel + darin liegende ProgressBar AWT, Swing, JavaFX & SWT 9
P Swing Mehrere JLabels mit ImageIcon in JPanel lesen AWT, Swing, JavaFX & SWT 1
E JScrollPane mit JPanel verbinden AWT, Swing, JavaFX & SWT 1
F JPanel Celleditor AWT, Swing, JavaFX & SWT 8
B JPanel-Inhalte inkl. JTextarea zoomen? AWT, Swing, JavaFX & SWT 3
B Mit ContentPane werden Komponenten angezeigt, mit SplitPane, JPanel nicht? AWT, Swing, JavaFX & SWT 6
CptK Funktionsgraphen effizient zeichnen und nur Teile von JPanel erneuern AWT, Swing, JavaFX & SWT 2
P Button simpler random auf einem JPanel verteilen? AWT, Swing, JavaFX & SWT 3
O Swing "Eigenes" JPanel wird dem JScrollPane nicht hinzugefügt AWT, Swing, JavaFX & SWT 5
Ich lerne Java. Swing Von JPanel A auf JPanel B zugreifen. AWT, Swing, JavaFX & SWT 4
A JPanel austauschen und Focus geben AWT, Swing, JavaFX & SWT 3
E Auf JPanel malen und davor JComponenten anzeigen AWT, Swing, JavaFX & SWT 12
L JComponent aus JPanel anhand Mausposition ermitteln AWT, Swing, JavaFX & SWT 10
J JPanel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
B Verschiebbares JPanel "ruckelt" im Randbereich AWT, Swing, JavaFX & SWT 2
S Swing JPanel nimmt keinen KeyListener an AWT, Swing, JavaFX & SWT 7
K JLabel mit Bilder im nicht initialisierten JPanel hinzufügen AWT, Swing, JavaFX & SWT 5
Hatsi09 Swing JPanel Bild einfügen AWT, Swing, JavaFX & SWT 14
L JPanel zeigt keinen Inhalt AWT, Swing, JavaFX & SWT 1
dereki2000 JPanel mit Rückgbe wie bei JOptionPane AWT, Swing, JavaFX & SWT 3
E Hintergrundfarbe setzen in JPanel funktioneirt nicht AWT, Swing, JavaFX & SWT 4
P JPanel KeyListener hinzufügen AWT, Swing, JavaFX & SWT 8
S Nach scrollen verschwindet das zuvor im JPanel gezeichnete AWT, Swing, JavaFX & SWT 2
P Bewegung eines Balkens in eineum JPanel welches als Spielfeld fungiert AWT, Swing, JavaFX & SWT 2
L Swing JPanel Größe anpassen AWT, Swing, JavaFX & SWT 6
D Platzierung von JTextfield in JPanel AWT, Swing, JavaFX & SWT 3
D Swing Anwendung ohne JPanel erstellen AWT, Swing, JavaFX & SWT 1
M Swing JPanel in JScrollPane AWT, Swing, JavaFX & SWT 3
M Zwei JPanel übereinander nur vorderes "repainten" AWT, Swing, JavaFX & SWT 3
J 2D-Grafik Background einer Jpanel Klasse ändern AWT, Swing, JavaFX & SWT 1
J Ziehen eines Buttons im JPanel AWT, Swing, JavaFX & SWT 2
J Button lässt sich nicht auf dem JPanel verschieben AWT, Swing, JavaFX & SWT 5
D zwei JLabel stapeln in einem JPanel AWT, Swing, JavaFX & SWT 5
DaCrazyJavaExpert Swing JPanel "ContentPane" wird nicht gesetzt/angezeigt AWT, Swing, JavaFX & SWT 16
DaCrazyJavaExpert Swing Größe des JPanel ändern/wird nicht geändert. AWT, Swing, JavaFX & SWT 3
DaCrazyJavaExpert Swing JPanel wird in JScollPane nicht angezeigt AWT, Swing, JavaFX & SWT 2
it_is_all JPanel verschwindet nach Button-Klick AWT, Swing, JavaFX & SWT 2
B Bar Plot in Swing JPanel AWT, Swing, JavaFX & SWT 0
F Screenshot eines JPanel AWT, Swing, JavaFX & SWT 3
S JPanel rotieren, Bild ist abgeschnitten, Clipping? AWT, Swing, JavaFX & SWT 0
M Swing JPanel flüssig verschieben AWT, Swing, JavaFX & SWT 5
G Nur ein JPanel wird angezeigt AWT, Swing, JavaFX & SWT 9
kilopack15 JPanel im laufenden Zustand einfärben AWT, Swing, JavaFX & SWT 2
kilopack15 JPanel Farbverwaltung AWT, Swing, JavaFX & SWT 1
A JScrollPane soll JPanel mit JButtons enthalten und eine Scollbar anzeigen AWT, Swing, JavaFX & SWT 1
A Swing JLabels in einer ForEach Schleife an den JPanel anheften (UNO Netzwerkspiel) AWT, Swing, JavaFX & SWT 1
L JPanel zeichnet im Konstrukter erzeugten Hintergrund nicht AWT, Swing, JavaFX & SWT 10
Java_RY wie kann ich auf JButtons in einem JPanel zugreifen AWT, Swing, JavaFX & SWT 3
F Zeichnung einem JPanel im Layoutmanager zuweisen AWT, Swing, JavaFX & SWT 3
Meeresgott Swing Umgang mit JPanel AWT, Swing, JavaFX & SWT 4
R 2D-Grafik PNG Bild per Graphics auf JPanel AWT, Swing, JavaFX & SWT 9
K JPanel Bilder bei Windows nicht darstellbar AWT, Swing, JavaFX & SWT 6
J Swing Zeichenfläche im JPanel des Haupfenster anzeigen lassen AWT, Swing, JavaFX & SWT 4
A Swing JPanel zeigt Buttons nicht an AWT, Swing, JavaFX & SWT 4
R JPanel überzeichnet alles? AWT, Swing, JavaFX & SWT 1
D Von JPanel auf anderes JPanel zugreifen AWT, Swing, JavaFX & SWT 9
L Swing Teile eines JPanel in eigene Klasse auslagern AWT, Swing, JavaFX & SWT 3
I JPanel - Verwaltung/ Anordnung AWT, Swing, JavaFX & SWT 4
T JComponents zur Laufzeit auf JPanel darstellen AWT, Swing, JavaFX & SWT 10
F Java Swing Rechteck in JPanel zeichnen AWT, Swing, JavaFX & SWT 7
J Linien auf JPanel zeichnen AWT, Swing, JavaFX & SWT 3
L ImageIcon auf JPanel wird nicht angezeigt(keiner Fehlermeldung) AWT, Swing, JavaFX & SWT 11
M Swing JPanel innerhalb eines Frames verschieben AWT, Swing, JavaFX & SWT 3
T JTextField Array im JPanel wird nicht komplett angezeigt AWT, Swing, JavaFX & SWT 7
K Swing JPanel ueber komplette Form legen AWT, Swing, JavaFX & SWT 1
W Swing Größenänderung vom JPanel im JScrollPane und anschließendes positionieren AWT, Swing, JavaFX & SWT 2
R Komponenten von JPanel bleiben unsichtbar AWT, Swing, JavaFX & SWT 2
O JTabeddpane aber jedes JPanel als eigene Klasse anlegen AWT, Swing, JavaFX & SWT 7
llabusch Linien in JPanel zeichnen AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben