Obrigado Marco!
O requestFocus ou o requestFocusInWindow funciona quando o IFrame tomar a frente do que já está aberto, mas o que preciso mesmo seria quando eles estiverem minimizados e eu clicar no botão no Rodapé , o frame3 pudesse ser acionado, piscando ( chamando a atenção) para o usuário clicar nele.
veja abaixo, fiz o fonte do que acontece.
peço apenas que quando abrir o aplicativo, por favor minimize todos os IFrames e clique no Botão abaixo para fazê-lo piscar. note que não acontece nada.
Já não sei o que posso fazer :?
Abraços
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyVetoException;
import java.util.HashMap;
import java.util.Iterator;
import javax.swing.JButton;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
public class Teste extends JPanel {
private JDesktopPane jDesktopPane;
private JButton btnAcionar;
private HashMap<String, MyInternalFrame> iframes = new HashMap<String, MyInternalFrame>();
public Teste() {
initialize();
}
private JDesktopPane getJDesktopPane() {
if (jDesktopPane == null) {
jDesktopPane = new JDesktopPane();
jDesktopPane.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
jDesktopPane.setBounds(new Rectangle(348, 90, 10, 10));
jDesktopPane.setAutoscrolls(true);
jDesktopPane.setSize(400, 322);
jDesktopPane.setBackground( Color.white);
iframes.put("title1", new MyInternalFrame("Title1"));
iframes.put("title2", new MyInternalFrame("Title2"));
iframes.put("title3", new MyInternalFrame("Title3"));
iframes.put("title4", new MyInternalFrame("Title4"));
for (Iterator iterator = iframes.values().iterator(); iterator.hasNext();) {
MyInternalFrame type = (MyInternalFrame) iterator.next();
jDesktopPane.add(type,JLayeredPane.TOP_ALIGNMENT);
}
}
return jDesktopPane;
}
/**
* This method initializes this
*/
private void initialize() {
this.setLayout(new BorderLayout());
this.setSize(new Dimension(400, 333));
this.add(getJDesktopPane(), BorderLayout.CENTER);
this.add(getBtnAcionar(), BorderLayout.SOUTH);
}
private JButton getBtnAcionar() {
if (btnAcionar == null) {
btnAcionar = new JButton("CLICK PARA PISCAR");
btnAcionar.addActionListener(new ActionListener(){
public void actionPerformed( ActionEvent e){
try {
// tentativa de ficar piscando o InternalFrame
iframes.get("title3").setSelected(true);
iframes.get("title3").requestFocus();
iframes.get("title3").requestFocusInWindow();
System.out.println("deu Foco!");
} catch (PropertyVetoException e1) {
e1.printStackTrace();
}
//jDesktopPane.getDesktopManager().iconifyFrame(frames.get("title3"));
}});
}
return btnAcionar;
}
/**
* @param args
*/
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(910,480);
frame.setResizable(false);
frame.add(new Teste());
frame.setVisible(true);
}
class MyInternalFrame extends JInternalFrame{
private JPanel jContentPane;
private JLabel label;
public MyInternalFrame(String title) {
super(title,true,true,false,true);
label = new JLabel(title);
this.setSize(new Dimension(495, 380));
this.setContentPane(getJContentPane());
this.setVisible(true);
this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
}
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(label);
}
return jContentPane;
}
}
}