JFrame, setDefaultLookAndFeelDecorated() [RESOLVIDO]

Olá pessoal, estou usando o método setDefaultLookAndFeelDecorated(true) do pacote javax.swing.JFrame. No entanto, estou querendo fazer o sequinte: tenho o frame principal, e supondo que o o usuário precise de ajuda (clicou no botão, que teoricamente seria o de ajuda) aí no caso irá aparecer a instancia da nova JFrame (tal como no código). Mas, quero que a nova instancia apareça com o método setDefaultLookAndFeelDecorated(true) para que o efeito visual fosse tal como aparecem as JInternalFrame.

Devo utilizar JInternalFrame para resolver isso? (acho que o código ficará maior). Mas, estou curioso pelo seguinte fato: clicando no botão irá instanciar a nova classe (a intância de JFrame com o método setDefaultLookAndFeelDecorated(true)) a primeira vez ela aparecerá normalmente com o visual default de uma JFrame, no entanto, após fecha-la e clicar novamente no botão o visual dela muda. Sendo assim, parece que o método só faz efeito apos fechado a primeira vez (sei que não é isso, mas está estranho). Alguém sabe o que está acontecendo?

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

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


public class MyJFrame extends JFrame implements ActionListener{
	
	private JButton botao;
	public MyJFrame() {
		super("Main");
		setLayout(new BorderLayout());
		botao = new JButton();
		add(botao,BorderLayout.EAST);
		setSize(500,500);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		botao.addActionListener(this);
	}
    
	public static void main(String []args){
		new MyJFrame().setVisible(true);
	}

	@Override
	public void actionPerformed(ActionEvent event) {
		if(event.getSource().equals(botao)){
			new HelpFrame().setVisible(true);
		}
		
	}
}

class HelpFrame extends JFrame{
	
	public HelpFrame() {
		super("Help");
		setSize(300,300);
		setDefaultLookAndFeelDecorated(true);
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	}
}

Alguém tem idéia do que possa ser?

[]'s

Amigo, use o setDefaultLookAndFeelDecorated(true); na janela principal e todas que forem chamadas por ela estarão com o efeito visual que você deseja. Li umas 3 vezes antes de responder, se não for isso desculpe foi o que eu entendi. Você está usando na janela secundária e para todos os efeitos se aplicar a janela principal o “MyJFrame” não precisará por o método nas outras já que elas vão herdar isto.

A janela secundária não hera da classe MyFrame. Outra que a classe MyFrame eu quero deixar ela no Style “Swing” padrão mesmo. Agora a classe FrameHelp que eu instancio eu quero deixar ele com o setDefaultLookAndFeelDecorated(true). Mas, acontece que a primeira vez que a instancia de FrameHelp é criada, ela cria com o padrão swing, coomo se o método setDefault…(false) estivesse com o parametro false.

Alguém sabe o que esta ocorrendo?

Bom dia cara! Agora que entendi ^^’

Ajustei o seu código, agora funciona. O que eu fiz só foi criar uma instância e antes que chame o setvisible ele dá o decorated. O código está aí abaixo, porque não tem muito pra comentar. O que estava acontecendo é que você usava o super() e ele herdava logo as características e como o decorated é false ele carregava a primeira vez sem. Aí só foi fazer um método pra ele dar o decorated antes de chamar o público. É isso ^^

package br.com.none.gui;

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

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

public class MyFrame extends JFrame implements ActionListener {

    private JButton botao;

    public MyFrame() {
        super("Main");
        setLayout(new BorderLayout());
        botao = new JButton();
        add(botao, BorderLayout.EAST);
        setSize(500, 500);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        botao.addActionListener(this);
    }

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

    @Override
    public void actionPerformed(ActionEvent event) {
        if (event.getSource().equals(botao)) {
            HelpFrame.getInstance().setVisible(true);

        }

    }
}

class HelpFrame extends JFrame {

    private static HelpFrame instance;

    public HelpFrame() {

        super("Help");
        setSize(300, 300);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    }

    public static HelpFrame getInstance() {
        if (instance == null) {
            HelpFrame.setDefaultLookAndFeelDecorated(true);
            instance = new HelpFrame();

        }
        return instance;
    }
}

Hmm… Saquei a ideia. Vlw ae CaioO, deu certinho.

Flw Brother!

Por nada cara. Só faz um favor, edite o título do seu tópico e coloque a tag [RESOLVIDO].
Sabe padronizando assim, quando uma pessoa tiver o mesmo problema que o seu ela vai na ferramenta pesquisar e vai procurar logo por aqueles resolvidos. Será de grande ajuda para toda a comunidade. Boa tarde :wink: