Komponente "sauber" entfernen(JToolBar)

beastofchaos

Bekanntes Mitglied
Hallo Javaler,
Ich versuche gerade von einer JToolBar Komponenten unsichtbar zu machen. Dabei soll sich die Größe auch anpassen, was aber nicht funktionieren will.
Ich habe insgesamt 5 Komponenten, die am Anfang per add in die JToolBar gebracht werden. Die JToolBar liegt (nicht floatable) in einem JPanel, neben dem eine andere "konstant große" JToolBar und ein JButton liegen.

Nun will ich, dass, wenn eine Komponente unsichtbar wird, für die Komponente auch kein Platz gelassen wird. Zwar werden sie nicht sichtbar und innerhalb der ToolBar rücken alle Komponenten weiter, um die Lücke zu schließen. Die bildet sich dann aber hinten am Ende der ToolBar...
Ich will aber, dass auch diese Lücke verschwindet und dich also auch die Größe der JToolBar ändert. Ich habe es bisher versucht mit "remove()" statt "setVisible(false)". Am Ende der Veränderung lass ich auch nochmal, damit sich die ToolBar gegebenfalls von der Größe her anpasst, das aufrufen:
Code:
    toolMode.setSize(toolMode.getPreferredSize());
oder auch
Code:
    toolMode.invalidate();
oder auch nichts...

Aber die blöde Lücke will nicht weg. Habe auch mal probehalber "removeAll()" aufrufen lassen. Zwar sind keine Komponenten da, aber die Größe bleibt gleich 🙁

Könnt ihr mir helfen?

Gruß, Thomas
 
Funktioniert auch nicht. Habs zwar auf beide Weisen ausprobiert, aber soll ich das mit "remove und add" mach oder mit "setVislbe(false/true)"?
Was mir gerade noch ein fällt, wäre, die ToolBar zu entfernen und neu dazu zu legen. Vll. würde sich dann die Größe auch neu "einrichten".
 
Erstmal solltest du uns deinen Code zeigen, bzw ein kleines Beispiel ala`:
Java:
	public static void main(String[] args) throws Exception {
		JFrame frame = new JFrame();
		final JPanel panel = new JPanel();
		final JToolBar bar = new JToolBar();
		bar.add(new JButton("Hallo"));
		bar.add(new JButton("Foobar"));
		panel.add(bar);
		frame.add(panel);
		frame.setSize(500, 500);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
		Thread.sleep(3000);
		bar.remove(0);
		bar.revalidate();
	}
 
Ok, hier eine Methode als Beispiel aus dem Programm:
Java:
    private void adoptComboWidth(boolean visible){
    	int penWidth = 1;
    	if (Properties.process != null && !Properties.process.isActualNull()){
            penWidth = Properties.process.getActual().getPenWidth();
    	}
        ((JTextField)comboWidth.getEditor().getEditorComponent()).setText(penWidth + "");
        comboWidth.setVisible(visible);
        if(!visible)
        	toolMode.remove(comboWidth);  //Ist bei Index 0. Deswegen ginge auch toolMode.remove(0);
        else
        	toolMode.add(comboWidth,0);
    }

Und hier werden die Methoden ausgerufen:
Java:
    public final void updateTools(){
        int mode = Properties.tool;
    	adoptComboWidth(mode == Design.SHAPE || mode == Design.DRAW);
        adoptComboType(mode == Design.SHAPE);
        adoptComboBehaviour(mode == Design.SELECT);
        adoptCheckFilled(mode == Design.SHAPE && getComboBoxType() != ShapeDesign.LINE);
        toolMode.revalidate();
    }

edit: Im Anhang ein Bild mit zwei Möglichkeiten, wie das dann aussieht...
 

Anhänge

  • ToolBar.png
    ToolBar.png
    10,9 KB · Aufrufe: 35
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben