package test.window;

//see http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6699851

import java.awt.EventQueue;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;

  public class MultiScreen8176359Test extends JFrame
  {
    public static void main(String[] args) throws Exception
    {
      EventQueue.invokeLater(new Runnable(){
        public void run()
        {
          try
          {
            JFrame.setDefaultLookAndFeelDecorated(true);
            new MultiScreen8176359Test();
          }
          catch(Exception e)
          {
            e.printStackTrace();
          }          
        }
      });
    }

    public MultiScreen8176359Test() throws Exception
    {
      JPanel panel = new JPanel();
      BoxLayout layout = new BoxLayout(panel, BoxLayout.PAGE_AXIS);
      panel.setLayout(layout);
      panel.setBorder(new EmptyBorder(10,10,10,10));

      GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
      GraphicsConfiguration dgc = ge.getDefaultScreenDevice().getDefaultConfiguration();
      System.err.println("Main-Screen bounds: " + dgc.getBounds());
      
      final GraphicsDevice[] gs = ge.getScreenDevices();
      for (int i = 0; i < gs.length; i++) 
      { 
        final int screen = i;
        boolean primary = ge.getDefaultScreenDevice() == gs[i];
        JButton button = new JButton(new AbstractAction("Create window for screen " + i + (primary ? " (Primary)" : "")){
          public void actionPerformed(ActionEvent evt)
          {
            createFrame4Screen(gs, screen);
          }          
        });
        panel.add(button);
        panel.add(Box.createVerticalStrut(10));
      }
      add(panel);
      
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setTitle(this.getClass().getSimpleName());
      pack();
      setLocationRelativeTo(null);
      setVisible(true);
    } 
    
    private void createFrame4Screen(GraphicsDevice[] gs, int i)
    {     
      JFrame f = new JFrame(gs[i].getDefaultConfiguration());
      GraphicsConfiguration gc = f.getGraphicsConfiguration();
      Rectangle maxBounds = gc.getBounds();
      Insets screenInsets = Toolkit.getDefaultToolkit().getScreenInsets(gc);
      
      maxBounds.height -= screenInsets.bottom;

      maxBounds.x=0;
      maxBounds.y=0;
      f.setMaximizedBounds(maxBounds);
      f.setTitle("Screen " + i + " " + maxBounds);                
      f.setExtendedState(JFrame.MAXIMIZED_BOTH);              
      f.setVisible(true);
      f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);        
      
      JTextPane textPane= new JTextPane();
      textPane.setText("Frame bounds: " + f.getSize() + "\n" + "Screen insets: " + screenInsets);
      JScrollPane scroller = new JScrollPane(textPane);
      f.getContentPane().add(scroller); 
    }    
}
