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);
}
}
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.
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;
}
}
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