Elemente zur LaufZeit hinzufügen und löschen

Status
Nicht offen für weitere Antworten.

dotlens

Top Contributor
hallo

wenn ich bei meinem Frame wärend der LaufZeit Elemente hinzufüge und lösche muss ich das ja irgendwie aktualisieren, also das löschen klappt prima, aber das neue zeiget er mir nicht an
dacht, ich könne einfach mit repaint() neu zeichnen lassen, jedoch werden die neuen Elemente nicht gezeichnet

hab herausgefunden:
wenn man die grösse verändert zeichnet er den neuen Komponenten

also hab ich nach dem hinzufügen manuell resize(), reshape() und remove() aufgerufen ohne den gewünschten erfolg.

nach langem proben hab ich heraugefunden dass nach pack() neu gezeichnet wird. jedoch wird so die grösse auch verändert und das möcht ich nicht. weiss jemand was pack() macht, damit das ganze neu gezeichnet wird?

oder wie kann ich mein Problem sonst lösen?

danke und gruss
 

dotlens

Top Contributor
damit zeichnet er mir das alte neu. und löscht das alte, jedoch kommt das neue wieder erst nach dem verstellen der Grösse zum vorschein. :(
 
S

Schweizer Schalentier

Gast
Leg mal den Quelltext rein, damit ich sehen kann wie du das gui generierst.
 

dotlens

Top Contributor
hab extra ein einfaches :D

Code:
public class AddRemove extends JFrame{

	JPanel contentPanel;
	
	JLabel label, label2;
	JFrame frame;
	
	public static void main(String[] args) {
		AddRemove addRemove = new AddRemove();
		addRemove.setVisible(true);
	}
	
	AddRemove(){
		super();
		initialisize();
		frame = this;
		
		label = new JLabel("Test");
		label2 = new JLabel("Test2");
		JButton btnAddRemove = new JButton("Add-Remove");
		btnAddRemove.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				contentPanel.remove(label);
				contentPanel.add(label2);
				//frame.reshape(100,300,300,100);
				//frame.remove(frame);
				//frame.resize(200, 100);
				//frame.repaint();
				//frame.pack(); //funzzzzzzzzzt!
				frame.validate();
			}
		});
		contentPanel.add(btnAddRemove);
		contentPanel.add(label);
		
		this.pack();
	}
	
	private void initialisize(){
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		contentPanel = new JPanel();
		this.setContentPane(contentPanel);
	}
}
 

dotlens

Top Contributor
hab gerade nachgeschaut was pack() macht. und das ruft auch wiederum validate() auf!!! aber validate() aleine klappt nicht!!!

hier der code von pack() fals es jemanden interessiert:
Code:
    public void pack() {
		Container parent = this.parent;
		if(parent != null && parent.getPeer() == null) {
			parent.addNotify();
		}
		if(peer == null) {
			addNotify();
		}
		setSize(getPreferredSize());

		if(beforeFirstShow) {
			isPacked = true;
		}

		validate();
	}
 
B

bygones

Gast
also so klappts schonmal:
Code:
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 Test extends JFrame{

	   JPanel contentPanel;
	   
	   JLabel label, label2, currentLabel;
	   JFrame frame;
	   
	   public static void main(String[] args) {
	      Test addRemove = new Test();
	      addRemove.setVisible(true);
	   }
	   
	   Test(){
	      super();
	      initialisize();
	      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	      label = new JLabel("Test");
	      currentLabel = label;
	      label2 = new JLabel("Test2");
	      JButton btnAddRemove = new JButton("Add-Remove");
	      btnAddRemove.addActionListener(new ActionListener(){
	         public void actionPerformed(ActionEvent e){
	            contentPanel.remove(currentLabel);
	            currentLabel = currentLabel == label ? label2 : label;
	            contentPanel.add(currentLabel);
	            pack();
	         }
	      });
	      contentPanel.add(btnAddRemove);
	      contentPanel.add(label);
	      
	      this.pack();
	   }
	   
	   private void initialisize(){
	      this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	      contentPanel = new JPanel();
	      this.setContentPane(contentPanel);
	   }
	}
er hüpft nun zwischen den beiden labels hin und her...
wenns dir aber nur um den Text geht und die labels sich sonst nicht unterscheiden ist setText() besser...

pack ruft natürlich wieder validate auf, da die dafür zuständig ist allen Components zu sagen: zeichne euch neu. pack macht nur vorher ein paar sachen um Bescheid zu geben: Es wird gezeichnet und dann mit Mindestgröße angezeigt
 
S

Schweizer Schalentier

Gast
hm, ich weis vielleicht nicht genau, was du erreichen möchtest, aber wenn du die Zeile mit
this.pack();
durch
this.setSize(180, 70);
ersetzt, oder auch nur ergänzt, dann funktionierts.
 

L-ectron-X

Gesperrter Benutzer
Noch eine Variante. :wink:
Code:
import javax.swing.*;
import java.awt.event.*;

public class AddRemove extends JFrame {

   private JPanel contentPanel;
   private JButton btnAddRemove;
   private JLabel label, label2;

   public AddRemove(String title) {
      super(title);
      initialisize();

      btnAddRemove.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            label2 = new JLabel("Test2");
            contentPanel.remove(label);
            contentPanel.add(label2);
            //reshape(100,300,300,100);
            //remove(frame);
            //resize(200, 100);
            //repaint();
            pack(); //funzzzzzzzzzt!
         }
      });


   }

   private void initialisize(){
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      
      label = new JLabel("Test");
      btnAddRemove = new JButton("Add-Remove");
      contentPanel = new JPanel();
      contentPanel.add(btnAddRemove);
      contentPanel.add(label);
      setContentPane(contentPanel);
      pack();
   }
   
   public static void main(String[] args) {
      new AddRemove("AddRemove").setVisible(true);
   }
}
 

dotlens

Top Contributor
danke dür die vielen antworten! :D

also s geht scho darum komponenten zu löschen und andere hinzuzufügen, genauer gesagt den inhalt eines scrollpanes. oder wäre es besser ein neues scrollpane hhinzuzufügen und das alte zu löschen? werds ausprobieren ;)

das mit pack() hab ich auch rausgefunden, aber mit validate() funktioniert es nicht, also macht pack() noch irgendwas was ich nicht verstehe ;)

die einzige Problem mit pack() ist, dass dann die grösse wieder angepasst wird, was ich nicht möchte, da der Benuzter diese selbst einstellen kann....

Jetzt kommt das ausprobieren :D

danke leute...
 
B

bygones

Gast
dotlens hat gesagt.:
also s geht scho darum komponenten zu löschen und andere hinzuzufügen, genauer gesagt den inhalt eines scrollpanes. oder wäre es besser ein neues scrollpane hhinzuzufügen und das alte zu löschen? werds ausprobieren ;)
Normalerweise ist das recht angenehm, da du einfach nur den Viewport der ScrollPane ändern musst !
 

L-ectron-X

Gesperrter Benutzer
dotlens hat gesagt.:
:S
wenn ich diese methode gekannt hätte, hätte ich 1 tag arbeit gespart :D

danke!
Aber auch, wenn Du von vorn herein die Frage so gestellt hättest, dass für Dich am Ende ein Maximum an Informationen heraus kommt. :roll:
 

dotlens

Top Contributor
hab eigentlich mal noch die gesamtsituation erklärt, kann es jedoch jetzt nicht mehr finden! ist wohl irgendwie etwas schiefgegangen....
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Swing JList zur Laufzeit hinzugefügt elemente nicht sichtbar?! AWT, Swing, JavaFX & SWT 2
A SWT - Elemente zur Laufzeit ändern AWT, Swing, JavaFX & SWT 6
M Elemente statisch anordnen AWT, Swing, JavaFX & SWT 4
_user_q ChoiceBox Elemente: Sprache ändern AWT, Swing, JavaFX & SWT 7
T Elemente auf vorheriger Stage, nach Wechsel der Stage ansprechen AWT, Swing, JavaFX & SWT 32
Lunar Swing JFrame erstellt; weitere Elemente werden nicht eingefügt/sind nicht zu sehen AWT, Swing, JavaFX & SWT 4
J JavaFX JavaFX Splitpane - Zugriff auf die Controller der Elemente AWT, Swing, JavaFX & SWT 8
G Swing Variable Elemente für GroupLayout AWT, Swing, JavaFX & SWT 18
F JFrame zeigt nicht alle Elemente auf anhieb an AWT, Swing, JavaFX & SWT 4
J JavaFX Elemente werden nicht zu TableView hinzugefügt AWT, Swing, JavaFX & SWT 3
J JavaFX JavaFX Elemente an Fenstergröße skalieren AWT, Swing, JavaFX & SWT 5
M Schnittpunkte zwischen zwei Graphics2D Elemente ermitteln. AWT, Swing, JavaFX & SWT 5
T LayoutManager Anordnen der Elemente im GridBagLayout AWT, Swing, JavaFX & SWT 11
T AWT Grafik"Array" einzelne Elemente verschieben AWT, Swing, JavaFX & SWT 1
sandaime Swing 3 JComboBoxen ausgelesen Elemente einzel ausgeben AWT, Swing, JavaFX & SWT 6
M JavaFX GUI-Elemente erstellen, nachdem die GUI geladen hat AWT, Swing, JavaFX & SWT 4
TheJavaKid JavaFX Elemente positionieren AWT, Swing, JavaFX & SWT 2
B Swing Auf JList-Elemente aus einer anderen Klasse zugreifen AWT, Swing, JavaFX & SWT 1
N JavaFX GUI Elemente einer anderen (FXML)Klasse ansprechen AWT, Swing, JavaFX & SWT 16
D JavaFX Elemente aus VBox unterscheiden AWT, Swing, JavaFX & SWT 1
K Kann nicht auf GUI Elemente zugreifen, mit einer Methode im Controller klappts, mit der anderen nich AWT, Swing, JavaFX & SWT 10
R Swing Elemente verschieben sich im GBL beim Ein/Ausblenden AWT, Swing, JavaFX & SWT 0
Z Swing Swing: Elemente werden doppel/verschoben gezeichnet, sind teils unsichtbar etc... AWT, Swing, JavaFX & SWT 10
wolfgang63 JavaFX Elemente einer Group entfernen AWT, Swing, JavaFX & SWT 1
D SWT SWT Elemente aus anderen Klassen aufrufen - Invalid thread access AWT, Swing, JavaFX & SWT 6
O Ähnliche GUI Elemente - vererbung?! AWT, Swing, JavaFX & SWT 0
M AWT Gui anzeige Probes - Elemente erscheinen nicht regelmäßig AWT, Swing, JavaFX & SWT 2
M Swing JTabbedPane: Tab-Elemente anpassen AWT, Swing, JavaFX & SWT 3
T Swing Elemente der JList überlappend darstellen AWT, Swing, JavaFX & SWT 5
K GUI Elemente über eine separate Textdatei beschriften? AWT, Swing, JavaFX & SWT 4
T Alle Swing-Elemente anzeigen AWT, Swing, JavaFX & SWT 9
M Swing Elemente im Dialog neu "laden". AWT, Swing, JavaFX & SWT 6
T JTree - Elemente mit Doppelklick auswählen AWT, Swing, JavaFX & SWT 6
L Swing ActionListener zugriff auf bestimmte Elemente AWT, Swing, JavaFX & SWT 3
S Elemente im Panel in richtige Ausgangsstellung bringen AWT, Swing, JavaFX & SWT 10
K LayoutManager Wieso verschwinden Elemente? AWT, Swing, JavaFX & SWT 20
M JFrame + JNA/aero modul - GUI Elemente so möglich? AWT, Swing, JavaFX & SWT 28
P Elemente einer JList ausgeben AWT, Swing, JavaFX & SWT 11
B JList zeigt Elemente nicht an AWT, Swing, JavaFX & SWT 3
R Größe/Anordnung der Gui-Elemente automatisch? AWT, Swing, JavaFX & SWT 6
S JVM von Oracle/Sun soll für AWT/SWING Elemente die die Optimierungen der NVidia Treiber verwenden AWT, Swing, JavaFX & SWT 3
C Swing JFrame nimmt keine anderen Elemente auf AWT, Swing, JavaFX & SWT 13
R JApplet, Elemente unsichtbar AWT, Swing, JavaFX & SWT 2
1 JList - Elemente mit rechter Maustaste wählen AWT, Swing, JavaFX & SWT 6
L ID für GUI Elemente generieren AWT, Swing, JavaFX & SWT 11
C SWT-Elemente an View-Fenster angleichen und automatisch resizen AWT, Swing, JavaFX & SWT 3
U Elemente im Panel zentrieren mit GridLayout AWT, Swing, JavaFX & SWT 3
P Elemente im Kreis aufstellen AWT, Swing, JavaFX & SWT 5
G Swing Elemente aus Arraylist auf JFrame anzeigen AWT, Swing, JavaFX & SWT 9
G GUI Elemente aus NetBeans verwenden AWT, Swing, JavaFX & SWT 8
L SWT tree elemente markieren AWT, Swing, JavaFX & SWT 4
C Swing Elemente in JList sortieren AWT, Swing, JavaFX & SWT 2
T Elemente zu JList dynamisch hinzufügen AWT, Swing, JavaFX & SWT 4
S JTree Elemente nach BaumLevel abspeichern AWT, Swing, JavaFX & SWT 2
S JTree & JComboBox - Elemente übers Fenster hinaus anzeigen AWT, Swing, JavaFX & SWT 9
F JScrollPane überlagert andere Elemente AWT, Swing, JavaFX & SWT 5
S Swing UI-Elemente ordnen sich ungewollt in einer Reihe (ohne Layout) AWT, Swing, JavaFX & SWT 5
K Swing Elemente auf Zeichenfeld verschieben AWT, Swing, JavaFX & SWT 8
S Mit eigener Klasse auf GUI-Elemente zugreifen AWT, Swing, JavaFX & SWT 3
E Swing JComboBox als CellEditor in JTable zeigt Elemente nicht sofort an AWT, Swing, JavaFX & SWT 5
R In JFrame oder in Canvas mit grafischen Elemente zeichnen AWT, Swing, JavaFX & SWT 2
S Swing Elemente einer JList Farbig hinterlegen AWT, Swing, JavaFX & SWT 6
B Swing Dynamisch Elemente in JScrollPane hinzufügen AWT, Swing, JavaFX & SWT 6
M Swing Von einem Controller aus View-Elemente ändern AWT, Swing, JavaFX & SWT 11
T DND mit JList Elemente nicht am Ende einfügen AWT, Swing, JavaFX & SWT 3
Tobse Swing JList elemente hinzufügen AWT, Swing, JavaFX & SWT 4
K JLayeredPane Elemente auf gleicher Position AWT, Swing, JavaFX & SWT 7
D Elemente werden nicht angezeigt AWT, Swing, JavaFX & SWT 2
W jComboBox unterschiedlich selectable elemente AWT, Swing, JavaFX & SWT 7
M Elemente in JTabbedPane platzieren AWT, Swing, JavaFX & SWT 7
N Swing JList Elemente ausgeben fehlerhaft AWT, Swing, JavaFX & SWT 4
M Swing Alle Elemente eines Panels? AWT, Swing, JavaFX & SWT 9
S Eigene GUI Elemente erstellen AWT, Swing, JavaFX & SWT 6
M.F.G. Fehler bei der Anzeige Grafischer Elemente AWT, Swing, JavaFX & SWT 13
B Swing Problem beim Elemente zu JList hinzufügen AWT, Swing, JavaFX & SWT 5
C (Swing)GUI-Elemente werden nicht aktualisiert. AWT, Swing, JavaFX & SWT 2
P JList: Reihenfolge der Elemente per Drag'n'Drop ändern. AWT, Swing, JavaFX & SWT 9
M Swing JList - Elemente umbenennen? AWT, Swing, JavaFX & SWT 4
MrMilti Gezeichnete Java2D Elemente mit Events versehen AWT, Swing, JavaFX & SWT 3
H [gelöst] Swing Elemente verdecken AWT, Swing, JavaFX & SWT 14
B In externer Eventhandlerklasse auf GUI-Elemente zugreifen AWT, Swing, JavaFX & SWT 3
K BoxLayout skaliert die "falschen" Elemente AWT, Swing, JavaFX & SWT 5
S Andere Elemente in JComboBox anzeigen AWT, Swing, JavaFX & SWT 2
T Elemente werden nicht direkt angezeigt AWT, Swing, JavaFX & SWT 3
S Nachträglich Swing-Elemente in JFrame erzeugen AWT, Swing, JavaFX & SWT 18
K Titel für eingebundene Elemente wie JPanel AWT, Swing, JavaFX & SWT 3
F Dynamische Swing Elemente AWT, Swing, JavaFX & SWT 10
B Grafische Anordnung der Elemente AWT, Swing, JavaFX & SWT 2
S JComboBox zeigt beim 1. öffnen nur 2 Elemente ? AWT, Swing, JavaFX & SWT 9
J LayoutManager der Elemente untereinander anordnet. AWT, Swing, JavaFX & SWT 11
S Zugriff auf Elemente funktioniert mit SWING nicht mehr AWT, Swing, JavaFX & SWT 5
G JButton und andere J-Elemente: Markierung ausblenden AWT, Swing, JavaFX & SWT 6
Paule alle Elemente eines SWT Trees AWT, Swing, JavaFX & SWT 8
S List Elemente AWT, Swing, JavaFX & SWT 4
G Elemente erst da wenn mit Maus drüber gefahren bin AWT, Swing, JavaFX & SWT 2
E GUI-Elemente aus txt- oder xml-File erstellen? AWT, Swing, JavaFX & SWT 5
J FAQ programmieren, welche Swing-Elemente AWT, Swing, JavaFX & SWT 7
M Elemente hängen dicht aufeinander AWT, Swing, JavaFX & SWT 2
S Falsche Position, Elemente erscheinen nicht, Flackern AWT, Swing, JavaFX & SWT 6
DEvent Je nach Auswahl in Liste entsprechende Input-Elemente anzeig AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen


Oben