[RESOLVIDO]JFrame: Problemas ao redimensionar programaticamente

3 respostas
Mantu

Olá pessoal!
Estou com uma dúvida bem básica. Tenho um JFrame que tem em sua porção SOUTH um JPanel. Este JPanel (layout setado para GridLayout) tem uma série de botões. Um destes botões, ao ser clicado, modifica o tamanho do JFrame.
O JFrame está tendo seu tamanho modificado, mas os componentes internos (O JPanel com os botões) não estão se adequando ao novo tamanho. Tal adequação só ocorre se eu redimensionar, via mouse, o JFrame.
Gostaria que os colegas me indicasse o que estou fazendo de errado. Segue abaixo um código que exemplifica a minha situação. Valeu!

/**
 * Author: luciano.mantuaneli
 * 13/08/2008
 */
package tmp;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

public class TMPFrame extends JFrame {
	private JButton btnImport;
	private JButton btnPreview;
	private JButton btnGen;
	private JButton btnRollback;
	private JButton btnCommit;
	private JButton btnClose;

	public TMPFrame() {
		super("BLA");
		instantiateComponents();
		configGui();
	}

	private void instantiateComponents() {
		btnImport = new JButton("Import XSD");
		btnPreview = new JButton("Preview");
		btnGen = new JButton("Save Java File");
		btnRollback = new JButton("Rollback changes");
		btnCommit = new JButton("Commit changes");
		btnClose = new JButton("Close");
	}

	private void configGui() {
		btnImport.addActionListener(
			new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					TMPFrame.this.handleImportAction(e);
				}
			}
		);
		
		/* blablabla...*/
		
		JPanel pnlBtns = new JPanel(new GridLayout(3, 3));
		pnlBtns.add(btnImport);
		pnlBtns.add(btnPreview);
		pnlBtns.add(btnGen);
		pnlBtns.add(btnRollback);
		pnlBtns.add(btnCommit);
		pnlBtns.add(btnClose);
		
		Container c = getContentPane();
		c.add(pnlBtns, BorderLayout.SOUTH);
		
		pack();
		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
	}

	protected void handleImportAction(ActionEvent e) {
		setSize(520, 580);
		repaint();
	}

	public static void main(String[] args) {
		TMPFrame abg = new TMPFrame();
		abg.setVisible(true);
	}

}

3 Respostas

brlima

Nem ideia do que rola (vou procurar saber)…
Mas isso funciona:

protected void handleImportAction(ActionEvent e) {
        setSize(520, 580);
        paintAll(getGraphics());
    }
Mantu

De fato, resolveu o problema. Valeu Bruno!
Mas, alguém sabe dizer porque o repaint não funcionou como eu esperava? Não era função dele fazer isso (o que o paintAll fez)?

brlima

:arrow: Repaint - Repaints the component. If this component is a lightweight component, this results in a call to paint within tm milliseconds.
:arrow: Paint - Paints this component.
:arrow: PaintAll - Paints this component and all of its subcomponents.

Acho que é por isso…

Criado 13 de agosto de 2008
Ultima resposta 13 de ago. de 2008
Respostas 3
Participantes 2