добрый день!
Есть проблема. Создаю окошко, в нем JDesktopPane, далее создаю внутренний фрейм. После создания фокус не передается во внутренний фрейм. Все сделано как в
How to Use Internal Frames
Более того, после создания фрейма он не активируется (евент frameActivated не кидается). но стоит ткнуть мышкой и все ок. Есть интересный момент. Если создавать (или активировать) фрейм в отдельном треде через некоторое время (закомментаренный кусок), то все ок!. Похоже на баг в jdk.. Вот код:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
public class InternalFrameDemo extends JFrame
implements ActionListener {
JDesktopPane desktop;
public InternalFrameDemo() {
super ("InternalFrameDemo");
//Make the big window be indented 50 pixels from each edge
//of the screen.
int inset = 50 ;
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setBounds(inset, inset,
screenSize.width - inset* 2 ,
screenSize.height - inset* 2 );
//Set up the GUI.
desktop = new JDesktopPane(); //a specialized layered pane
setContentPane(desktop);
setJMenuBar(createMenuBar());
createFrame(); //create first "window"
}
//Create a new internal frame.
protected void createFrame() {
final MyInternalFrame frame = new MyInternalFrame();
frame.setVisible(true); //necessary as of 1.3
desktop.add(frame);
/*
Thread setter = new Thread(){
public void run() {
try {
sleep(1000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
frame.setSelected(true);
} catch (PropertyVetoException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
setter.start();
*/
frame.addInternalFrameListener( new InternalFrameListener()
{
public void internalFrameActivated(InternalFrameEvent e) {
// TODO Auto-generated method stub
System.out.println("Activated");
}
public void internalFrameDeactivated(InternalFrameEvent e) {
// TODO Auto-generated method stub
System.out.println("Deactivated");
}
public void internalFrameDeiconified(InternalFrameEvent e) {
// TODO Auto-generated method stub
}
public void internalFrameIconified(InternalFrameEvent e) {
// TODO Auto-generated method stub
}
public void internalFrameOpened(InternalFrameEvent e) {
// TODO Auto-generated method stub
}
public void internalFrameClosed(InternalFrameEvent arg0) {
// TODO Auto-generated method stub
}
public void internalFrameClosing(InternalFrameEvent arg0) {
// TODO Auto-generated method stub
}
});
frame.show();
try {
frame.setSelected(true);
System.out.println("request focus returned: " + frame.requestFocusInWindow());
} catch (PropertyVetoException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
...
}
Моя проблема описана еще и вот тут:
сановский форум