JPanel neu zeichnen

N

NpQtSaWdC

Gast
Tagchen,

ich füge einem JPanel zur Laufzeit neue Komponenten hinzu.
Dieses JPanel hat ein GridLayout.
Jetzt dachte ich, dass wenn ich mit add(new Component());
und einem anschließenden validate() mein JPanel neu zeichnen
kann und die neue Componente angezeigt wird. Das passiert
aber leider nicht :(

Java:
public void addResultElement(String title, String urlPath, String xmlPath) {
	Panels.resultsPanel.add(components.createNewElement(title, urlPath, xmlPath));
}

Java:
public void actionPerformed(ActionEvent e) {
	Object source = e.getSource();
		
	 if(source.equals(Buttons.add)) {
		addResultElement("blub 1", "Bla 1", "Booh 1");
		Panels.resultsPanel.validate();
	} 
}

Java:
public JPanel createNewElement(String blub, String bla, String booh) {
	
	JPanel panel = new JPanel();
        panel.setLayout(new GridLayout());
        panel.add(new JLabel(bla);
        panel.add(new JLabel(booh);
		
	return panel;
}
 
S

SlaterB

Gast
der Code enthält keine sichtbaren Fehler,
das Drumherum hilft aber,
- welches Layout ist gesetzt,
- ist 'Panels.resultsPanel' überhaupt in eine sichtbare GUI eingebunden
- liefert if(source.equals(Buttons.add)) true, mit Ausgabe geprüft?
usw.

nur ein vollständiges Testprogramm kann in Swing eine echte Aussage haben,
möglichst kurz, aber inklusive des Fehlers

falls nicht möglich, dann hilft jede weitere 'entbehrbare' halbwegs relevante Codezeile vielleicht weiter, z.B. die Klasse Panels
 
Zuletzt bearbeitet von einem Moderator:

jgh

Top Contributor
hier mal ein KSKB schnell dahingeklatscht...du siehst schon, dass man damit nichts wirklich sinnvolles machen kann, aber grundsätzlich funzt es...

Java:
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class AddSomeComponents {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		JFrame f = new JFrame();
		final JPanel p = new JPanel(new GridLayout());
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setSize(500, 500);
		f.setLocationRelativeTo(null);
		JButton b = new JButton("add");
		b.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				p.add(createNewElement("aaa", "bbb", "ccc"));
				p.validate();
			}
		});
		f.add(p);
		f.add(b, BorderLayout.SOUTH);

		f.setVisible(true);
	}

	public void addResultElement(String title, String urlPath, String xmlPath) {
		// Panels.resultsPanel.add(components.createNewElement(title, urlPath,
		// xmlPath));
	}

	public static JPanel createNewElement(String blub, String bla, String booh) {

		JPanel panel = new JPanel();
		panel.setLayout(new GridLayout());
		panel.add(new JLabel(bla));
		panel.add(new JLabel(booh));

		return panel;
	}
}
 
N

NpQtSaWdC

Gast
Hey,

in der Klasse Panels stehen nur alle JPanels als statics drin, die ich für meine
gesmate GUI benötige.

Das Layout meines Panels welches ich aktualisieren möchte ist GridLayout.

Die ActionPerformed wird korrekt ausgelöst.

Eine weiter nützliche Information wäre villeicht, dass sich mein Panel in einer
JScrollPane befindet, allerdings hab ich auch schon besucht diese zu validaten.

Es scheint irgendetwas mit dem hier nicht zu stimmen:

Java:
public JPanel createNewElement(String blub, String bla, String booh) {
    
    JPanel panel = new JPanel();
        panel.setLayout(new GridLayout());
        panel.add(new JLabel(bla);
        panel.add(new JLabel(booh);
        
    return panel;
}

ich habe das zur fehlerfindung mal in ein eigenes JFrame gepackt und mit dem
gleichen ActionListener ausgelöst. Das JFrame ist komplett leer oO
 
N

NpQtSaWdC

Gast
Also die komplette "echte" Methode die ich nutze um den neuen Inhalt zu
erstellen sieht so aus:

Java:
public void createElements(int amount, Article[] articles) {
	for(int i = 0; i < amount; i++) {
			
		Article temp = articles[i];
			
		if(temp != null) {
			final String tempUrl = temp.getUrlName();
			final String tempPath = temp.getPath();
				
			JButton webLink = new JButton();
			JButton xmlLink = new JButton();
				
			webLink.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					System.out.println(tempUrl);
				}
			});
				
			xmlLink.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					System.out.println(tempPath);
				}
			});
				
			JPanel panel = new JPanel();
			panel.setPreferredSize(new Dimension(100, 300));
			panel.setLayout(new GridLayout(2, 1));
				
			JPanel panelBot = new JPanel();
			panelBot.setLayout(new GridLayout(1, 2));
			panelBot.add(webLink);
			panelBot.add(xmlLink);
				
			panel.add(new JLabel(temp.getTitle()));
			panel.add(panelBot);
				
			JFrame frame = new JFrame("Test");
			frame.setPreferredSize(new Dimension(400, 400));
			frame.add(panel);
			frame.pack();
			frame.setVisible(true);
				
			Panels.resultsPanel.add(panel);
		}
	}
}

habs mal gepostet, da ich nicht verstehe wieso die JFrames jetzt komplett leer
sind obwohl der parameter amount = 2 ist und die Articles nicht leer sind.
 
S

SlaterB

Gast
wenn du panel in Panels.resultsPanel addest, wird es aus dem JFrame entfernt,
eine GUI-Komponente kann nur einmal verwendet werden, letztes Einfügen zählt

im Code von jgh siehst du es ja schon einigermaßen funktionierend im Einsatz

----

mit JScrollPane und sonstigen neuen Infos schreit es nur noch mehr nach vollständigen Programm,
wobei du auf Article usw. ruhig verzichten kannst, da war die vorherige Variante schon gut vereinfacht,
es muss nur vollständig werden,
sonst so sinnvoll wie ein Fahrradschlauch ohne Luft zu 80% erfolgreich auf Loch geprüft ;)
 
N

NpQtSaWdC

Gast
Keine Ahnung was da los ist aber es will irgendwie nicht funktionieren.

hab jetzt alles komplett verinfacht, steht jetzt nur noch das:

Java:
public JPanel createElements(int amount, Article[] articles) {
	JPanel mainPanel = new JPanel();

	mainPanel.add(new JLabel("bla"));
		
	return mainPanel;
}

in der createElements und in meiner actionPerformed (die ausgelöst wird):

Java:
public void actionPerformed(ActionEvent e) {
	Object source = e.getSource();
		
	 if(source.equals(Buttons.add)) {

	    Panels.resultsPanel.add(components.createElements(2, articles));
	    Panels.resultsPanel.validate();
        }
}

Danke für eure Hilfe aber ich werde wohl lieber ne JList basteln und
meine Komponenten über nen ListCellRenderer da rein klatschen.....
 
N

NpQtSaWdC

Gast
Habe den Fehler doch noch gefunden.
Das Problem war das GridLayout.

Es waren zu viele Zeilen eingestellt, ich hatte es mit
"new GridLayout(100, 1)" initialisiert. Nachdem ich es
in "new GridLayout(0, 1)" geändert hatte, war alles in Ordnung.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
CptK Funktionsgraphen effizient zeichnen und nur Teile von JPanel erneuern AWT, Swing, JavaFX & SWT 2
W Swing JPanel nur einmal nach mehreren Änderungen neu zeichnen AWT, Swing, JavaFX & SWT 1
F Java Swing Rechteck in JPanel zeichnen AWT, Swing, JavaFX & SWT 7
J Linien auf JPanel zeichnen AWT, Swing, JavaFX & SWT 3
llabusch Linien in JPanel zeichnen AWT, Swing, JavaFX & SWT 6
M Kein Zeichnen der Figuren auf JPanel AWT, Swing, JavaFX & SWT 4
X Swing JPanel mehrere Ebenen zeichnen AWT, Swing, JavaFX & SWT 13
S Swing Bild auf jPanel nach Änderung von JComboBox zeichnen AWT, Swing, JavaFX & SWT 4
P JPanel neu zeichnen AWT, Swing, JavaFX & SWT 10
T Oval auf ein JPanel zeichnen AWT, Swing, JavaFX & SWT 3
S Swing Bild in JPanel in ScrollPane neu zeichnen AWT, Swing, JavaFX & SWT 2
H String auf Knopfdruck in JPanel zeichnen. AWT, Swing, JavaFX & SWT 6
L Freies zeichnen auf JPanel AWT, Swing, JavaFX & SWT 3
das-mo AWT In JPanel 2mal zeichnen AWT, Swing, JavaFX & SWT 3
R JPanel auf JFrame neu zeichnen AWT, Swing, JavaFX & SWT 11
P RAM-Auslastung - Problem. Zeichnen von JPEGs auf JPanel AWT, Swing, JavaFX & SWT 2
A Swing Zeichnen auf JPanel AWT, Swing, JavaFX & SWT 4
B Zeichnen von Bildern auf JPanel aus eigenem Objekt AWT, Swing, JavaFX & SWT 19
B Swing JPanel in Abhängigkeit von DefaultListModel Instanz neu zeichnen AWT, Swing, JavaFX & SWT 3
S auf einem mit Netbeans (GUI) erstellten JPanel (eines JFrames) zeichnen? AWT, Swing, JavaFX & SWT 7
Sammay Swing JPanel nach dem einfügen neu zeichnen AWT, Swing, JavaFX & SWT 6
N JPanel zeichnen AWT, Swing, JavaFX & SWT 4
V Bild auf JPanel zeichnen AWT, Swing, JavaFX & SWT 9
G Swing Kreise auf JPanel zeichnen AWT, Swing, JavaFX & SWT 11
V Zeichnen auf JPanel und in JFrame einfügen AWT, Swing, JavaFX & SWT 16
D In JPanel zeichnen AWT, Swing, JavaFX & SWT 11
E Rechteck in JPanel Zeichnen AWT, Swing, JavaFX & SWT 6
S Koordinaten aus Array verwenden zum zeichnen auf JPanel?! AWT, Swing, JavaFX & SWT 3
0din Jpanel will nich alles zeichnen AWT, Swing, JavaFX & SWT 15
R JPanel - BufferedImage - zeichnen großer Bilder AWT, Swing, JavaFX & SWT 2
J Swing JScrollPane nimmt das JPanel zum Zeichnen nicht an AWT, Swing, JavaFX & SWT 5
R JPanel - zeichnen in skalierten Bereich - Linie (X-Achse) nicht sichtbar AWT, Swing, JavaFX & SWT 11
B Zeichnen in jPanel AWT, Swing, JavaFX & SWT 2
R JPanel - Markierung an der Mausposition zeichnen AWT, Swing, JavaFX & SWT 4
R JPanel in JScrollPane - zeichnen der Mausposition AWT, Swing, JavaFX & SWT 3
R JPanel in JScrollPane neu zeichnen AWT, Swing, JavaFX & SWT 7
R JPanel - zeichnen eines Arrays AWT, Swing, JavaFX & SWT 18
G JPanel neu zeichnen mit repaint AWT, Swing, JavaFX & SWT 15
W Zeichnen verschiedener geom. Figuren in einem JPanel AWT, Swing, JavaFX & SWT 5
M In eigene JPanel Klasse zeichnen AWT, Swing, JavaFX & SWT 4
F JPanel übereinander zeichnen AWT, Swing, JavaFX & SWT 4
S Zeichnen in einem JPanel AWT, Swing, JavaFX & SWT 15
N Formen drehen und auf JPanel zeichnen AWT, Swing, JavaFX & SWT 6
B JPanel + Zeichnen AWT, Swing, JavaFX & SWT 3
S Problem mit dem Zeichnen einer Linie auf einem JPanel AWT, Swing, JavaFX & SWT 30
M Auf JPanel zeichnen AWT, Swing, JavaFX & SWT 17
H Punkte auf einem JPanel zeichnen AWT, Swing, JavaFX & SWT 4
G Auf JPanel zeichnen? AWT, Swing, JavaFX & SWT 2
P JPanel Inhalt neu zeichnen AWT, Swing, JavaFX & SWT 5
feuervogel in Jpanel zeichnen AWT, Swing, JavaFX & SWT 3
M JPanel ausserhalb von paintComponent zeichnen AWT, Swing, JavaFX & SWT 6
L Komponente und Grafik gleichzeitig auf JPanel zeichnen AWT, Swing, JavaFX & SWT 11
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
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

Ähnliche Java Themen

Neue Themen


Oben