JPanel wird nicht ganz angezeigt

pikus

Mitglied
hallo ich möchte ein JPanel löschen und den rechten nach rechts verschieben
aber er wird dann nicht komplet angezeigt
kann mir jmand helfen?

PHP:
        panell[id].removeAll();
        panell[id].setBorder(null);     //der jpanel in der Mitte wird gelöscht
        frame.repaint();
        int x=panell[id2].getX();       //der Rechte wird nach rechts verschoben
        int y = panell[id2].getY();
        panell[id2].setLocation(x-110,y);

Bilder sehen sie im Anhang

DANKE
 

Anhänge

  • Unbenannt-1 Kopie.jpg
    Unbenannt-1 Kopie.jpg
    54,3 KB · Aufrufe: 42
  • Unbenannt-2.jpg
    Unbenannt-2.jpg
    28,1 KB · Aufrufe: 34
Zuletzt bearbeitet:
Hallo!

hab mal etwas ähnliches mit checkboxen gemacht ... leider hab ich das projekt nicht mehr, aber ich erinnere mich waage an
Java:
// code löschen / hinzufügen o.ä.
frame.validate();
oder
Java:
frame.setVisible(false);
// code löschen / hinzufügen o.ä.
frame.setVisible(true);
eins von beiden müsste es gewesen sein!
möglicherweise nicht die eleganteste lösung, aber es hat funktioniert *gg*

Viel Glück!
Felix

EDIT:
sonst setz doch mal das repaint an eine andere stelle, wo du eigentlich das Panel schon verschoben hast... mag dumm klingen, aber einen versuch ist es wert :)
 
Hallo!

zeig mal bitte den kompletten Code der Methode oder Klasse... vielleicht kann ich dann besser helfen bzw. selber mal testen :)

Gruß
Felix
 
Hallo!

Also dafür, dass ich dir das nun doch noch geschrieben habe, möchte ich aber ne gute Bewertung haben ;-]

Java:
package src;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

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

/**
 * @author Felix
 *
 */
public class Main extends JFrame {

	private JFrame frame = null;
	private JPanel content = null;
	private Vector<JPanel> panes = null;
	private JButton button = null;
	
	public Main() {
		this.frame = this;
		this.setContentPane(getContent());
		this.setSize(250, 175);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setVisible(true);
	}
	
	private JPanel getContent() {
		content = new JPanel();
		content.setLayout(null);
		content.add(getButton());
		getPanes();
		return content;
	}
	
	private void getPanes() {
		int x = 5;
		panes = new Vector<JPanel>();	
		for(int i=0; i<3; i++) {
			JPanel pane = new JPanel();
			if(i == 0)
				pane.setBackground(Color.BLACK);
			else if(i == 1)
				pane.setBackground(Color.BLUE);
			else
				pane.setBackground(Color.GREEN);
			pane.setBounds(x, 5, 75, 75);
			panes.add(pane);
			content.add(pane);
			x += 80;
		}	
	}
	
	private JButton getButton() {
		button = new JButton();
		button.setText("Lösch");
		button.setBounds(55, 100, 125, 25);
		button.addActionListener(new ActionListener() {
			private int cnt = 0;
				
			public void actionPerformed(ActionEvent arg0) {
				int x = 5;				
				cnt++;
				
				if(cnt < 4) {
					content.removeAll();
					panes.remove((3-cnt));
					for(int i=0; i<(3-cnt); i++) {
						panes.elementAt(i).setBounds(x, 5, 75, 75);				
						content.add(panes.elementAt(i));
						x += 80;
					}	
					content.add(button);
					frame.repaint();			
				}		
			}	
		});
		return button;
	}
	
	public static void main(String[] args) {
		new Main();
	}

}

Vielleicht hilft dir das ja nun weiter... Viel Glück!
Gruß
Felix
 
Hallo,

ich weiß nicht, ob dir der Code geholfen hat. Aber ich denke mal, dass ich dir sagen kann, warum dein Panel nicht ganz angezeigt wird.
Für mich sieht es so aus, als würde das Panel von dem alten Panel (das zu entfernende Panel) überdeckt wird, da du es nicht entfernst, sondern nur die Componenten vom Panel entfernst und das Panel eigentlich immer noch da ist, wo es war. Du solltest vielleicht das Panel auch vom Fenster löschen. Ich weiß leider nicht auf welcher Componente deine Panels sind. Ich gehe einfach mal davon aus, dass sie dem Frame hinzugefügt wurden. Versuch es mal so:

Code:
 panell[id].removeAll();
        panell[id].setBorder(null);     //der jpanel in der Mitte wird gelöscht // hier löschst du nicht, sondern setzt nur den Rahmen auf null
        frame.remove(panell[id]); // so kannst du das Panel löschen, wenn es dem Fenster hinzugefügt wurde, sonst einfach statt des frames die Componente angeben auf der es hinzugefügt wurde.
        frame.repaint();
        int x=panell[id2].getX();       //der Rechte wird nach rechts verschoben
        int y = panell[id2].getY();
        panell[id2].setLocation(x-110,y);


MFG

zEriX
 
Zurück