JDK-4245251 : JInternalFrame Infectious maximise
  • Type: Bug
  • Component: client-libs
  • Sub-Component: javax.swing
  • Affected Version: 1.2.2
  • Priority: P4
  • Status: Closed
  • Resolution: Duplicate
  • OS: windows_nt
  • CPU: x86
  • Submitted: 1999-06-09
  • Updated: 1999-09-21
  • Resolved: 1999-09-21
Related Reports
Duplicate :  
Description

Name: vi73552			Date: 06/09/99


Problem 2

Screen Z-Order (Take 3)

Windows screen Z-Order changes with selection, the current 
implementation of WindowsDesktopManager saves frames in 
a Vector array, its order does not change with selection. When
you close the frame at Vector.size()-1 it flips selection to
the frame at Vector.first(). The correct behaviour is to switch to
the frame that was last active.

This problem can be demonstrated by running the attached example

1) Run example

2) Notice how the visible Z-Order is Fruits,Animals,Plants (top)

3) Click on Animals, now the visible Z-order is Fruits,Plants,Animals.

4) Now close Plants, notice that Fruits is now selected and not the
  expected Plants!


/////////////////////////////////////////
// Code to reproduce problems 
/////////////////////////////////////////

package swingtest;

import java.awt.event.MouseEvent;
import javax.swing.event.MouseInputListener;
import javax.swing.JList;
import javax.swing.plaf.basic.BasicListUI;

public class PreListClickListener extends BasicListUI
{int click = 0;
 String name;
 
 public PreListClickListener(String my_name)
 {name = my_name;
 }
 protected MouseInputListener createMouseInputListener()
 {return new MyMouseCtrl();
 }
 public class MyMouseCtrl extends MouseInputHandler 
 {public void mousePressed(MouseEvent e) 
  {super.mousePressed(e);
  
   System.out.println(name + " click number " + ++click + " Pre List Listener.");

  }
 
 }
 
}

package swingtest;

import java.awt.event.MouseEvent;
import java.awt.event.MouseAdapter;


public class ListClickListener extends MouseAdapter 
{int click = 0;
 String name;

 public ListClickListener(String my_name)
 {name = my_name;
 }
 public void mouseClicked(MouseEvent e) 
 {
  System.out.println(name + " click number " + ++click + " Post List Listener");
  
 }
 
 

}

package swingtest;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class InfraBrowse extends JInternalFrame 
{JList list1;
  
 
 final static int CATEGORY_LIST = 0,INSTANCE_LIST = 1;
 
 public InfraBrowse(String my_name)
 {super(my_name,true,true,true,true);

  list1 = new JList();
  
  // Normal mouse event handle
  
  list1.addMouseListener(new ListClickListener(my_name));
  
  registerKeyboardAction(new HelpListener(this),
                         "HELP!",
                         KeyStroke.getKeyStroke(KeyEvent.VK_F1,0),
                         JComponent.WHEN_IN_FOCUSED_WINDOW);

  // reliable mouse event handler
  
  list1.setUI(new PreListClickListener(my_name));
  
  getContentPane().add(list1);
  getContentPane().setLayout(new GridLayout(1,1));
 }
 
public boolean load(Object seed)
{
 String arr[] = (String[]) seed;
 
 list1.setListData(arr);

 return true;
}

public class HelpListener implements ActionListener
 {JInternalFrame parent;
 
  public HelpListener(JInternalFrame parent)
        {this.parent = parent;
        }
        public void actionPerformed(ActionEvent e)
  {System.out.println(getTitle() + " help key press."); 
  }
 }      

}

package swingtest;

import java.awt.*;
import java.io.IOException;
import java.io.FileInputStream;
import java.net.URL;
import java.net.MalformedURLException;

import javax.swing.*;

public class AdminFrame extends JFrame 
{JPanel             backdrop;
 JDesktopPane       win_mgr;
 
 String fruits[] = {"apples","oranges","plumes","melons"};
 String animals[] = {"cats","dogs","elephants","cows"};
 String plants[] = {"daisys","green ones","roses","cow parsly","poppys"};


 public AdminFrame()
 {super("Jacobs Rimell");

  // Windows look and feel
    
  try {UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
       
      javax.swing.SwingUtilities.updateComponentTreeUI(this);
           } 
  catch (Exception exc) 
           {System.err.println("Unsupported Windows LookAndFeel.");
            return;
                 }
                 
  /////////////////////////////////////////////////
  // Now the Back Drop
  /////////////////////////////////////////////////
  
  backdrop = new JPanel();
    
  win_mgr = new JDesktopPane();
  
  backdrop.setLayout(new BorderLayout());
  backdrop.add(win_mgr,BorderLayout.CENTER);  
  backdrop.setPreferredSize(new Dimension(800,500));

  setSize(800,600);
   ///////////////////////////////////////////////////
  
  Container container = getContentPane();
 
  container.setLayout(new BorderLayout());
  container.add(BorderLayout.CENTER,backdrop);
  
  

 }
public void openSubWindow(String name,
                          String data[],
                          int    x_pos,
                          int    y_pos)
 {try{InfraBrowse i_frame = new InfraBrowse(name);
    
      i_frame.load(data);
       
      i_frame.setBounds(x_pos,y_pos,300,300);
      
      win_mgr.add(i_frame,javax.swing.JLayeredPane.PALETTE_LAYER);
      
      i_frame.setSelected(true);

       
     }
  catch (java.beans.PropertyVetoException exe)
     {
     }
   
  
 }
 public static void main (String args[]) 
 {AdminFrame mainFrame = null;
     
     
  mainFrame = new AdminFrame();
         
  mainFrame.setVisible(true);
          
  mainFrame.openSubWindow("Fruits",
                          mainFrame.fruits,
                          0,0);    
  mainFrame.openSubWindow("Animals",
                          mainFrame.animals,
                          200,30);  
  mainFrame.openSubWindow("Plants",
                          mainFrame.plants,
                          0,300);  


 }
}
(Review ID: 84130) 
======================================================================

Comments
WORK AROUND Name: vi73552 Date: 06/09/99 No work around ======================================================================
11-06-2004