[Resolvido] JInternalFrame se comportando estranhamente

Galera, eu to com uma duvida no minimo estranha.

Eu tenho uma aplicação que trabalha com modulos. Ex:

@Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long codigo_modulo;
    @Column(name = "nome", length = 100)
    private String nome;
    @ManyToOne
    @JoinColumn(name = "codigo_parent")
    private Modulo parent;
    @Column(name = "imagem")
    private String imagem;
    @Column(name = "ordem")
    private Integer ordem;
    @Enumerated(EnumType.STRING)
    private ModuloEnum moduloEnum;

Ou seja, ListaCliente é um módulo, cadastracCliente é outro e assim por diante…

Cada módulo possui um InternalFrame correspondente. No enum eu seto o InternalFrame correspondente:

ModuloEnum

pacientes(7) { @Override public void setFrame() { super.frame = new ListaPaciente(); } };

Até ai tudo bem! O problema começa aqui:

JInternalFrame internal = mod.getModuloEnum().getFrame();

SwingUtil.adicionarJIternalFrame(internal, desktopPane);

Com esse código ele abre o JInternalFrame sem LookAndFeel:

[URL=http://imageshack.us/photo/my-images/233/semlook.png/][/URL]

Aí eu colocando assim:

ListaPaciente internal = new ListaPaciente(); SwingUtil.adicionarJIternalFrame(internal, desktopPane);

funciona normal!

[URL=http://imageshack.us/photo/my-images/10/comlook.png/][/URL]

Alguém ja passou por isso, ou tem alguma idéia do que pode ser?

[]'s

Faça seu enum fazer lazy creation do InternalFrame. Ou seja:

pacientes(7) { @Override public JInternalFrame getFrame() { if (frame == null) { frame = new ListaPaciente(); } return frame; } };

Não será mais necessário criar o JInternalFrame no construtor, nem manter o método setFrame.

O problema que você tem é que provavelmente seu enum está sendo inicializado antes mesmo do look&feel ser aplicado. Como o enum é estático, sua inicialização ocorre no momento em que a classe é carregada pela VM, e isso pode ser antes mesmo do seu main executar.
Outra coisa, certifique-se que o Look&Feel está sendo definido antes mesmo da primeira janela ser aberta. Nem a Oracle e nem a Sun recomendam trocar o look&feel no meio da execução do programa.

Grande Vini…

Fiz exatamente como você falou e funcionou… acredito que era esse o problema mesmo, ele carregava o enum e depois o main…

Muito Obrigado