Ola,
Tenho uma aplicação em modelo Mdi e preciso que uma dada janela nunca perca o foco a menos que seja fechada.
Tudo oque tentei não funcionou, caso alguem tenha alguma ideia:
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
public class Mdi extends JFrame{
public static JDesktopPane desktop;
public Mdi(){
super("Titulo");
desktop = new JDesktopPane();
setJMenuBar(criamMenu());
pack();
setExtendedState(MAXIMIZED_BOTH);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setContentPane(desktop);
}
private JMenuBar criamMenu(){
JMenuBar barraDeMenu;
JMenu menu;
JMenuItem itemDoMenu;
barraDeMenu = new JMenuBar();
menu = new JMenu("Arquivo");
itemDoMenu = new JMenuItem("Abrir");
barraDeMenu.add(menu);
menu.add(itemDoMenu);
itemDoMenu.addActionListener(new Consulta());
return barraDeMenu;
}
public static void main(String args[]){
Mdi app = new Mdi();
app.setVisible(true);
}
}[/code]
[code]import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JInternalFrame;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JToolBar;
public class Consulta extends JInternalFrame implements ActionListener {
public Consulta(){
super("Consulta",false,true,false,false);
setDefaultCloseOperation(HIDE_ON_CLOSE);
setLayout(new BorderLayout());
Mdi.desktop.add(this);
setSize(300,300);
//
// Na versão original ele fica maximizado:
// try {
// this.setMaximum(true);
// } catch (PropertyVetoException ex) {
// ex.printStackTrace();
// }
//
add(criaBarra(),BorderLayout.NORTH);
JPanel gradePnl;
gradePnl = new JPanel();
gradePnl.add(new JTable(3,4));
gradePnl.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(10,10,10,10),BorderFactory.createLoweredBevelBorder()));
gradePnl.setLayout(new BoxLayout(gradePnl,BoxLayout.Y_AXIS));
add(gradePnl);
}
private JToolBar criaBarra(){
JToolBar barra;
JButton botao;
barra = new JToolBar();
botao = new JButton("Botao");
barra.add(botao);
botao.addActionListener(new Novo());
return barra;
}
public void actionPerformed(ActionEvent actionEvent) {
setVisible(true);
}
}
[code]import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyVetoException;
import javax.swing.JInternalFrame;
import javax.swing.JOptionPane;
import javax.swing.event.InternalFrameAdapter;
import javax.swing.event.InternalFrameEvent;
public class Novo extends JInternalFrame implements ActionListener {
public Novo() {
super("Novo",false,true,false,false);
setDefaultCloseOperation(HIDE_ON_CLOSE);
Mdi.desktop.add(this);
setSize(200,200);
addInternalFrameListener(new InternalFrameAdapter() {
public void internalFrameDeactivated(InternalFrameEvent e){
recebeFoco();
}
});
}
void recebeFoco(){
//
// Tentativas inuteis:
// requestFocus();
// toFront();
// requestFocusInWindow();
// grabFocus();
// Mdi.desktop.setSelectedFrame(this);
// setRequestFocusEnabled(true);
// try {
// setSelected(true);
// } catch (PropertyVetoException ex) {
// ex.printStackTrace();
// }
JOptionPane.showInternalMessageDialog(Mdi.desktop,“Chegou aqui e nao deu certo!”);
//
}
public void actionPerformed(ActionEvent actionEvent) {
setVisible(true);
}
}
[/code]
Realmente preciso de ajuda.
Valeu