Muda configs do JFrame apos inicializado

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 é:

[quote]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)[/quote]

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