Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
hallo,
ich habe folgendes problem:
ich habe ein frame erzeugt, welches dynamisch text und labelfelder anzeigen soll. jedoch tut es das nicht ?
wenn ich mit mit dem cursor rübergehe zeigt es erst die dynamsich erstellten dinge an. muss ich soetwas wie repaint machen?
In einem anderen Forum habe ich bereits ein schönes Beispiel gefunden:
Meine Fragestellung findet sich nach dem Code.
Code:
1.
/*
2.
* (cc) sparrow (at) developers-guide.net
3.
* [url]www.developers-guide.net[/url]
4.
*
5.
* Licensed under a creative commons license
6.
* some rights reserved
7.
* For details please visit: [url]http://creativecommons.org/licenses/by/2.5/[/url]
8.
*
9.
*/
10.
11.
import java.awt.Color;
12.
import java.awt.Container;
13.
import java.awt.event.ActionEvent;
14.
import java.awt.event.ActionListener;
15.
16.
import javax.swing.JButton;
17.
import javax.swing.JFrame;
18.
import javax.swing.JLabel;
19.
import javax.swing.JPanel;
20.
21.
22.
/**
23.
* An example code for switching the content of a JFrame.
24.
*/
25.
public class GUISwitcher extends JFrame {
26.
27.
/** Defaut serialVersionUID, not important for this example*/
28.
private static final long serialVersionUID = 1L;
29.
/** Contains the ContentPane of the Frame and will be validated to update the screen*/
30.
Container content;
31.
32.
/**
33.
* Construct for the Frame.
34.
* Adding first Panel to the content
35.
*/
36.
public GUISwitcher() {
37.
super("GUI-Switcher Example");
38.
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
39.
this.content = this.getContentPane();
40.
updateTheGUI(createPanel1());
41.
}
42.
43.
/**
44.
* Update the container by removing all components, adding new
45.
* components and validate the container
46.
* @param panel The JPanel which should be on the Frame
47.
*/
48.
private void updateTheGUI(JPanel panel) {
49.
content.invalidate();
50.
content.removeAll();
51.
content.add(panel);
52.
content.validate();
53.
}
54.
55.
/**
56.
* Will create an example Panel and return it.
57.
* The Panel contains a JButton which will call
58.
* "updateTheGUI" to show the second Panel
59.
* @return The first axample Panel
60.
*/
61.
private JPanel createPanel1() {
62.
JPanel panel = new JPanel();
63.
panel.setBackground(Color.GREEN);
64.
panel.add(new JLabel("This is panel 1"));
65.
JButton button = new JButton("Switch to Panel 2");
66.
button.addActionListener(new ActionListener() {
67.
public void actionPerformed(ActionEvent e) {
68.
updateTheGUI(createPanel2());
69.
}
70.
});
71.
panel.add(button);
72.
return panel;
73.
}
74.
75.
/**
76.
* Will create an example Panel and return it.
77.
* The Panel contains a JButton which will call
78.
* "updateTheGUI" to show the first Panel
79.
* @return The second axample Panel
80.
*/
81.
private JPanel createPanel2() {
82.
JPanel panel = new JPanel();
83.
panel.setBackground(Color.YELLOW);
84.
JButton button = new JButton("Switch to Panel 1");
85.
button.addActionListener(new ActionListener() {
86.
public void actionPerformed(ActionEvent e) {
87.
updateTheGUI(createPanel1());
88.
}
89.
});
90.
panel.add(button);
91.
panel.add(new JLabel("This is panel 2"));
92.
return panel;
93.
}
94.
95.
/**
96.
* The Main-Method will only Construct the Frame, set it's size, center
97.
* it on the screen and make it visible.
98.
* @param arguments Arguments from the command-line, not important for this example
99.
*/
100.
public static void main(String[] arguments) {
101.
GUISwitcher frame = new GUISwitcher();
102.
frame.pack();
103.
frame.setLocationRelativeTo(null);
104.
frame.setVisible(true);
105.
}
106.
107.
108.
}
Ich habe nut einen "statischen" Teil mit NetBeans und dem GUI-Designer erstellt. Dieser statische Teil besteht aus einem JFrame aud dem ein JPanel liegt. Diesem JPanel möchte ich nun in einem bestimmten Bereich "dynamische" JPanel zuweisen. Diese werden aus seperaten Klassen(Dateien) geladen. Ich habe versucht das obige Beispiel meinen Bedürfnissen an zu passen.
"anderesPanel.setPreferredSize(new Dimension(1000,1000));"
daran liegt es leider nicht. es ist besser ich beschreibe das aussehen der GUI ein wenig näher.
Ich habe mit mittels NetBeans eine Oberfläche zusammengeklickt. Diese Besteht aus einem JFrame, meinem Hauptfenster, auf diesem liegt über die gesamte Fläche ein JPanel. Auf diese, JPanel habe ich nun weitere JPanel verteilt. Nun möchte ich auf diesen JPanels wiederum neue JPanel plazieren, abhängig davon welche Buttons gedrückt oder Menüelemente ausgewählt werden.
So erzeuge ich zum Beispiel ein Neues Objekt vom Typ Panel aus der Klasse PP_Panel (welche in einer separaten Datei PP_Panel.java gespeichert ist)
Code:
PP_Panel neuespanel = new PP_Panel();
ich habe gedacht ich könnte es dann einfach mit den folgenden Zeilen auf dem bereits vorhanden JPanel (welche ich mit dem Designer erstellt habe) einfügen.
Code:
vorhandenesPanel.invaliddate();
vorhandenesPanel.removeAll();
PP_Panel neuespanel = new PP_Panel();
vorhandenesPanel.add(neuespanel);
vorhandenesPanel.validate();
Das vorhande Panel ist gross genug um das neuepanel auf zu nehmen.
Allerdings funktioniert wohl schon
Code:
vorhandenesPanel.removeAll();
nicht. vorhande Elemente werde nicht entfernt.
Im Beispiel aus dem anderen Forum wird ja alles dem Hauptcontainer hinzugefügt this.content = this.getContentPane();
Ich habe aber keine Ahnung wie sich das in meinem Fall verhält.
Ich kann ohne Probleme meine separeten JPanels in dem anderen Beispiel plazieren, aber da gibt es ja auch keine anderen JPanels.