very easyimport javax.swing.*;
import javax.swing.event.*;class QQQ extends JFrame 
{
JDesktopPane desk = new JDesktopPane();
JInternalFrame if1 = new JInternalFrame();
JButton bt1 = new JButton("button1");
JButton bt2 = new JButton("button2"); QQQ()
{
setContentPane(desk);
desk.add(if1);
JPanel p = new JPanel();
p.add(bt1);
p.add(bt2);
if1.getContentPane().add(p);
if1.addInternalFrameListener(new MyListener());
if1.reshape(10,10,100,100);
if1.setVisible(true);
setBounds(100,100,400,400);
setVisible(true);
} public static void main(String[] args) 
{
new QQQ();
}
class MyListener extends InternalFrameAdapter
{
 public void internalFrameActivated(InternalFrameEvent e )  
 {
 bt1.requestFocus();  
 } };
}

解决方案 »

  1.   

    好感谢DanielYWoo(小丹尼)的指点,但我觉得这个程序的智能化差一点,
    要鼠标击中 JInternalFrame 才使它产生
    internalFrameActivated(InternalFrameEvent e );
    能不能使它自动产生 internalFrameActivated(InternalFrameEvent e );
    或者有什么其它更方便的方法呢?
    谢谢
      

  2.   

    原来你是要这样,有更简单的方法
    这个例子中,你点击open,打开两个新窗口
    用if1.setSelected(true);来使窗口1激活
    再用txt.requestFocus();来让文本框获得焦点如果忘了先激活窗口1,就设窗口1上的文本矿焦点,
    你会看到一个有意思的bug,窗口2的Title Bar是蓝色的,
    表示当前活动窗口,窗口2的Title Bar是灰色的,但是,
    窗口2的JTextField却可以接受用户输入,呵呵switch1和switch2两个按钮可以切换窗口import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    class QQQ extends JFrame
    {
    JDesktopPane desk = new JDesktopPane();
    JInternalFrame if1 = new JInternalFrame();
    JInternalFrame if2 = new JInternalFrame();
    JButton bt1 = new JButton("Switch 1");
    JButton bt2 = new JButton("Switch 2");
    JButton btOpen = new JButton("Open");
    JTextField txt = new JTextField("I got focus!"); QQQ()
    {
    JPanel temp = new JPanel();
    temp.add(bt1);
    temp.add(bt2);
    temp.add(btOpen);
    getContentPane().add(temp, BorderLayout.NORTH);
    getContentPane().add(desk, BorderLayout.CENTER);
    desk.add(if1);
    desk.add(if2);
    if1.getContentPane().add(txt, BorderLayout.NORTH);
    if1.reshape(10,10,100,100);
    if2.reshape(30,30,100,100);
    bt1.addActionListener(new MyListener());
    bt2.addActionListener(new MyListener());
    btOpen.addActionListener(new MyListener());
    setBounds(100,100,400,400);
    show();
    } public static void main(String[] args) 
    {
    QQQ q = new QQQ();
    }
    class MyListener implements ActionListener
    {
    public void actionPerformed(ActionEvent e)
    {
    try
    {
    if(e.getSource()==bt1)
    if1.setSelected(true);
    else if(e.getSource()==bt2)
    if2.setSelected(true);
    else{
    if1.setVisible(true);
    if2.setVisible(true);
    if1.setSelected(true);
    txt.requestFocus();  
    }
    }
    catch (Exception ex)
    {
    } }
    };
    }