Muda configs do JFrame apos inicializado

1 resposta
edertp

Ola galera,
estou usando o metodo setUndecorated(true) pra retira barra azul da parte superior do JFrame, o metodo funciona perfeitamente qd chamado dentro do Construtor, porem eu tentei iniciar a aplicacao sem chamar setUndecorated e chama-lo atraves do evento de um botao. Qd fiz isso recebi um erro, logo minha pergunta é: seria possivel mudar essa propriedade apos o JFrame, inicializado, mostrado? Desde ja agradeco.
Falos.

O Erro é:

<blockquote>Exception in thread AWT-EventQueue-0 java.awt.IllegalComponentStateException:

The frame is displayable.

at java.awt.Frame.setUndecorated(Frame.java:838)

at Sessao.jB3ActionPerformed(Sessao.java:2035)

at Sessao.access$1100(Sessao.java:55)

at Sessao$12.actionPerformed(Sessao.java:1373)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:18

49)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.jav

a:2169)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel

.java:420)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258

)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonL

istener.java:234)

at java.awt.Component.processMouseEvent(Component.java:5488)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)

at java.awt.Component.processEvent(Component.java:5253)

at java.awt.Container.processEvent(Container.java:1966)

at java.awt.Component.dispatchEventImpl(Component.java:3955)

at java.awt.Container.dispatchEventImpl(Container.java:2024)

at java.awt.Component.dispatchEvent(Component.java:3803)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212

)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
    at java.awt.Container.dispatchEventImpl(Container.java:2010)
    at java.awt.Window.dispatchEventImpl(Window.java:1774)
    at java.awt.Component.dispatchEvent(Component.java:3803)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchTh
read.java:242)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre

ad.java:163)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)

    at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)</blockquote>

1 Resposta

dudaskank

Sim, isto é possível, você precisa primeiro dar um dispose() no seu JFrame, mudar a propriedade e depois chamar novamente o setVisible() para mostrar a janela. Segue um exemplo baseado em http://forum.java.sun.com/thread.jspa?threadID=235247&messageID=2702086:

package teste.guj;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

public class TesteSetUndecorated extends JFrame {
	private static final long serialVersionUID = 1L;

	private boolean undecorated;

	private JButton button;

	public TesteSetUndecorated() {
		super(TesteSetUndecorated.class.toString());
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		undecorated = false;
		button = new JButton("setUndecorated(" + !undecorated + ");");
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				changeDecorated();
			}
		});
		getContentPane().add(button);
		pack();
	}

	public void changeDecorated() {
		dispose();
		undecorated = !undecorated;
		setUndecorated(undecorated);
		button.setText("setUndecorated(" + !undecorated + ");");
		setVisible(true);
	}

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

flw

Criado 2 de outubro de 2006
Ultima resposta 4 de out. de 2006
Respostas 1
Participantes 2