Wie Panel neu Laden/Malen/Aktualisieren

Status
Nicht offen für weitere Antworten.
B

BlabLub123

Gast
Guten Abend!

Ich habe da eine frage..
Ich hab ein JFrame, in dem JFrame befindet sich ein Panel mit einem JTable drinen.
Nun möchte ich bei Klick auf einen Button das Panel(inkl dem JTable) verkleinern bzw neu ausrichten.
Das mache ich so:

Code:
getJPanel4().setPreferredSize(new java.awt.Dimension(806, 399));
getJPanel4().paint(getJPanel4().getGraphics());
getJPanel4().repaint();
jTable1.paint(jTable1.getGraphics());

Wenn ich dann auf den Button gedrückt habe tut sich allerdings nix, d.h. das Panel(inkl dem Table) wird nicht kleiner und es bleibt gleich. Allerdings ist das Panel nur noch in der neu ausgerichteten größe Verfügbar/editierbar.
Das Panel wird also grafisch nicht kleiner, sondern bleibt gleich.

Wie Kann ich das nun machen das sich das Panel aktualisiert und sich anhand der neuen Größe neu Ausrichtet.


Ich hoffe Ihr habt verstanden was ich meine.
Wenn nicht dann einfach fragen :wink:

Danke schonmal! :toll:
 
S

SlaterB

Gast
unter gar keinen Umständen getGraphics() an einer Swing-Komponente aufrufen!

du brauchst evtl. einen Aufruf
validate();
an der Komponente über dem JPanel, am einfachsten direkt am JFrame aufrufen
 
B

BlabLub123

Gast
Thx erstmal für die Antwort nur das Funktioniert auch nicht:

Code:
getJPanel4().setPreferredSize(new java.awt.Dimension(806, 399));
getJPanel4().repaint();
JFrameMain.validate();
getJPanel4().validate();
jDesktopPane1.setVisible(true);

PS: Wieso darf man kein getGraphics() machen?
 
S

SlaterB

Gast
bist du sicher, dass die PreferredSize-Anwendung überhaupt Auswirkung hat?

scheint aber doch revalidate() zu sein und funktioniert in meinem Test nur beim Parent-Panel der geänderten Komponete,
nicht beim ContentPane-JPanel
(das JFrame hat diese Operation gar nicht erst)

Code:
public class TestGUI
    extends JFrame
{


    public TestGUI()
    {
        final JPanel a = new JPanel();
        a.setPreferredSize(new Dimension(30, 30));
        a.setBackground(Color.GREEN);
        final JPanel pane = new JPanel();
        pane.add(a);

        JButton b = new JButton("Test");
        b.addActionListener(new ActionListener()
            {

                public void actionPerformed(ActionEvent e)
                {
                    a.setPreferredSize(new Dimension(130, 30));
                    pane.revalidate();
                    // ((JPanel)getContentPane()).revalidate();
                }
            });

        add(pane, BorderLayout.CENTER);
        add(b, BorderLayout.SOUTH);
        setSize(400, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);

    }

    public static void main(String[] args)
    {
        new TestGUI();
    }
}

--------------

> Wieso darf man kein getGraphics() machen?

siehe
http://www.java-forum.org/de/viewtopic.php?t=67102

erste Antwort von Marco13 ;)
 
B

BlaBlub123

Gast
Danke für deine Antwort!
Nur habich das irgendwie nicht so richtig verstanden.

Ich habe ein JFrame, auf dem JFrame ist ein Panel, in dem Panel ist ein JTable.
D.h. ich bräuchte noch ein Panel unter dem Aktuellen damit das geht?
Kapier ich nicht ganz :/

Code:
getJPanel4().setPreferredSize(new java.awt.Dimension(100, 100));
getJPanel4().revalidate();
jTable1.revalidate();

Bei dem code macht er auch nichts.
Langsam verzweifl ich :bahnhof:
 
S

SlaterB

Gast
wenn du einem JPanel x eine Größe setzt, dann interessiert das nur dem Panel darüber, welches x irgendwie anzeigen muss

in welchem JPanel steckt das JPanel4 drin, in welchem Layout?
und wie schon einmal gefragt:
bist du sicher, dass die PreferredSize-Anwendung überhaupt Auswirkung hat?

wenn JPanel4 direkt in das JFrame eingefügt wurde, dann wurde das umgleitet in das ContentPane des JFrames,
das hat normalerweise ein BorderLayout und interessiert sich damit nicht für die PreferredSize-Angabe
 
B

BlaBLub123

Gast
Das JPanel sitzt direkt am JFrame mit dem AnchorLayout(Benutze Jigloo).

Ich denke schon das das PreferredSize Auswirkung hat, mit was könnte ich sonst die Größe verändern. SetSize funktioniert auch nicht :/..

Wie kann ich das Problem jetzt lösen? (Da das Panel direkt in das JFrame eingefügt wurde)

PS: Die größe von der Tabelle kann ich mit revalidate ändern das funktioniert, allerdings bleibt das Pane gleich
 
G

Guest

Gast
BlaBLub123 hat gesagt.:
Das JPanel sitzt direkt am JFrame mit dem AnchorLayout(Benutze Jigloo).

Ich denke schon das das PreferredSize Auswirkung hat, mit was könnte ich sonst die Größe verändern. SetSize funktioniert auch nicht :/..

Wie kann ich das Problem jetzt lösen? (Da das Panel direkt in das JFrame eingefügt wurde)

PS: Die größe von der Tabelle kann ich mit revalidate ändern das funktioniert, allerdings bleibt das Pane gleich

PS: Das jTable is in dem Panel mit einem JScrollPane Sourrounded.. Vl tut das was zur sache
 

Marco13

Top Contributor
AnchorLayout kenn ich jetzt nicht, und es ist im wesentlichen Sache des LayoutManagers, OB und WIE er die PreferredSizes berücksichtigt. Aber es kann sich nicht sooo viel sichtbares ändern, wenn das Panel in einem ScrollPane liegt. Setz' ggf. man die PreferredSize für das ScrollPane (und nicht für das Panel).
 
B

Blabla123

Gast
Bringt leider auch nicht die gewünschte veränderung :(

Hier mal ein bsp - code von mir:


Code:
package test;

import com.cloudgarden.layout.AnchorConstraint;
import com.cloudgarden.layout.AnchorLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTable;

import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.SwingUtilities;

public class NewJFrame extends javax.swing.JFrame {
	private JTable jTable1;
	private JPanel jPanel1;
	private JButton jButton1;

	/**
	 * Auto-generated main method to display this JFrame
	 */
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				NewJFrame inst = new NewJFrame();
				inst.setLocationRelativeTo(null);
				inst.setVisible(true);
			}
		});
	}

	public NewJFrame() {
		super();
		initGUI();
	}

	private void initGUI() {
		try {
			getContentPane().setLayout(null);
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			// START >> jButton1
			jButton1 = new JButton();
			getContentPane().add(jButton1);
			jButton1.setText("jButton1");
			jButton1.setPreferredSize(new java.awt.Dimension(53, 12));
			jButton1.setBounds(234, 343, 83, 25);
			jButton1.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent evt) {
					jButton1ActionPerformed(evt);
				}
			});
			// END << jButton1
			// START >> jPanel1
			jPanel1 = new JPanel();
			jPanel1.setLayout(null);
			getContentPane().add(jPanel1);
			jPanel1.setPreferredSize(new java.awt.Dimension(360, 133));
			jPanel1.setBounds(297, 77, 99, 241);
			// START >> jTable1
			TableModel jTable1Model = new DefaultTableModel(new String[][] {
					{ "One", "Two" }, { "Three", "Four" } }, new String[] {
					"Column 1", "Column 2" });
			jTable1 = new JTable();
			jPanel1.add(jTable1);
			jTable1.setModel(jTable1Model);
			jTable1.setPreferredSize(new java.awt.Dimension(333, 121));
			jTable1.setBounds(0, 10, 99, 241);
			// END << jTable1
			// END << jPanel1
			pack();
			this.setSize(640, 408);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private void jButton1ActionPerformed(ActionEvent evt) {
		System.out.println("jButton1.actionPerformed, event=" + evt);

		getContentPane().setPreferredSize(new java.awt.Dimension(10, 10));
		jPanel1.revalidate();
		getContentPane().validate();
		getContentPane().repaint();
		getContentPane().setVisible(true);
		this.validate();
	}

}

Das Bsp funktionieret zwar nur wenn ich auf den Button drücke verändert sich die größe von der Tabelle/Pane nicht :(
Kann mir wer helfen ?
 
S

SlaterB

Gast
mit den einfachstmöglichen Befehlen kinderleicht zu machen:

private void jButton1ActionPerformed(ActionEvent evt) {
System.out.println("jButton1.actionPerformed, event=" + evt);

jPanel1.setBounds(0, 20, 300, 200);
jTable1.setBounds(0, 10, 299, 141);
repaint();
}

bei null-Layout haben PreferredSize und validate() natürlich nix zu melden

ich empfehle noch
jPanel1.setBorder(BorderFactory.createLineBorder(Color.RED));

dann siehst du die Grenzen dieses JPanels
 
G

Gast

Gast
jippii danke dir Slater B !!!

JEtzt funktionierts das es kleiner wird.. Klick ich jedoch dann auf irgend einen Button im Pane wird das ganze wieder automatisch auf die vorherige Größe gesetzt..
 
B

Blabla123

Gast
Was vielleicht auch noch wichtig ist.. Wenn ich das Panel dann verkleinert hab dann kann ich in dem Tab herumklicken und es passt.. Wenn ich allerdings das Tab wechsel (Tabbed Pane )dann springt das Pane wieder auf die originalgröße zurück.
 
S

SlaterB

Gast
ich kann mir nur vorstellen, dass du beim TabWechsel die Bounds neu setzt oder die ganzen TeilPanel neu erzeugst,
was allerdings ziemlich aufwendig ist, was es auch wieder unwahrscheinlich macht,

in jedem Fall wird dir kaum jemand etwas sagen können ohne Code-Beispiel,
bisher habe ich ja auch schon ewig lange unnütz zu PreferredSize diskutiert
und mit einem Code-Beispiel von dir war alles klar, etwa dass du null-Layout mit setBounds verwendest...
 
G

Guest

Gast
Hi du hast recht die Panels im Tab werden neu Geladen wenn ich darauf klicke.. Jetzt hab ich einen MouseKlicked Listener zu dem JTabbedPane hinzugefügt und im actionlistener steht folgendes:

Code:
System.out.println("jTabbedPane2.mouseClicked, event="+evt);
		System.out.println("TEEESTKLICKET");	
		getJPanel4().setBounds(0, 20, 720, 300);
		getJPanel5().setBounds(0,10,700,250);
		getJPanel10().setBounds(0,10,700,250);
		getJPanel13().setBounds(0,10,700,250);

		jTable1.setBounds(0, 10, 700, 250);
		jTable2.setBounds(0,10,700,250);
		getJPanel4().validate();
		getJPanel5().validate();
		getJPanel10().validate();
		getJPanel13().validate();
		jTable1.validate();
		jTable2.validate();
		repaint();

Wenn ich dann auf ein Tab klicke wird es kleiner.. das Passt.. Wenn ich allerdings nochmal auf ein anderes Tab klicke dann wirds größer und sobald ich die maustaste Loslasse wirds wieder kleiner.. Wie kann ich das nun machen damit das gleich kleiner bleibt und sich nicht immer neu ladet?

Hier der code wo ich das Panel/Tabbed Pane definiere:

Code:
	private JPanel getJPanel4() {
		if (jPanel4 == null) {
			jPanel4 = new JPanel();
			AnchorLayout jPanel4Layout = new AnchorLayout();
			jPanel4.setLayout(jPanel4Layout);
			jPanel4.setBorder(BorderFactory.createTitledBorder(null,
					"Schulverwaltungs - System Version 2.0",
					TitledBorder.LEADING, TitledBorder.TOP));
			jPanel4.setForeground(new java.awt.Color(192, 192, 192));
			jPanel4.add(getJTabbedPane2(), new AnchorConstraint(66, 986, 977,
					14, AnchorConstraint.ANCHOR_REL,
					AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL,
					AnchorConstraint.ANCHOR_REL));
			jPanel4.setBounds(0, 20, 720, 300);

		}
		return jPanel4;
	}

Tabbed Pane:
Code:
	private JTabbedPane getJTabbedPane2() {
		if (jTabbedPane2 == null) {
			jTabbedPane2 = new JTabbedPane();
			jTabbedPane2.addTab("Alle Schulen - Schulverwaltung",
					new ImageIcon(getClass().getResource("images/406-up.gif")),
					getJScrollPane1(), "Alle Schulen in einer Datenbank");
			jTabbedPane2.addTab("Favoriten - Verwaltung", new ImageIcon(
					getClass().getResource("images/Favorites.png")),
					getJPanel5(), "Aktuelle Favoritenliste");
			jTabbedPane2.addTab("Schule Ermitteln", new ImageIcon(getClass()
					.getResource("images/Search.png")), getJPanel10(),
					"Passende Schule ermitteln");

			jTabbedPane2.addTab("Informationen", new ImageIcon(getClass()
					.getResource("images/InfoBox.png")), getJPanel13(), null);

		}
		return jTabbedPane2;
	}

Thx schonmal ! =)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Swing Bei Button Click neues Panel laden AWT, Swing, JavaFX & SWT 3
E Swing Panel neu laden /neu zeichnen AWT, Swing, JavaFX & SWT 4
Dit_ Mit Button "Weiter" neues Panel laden, altes ausblenden... AWT, Swing, JavaFX & SWT 4
F Panel in GUI laden? AWT, Swing, JavaFX & SWT 16
T Image laden im Panel ? AWT, Swing, JavaFX & SWT 16
T Anderes Panel nach Button-Klick laden AWT, Swing, JavaFX & SWT 9
L paintComponent in Panel eines Borderlayouts hinzufügen AWT, Swing, JavaFX & SWT 3
A Problem Spiel auf Panel der GUI zu bringen AWT, Swing, JavaFX & SWT 1
CptK Ordentlicher Code & Panel ab bestimmter Komponentenzahl scrollbar machen AWT, Swing, JavaFX & SWT 12
B JTextField in Panel positionieren AWT, Swing, JavaFX & SWT 1
R Swing Panel nur bei Maus sichtbar AWT, Swing, JavaFX & SWT 2
B mit Maus verschiebbares Panel AWT, Swing, JavaFX & SWT 2
S Labels in Panel erstellen AWT, Swing, JavaFX & SWT 1
H Aus Array Container Panel an Tabbedpane zuweisen AWT, Swing, JavaFX & SWT 29
S Swing Panel wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 3
O Kann kei neues Panel zum zeichnen aufrufen... AWT, Swing, JavaFX & SWT 4
J Overlay Panel statt neues Fenster AWT, Swing, JavaFX & SWT 6
CptK Swing DropdownMenu über Panel-Grenzen hinaus anzeigen AWT, Swing, JavaFX & SWT 1
J Aufklappbares Panel in Toolbar AWT, Swing, JavaFX & SWT 6
L ActionListener zu Button in Panel hinzufügen AWT, Swing, JavaFX & SWT 10
S Swing Panel übernimmt komponenten von anderem AWT, Swing, JavaFX & SWT 7
J Panel auf Frame positionieren AWT, Swing, JavaFX & SWT 9
J JFrame Panel hinzufügen AWT, Swing, JavaFX & SWT 10
B AWT Panel größe im BorderLayout einstellen AWT, Swing, JavaFX & SWT 1
K Swing Entfernen von Panel funktioniert nicht AWT, Swing, JavaFX & SWT 5
L JavaFX Animation für Panel wechsel AWT, Swing, JavaFX & SWT 3
L Swing JTable im Panel darstellen AWT, Swing, JavaFX & SWT 8
L JavaFX Klickverhalten bei einem Panel AWT, Swing, JavaFX & SWT 1
A Swing Panel mit ScrollBar AWT, Swing, JavaFX & SWT 7
K Panel verdeckt MenuItem AWT, Swing, JavaFX & SWT 5
H zwei gleich große Panels getrennt durch ein weiteres Panel AWT, Swing, JavaFX & SWT 10
N Swing Label auf Panel legen.. AWT, Swing, JavaFX & SWT 2
J Panel auf Frame löschen und neues Panel Hinzufügen AWT, Swing, JavaFX & SWT 4
T Swing Graphics auf Panel AWT, Swing, JavaFX & SWT 2
B Swing WindowBuilde: Menu -> anderes Panel wechseln AWT, Swing, JavaFX & SWT 1
U Java FX Zusätzliches Label per Knopfdruck während der Laufzeit auf Panel einfügen. AWT, Swing, JavaFX & SWT 2
P AWT Panel überschreibt vorheriges... AWT, Swing, JavaFX & SWT 2
Thallius Swing Warum kann man Texte im Panel nicht markieren? AWT, Swing, JavaFX & SWT 1
S NetBeans, Panel in Frame einfügen AWT, Swing, JavaFX & SWT 3
M AWT Panel wird nicht angezeigt AWT, Swing, JavaFX & SWT 7
P Fenstergröße ändern, Panel soll gleich bleiben AWT, Swing, JavaFX & SWT 2
M JavaFX Slide Panel AWT, Swing, JavaFX & SWT 2
P Swing Panel nicht sichtbar AWT, Swing, JavaFX & SWT 1
M Swing JtextField Panel in ander Panel aufrufen AWT, Swing, JavaFX & SWT 0
M Panel in geerbter JFrame Klasse adden AWT, Swing, JavaFX & SWT 4
S ScrollPane in Textarea und auf Panel AWT, Swing, JavaFX & SWT 4
D Panel wird nicht angezeigt und Fragen zum CardLayout AWT, Swing, JavaFX & SWT 6
S Swing JMenu löscht auf panel gezeichnetes AWT, Swing, JavaFX & SWT 3
X Java Panel zeitweise repainten AWT, Swing, JavaFX & SWT 8
X Panel Probleme (Tetris) AWT, Swing, JavaFX & SWT 8
W Swing Nicht-Editierbares Textfeld in Panel in ScrollPane AWT, Swing, JavaFX & SWT 9
B zweidimensionales Buttonarray auf Panel AWT, Swing, JavaFX & SWT 11
F JAVA-EDITOR: Panel in Frame aufnehmen AWT, Swing, JavaFX & SWT 3
F textarea lässt panel verschwinden AWT, Swing, JavaFX & SWT 4
T LayoutManager GridLayout panel.setSize funktioniert nicht AWT, Swing, JavaFX & SWT 1
A Panel lässt sich nicht bewegen AWT, Swing, JavaFX & SWT 2
E Panel mit Leben füllen AWT, Swing, JavaFX & SWT 2
K Swing Maus in Panel einsperren AWT, Swing, JavaFX & SWT 8
D Panel in Panel zentriert nicht richtig AWT, Swing, JavaFX & SWT 3
P Swing Panel-austausch über einen MenuListener AWT, Swing, JavaFX & SWT 2
1 Swing Bestimme ob ein Subelement eines panel den Fokus verloren hat AWT, Swing, JavaFX & SWT 2
P Swing Button über gesamtes Panel AWT, Swing, JavaFX & SWT 2
O LayoutManager Panel in Panel "maximieren" AWT, Swing, JavaFX & SWT 2
C AWT Horizontale Linie in einem Panel AWT, Swing, JavaFX & SWT 12
T Über mehrere Panel zeichnen AWT, Swing, JavaFX & SWT 2
B Export eines Panel mit ScrollBar AWT, Swing, JavaFX & SWT 4
S Größe von Panel verändern welches auf anderem Panel sitzt AWT, Swing, JavaFX & SWT 10
bluerob Panel im BorderLayout South wird nicht angezeigt AWT, Swing, JavaFX & SWT 5
M Swing Panel klassenübergreifend ändern AWT, Swing, JavaFX & SWT 6
M Swing JFrame in einem Panel zeichnen AWT, Swing, JavaFX & SWT 3
A 2D-Grafik Panel inhalt löschen AWT, Swing, JavaFX & SWT 5
H Scroll Panel wird nicht hinzugefügt AWT, Swing, JavaFX & SWT 6
S Elemente im Panel in richtige Ausgangsstellung bringen AWT, Swing, JavaFX & SWT 10
X Swing Panel Extra Klasse & Aufruf über Button AWT, Swing, JavaFX & SWT 18
Kenan89 2D-Grafik paintComponent quetsch alles in Panel AWT, Swing, JavaFX & SWT 26
C Bild auf Panel vergrößern und verschieben AWT, Swing, JavaFX & SWT 4
C ImageIcon eines Labels auf einem Panel in neuem Fenster anzeigen AWT, Swing, JavaFX & SWT 2
H LayoutManager Panel verschieben sich AWT, Swing, JavaFX & SWT 5
O Swing JTree um Label (oder Panel) erweitern AWT, Swing, JavaFX & SWT 9
S Vaadin: Panel AWT, Swing, JavaFX & SWT 10
R paintComponent malt bei repaint() Rahmen um Panel AWT, Swing, JavaFX & SWT 7
C Etwas durchsichtig machen über einem Panel AWT, Swing, JavaFX & SWT 7
K Panel zu Laufzeit ändern AWT, Swing, JavaFX & SWT 6
T eigene Klasse für Panel AWT, Swing, JavaFX & SWT 9
D Panel aus externer Klasse holen AWT, Swing, JavaFX & SWT 2
L Swing dynamisches Image-Panel in Layout einbinden AWT, Swing, JavaFX & SWT 10
T Listener in anderen Panel deaktivieren AWT, Swing, JavaFX & SWT 3
H Verschiedene JPanels aus eigenen Klassen in JFrame einfügen, nur ein Panel sichtbar AWT, Swing, JavaFX & SWT 4
GUI-Programmer Informations-Panel an Label AWT, Swing, JavaFX & SWT 2
U Elemente im Panel zentrieren mit GridLayout AWT, Swing, JavaFX & SWT 3
J JPanel mit anderem Panel aus anderer Klasse setzen AWT, Swing, JavaFX & SWT 4
F 2D-Grafik Panel-Zeichnung erscheint nicht AWT, Swing, JavaFX & SWT 7
S Panel rapaint AWT, Swing, JavaFX & SWT 18
T AffineTransform wirkt sich nur auf dem ersten Panel aus AWT, Swing, JavaFX & SWT 3
K Swing: Panel in Panel erzeugen AWT, Swing, JavaFX & SWT 11
M Panel in SWT einfügen AWT, Swing, JavaFX & SWT 12
T auf Panel zeichnen AWT, Swing, JavaFX & SWT 4
A FormLayout Panel-Breite AWT, Swing, JavaFX & SWT 7
Dit_ "Expandable" Panel ? AWT, Swing, JavaFX & SWT 6
A Panel-Unterklasse funktioniert nicht AWT, Swing, JavaFX & SWT 16

Ähnliche Java Themen

Neue Themen


Oben