Esse é o desafio. Suponha por exemplo o seguinte trecho
1. final JFrame frame = new JFrame();
2. JComponent panel = new Main().buildPanel();
3. frame.getContentPane().add(panel);
4. frame.pack();
5. frame.setExtendedState(Frame.MAXIMIZED_BOTH);
6. frame.setVisible(true);
7. frame.setResizable(false);
Queremos que não haja possibilidade do usuário restaurar o JFrame.
Por alguma razão secreta, a linha 7 apenas desabilita o botão maximizar/restaurar. Assim o usuário astuto ainda pode usar o clique duplo na barrinha ou então clicar no ícone do JFrame (usualmente uma xícara) e ter o mesmo efeito.
Não adianta pensar em:
7. Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
8. frame.setSize(dim);
9. frame.setResizable(false);
pois não queremos encobrir a barra de tarefas; a não ser que exista um método mais esperto para por exemplo descobrir a área útil da tela. E há: public Rectangle getMaximizedBounds() de java.awt.Frame. O problema é que ele pode retornar null. E ele RETORNA!
Por enquanto a solução está assim.
1. final JFrame frame = new JFrame();
2. JComponent panel = new Main().buildPanel();
3. frame.getContentPane().add(panel);
4. frame.pack();
5. frame.setExtendedState(Frame.MAXIMIZED_BOTH);
6. frame.setVisible(true);
7. Rectangle r = frame.getBounds();
8. frame.setExtendedState(Frame.NORMAL);
9. frame.setBounds(r);
10. frame.setResizable(false);
Mas isso é uma inaceitável porque a aplicação já inicia toda louca maximizando e restaurando do nada.
Enfim, alguém tem alguma idéia?