Java by API/javax.swing/SwingUtilities

Материал из Java эксперт
Версия от 17:21, 31 мая 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

SwingUtilities: convertPointFromScreen(Point p, Component c)

   <source lang="java">
 
   

import java.awt.Point; import javax.swing.JButton; import javax.swing.SwingUtilities; public class Main {

 public static void main(String[] argv) {
   JButton component = new JButton();
   Point pt = new Point(component.getLocation());
   SwingUtilities.convertPointFromScreen(pt, component);
 }

}


 </source>
   
  
 
  



SwingUtilities: convertPointToScreen(Point p, Component c)

   <source lang="java">
 

import java.awt.Point; import javax.swing.JButton; import javax.swing.SwingUtilities; public class Main {

 public static void main(String[] argv) {
   JButton component = new JButton();
   Point pt = new Point(component.getLocation());
   SwingUtilities.convertPointToScreen(pt, component);
 }

}


 </source>
   
  
 
  



SwingUtilities: getRoot(Component c)

   <source lang="java">
 

import java.awt.Color; import java.awt.ruponent; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.SwingUtilities; public class Main extends JFrame {

 public Main() {
   this.setSize(400, 100);
   this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   this.setLayout(new FlowLayout(FlowLayout.CENTER));
   JButton button = new JButton("Change Frame Color");
   button.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent e) {
       Component component = (Component) e.getSource();
       JFrame frame = (JFrame) SwingUtilities.getRoot(component);
       frame.setBackground(Color.RED);
     }
   });
   this.getContentPane().add(button);
 }
 public static void main(String[] args) {
   new Main().setVisible(true);
 }

}


 </source>
   
  
 
  



SwingUtilities: getWindowAncestor(Component c)

   <source lang="java">
 

import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; public class Main {

 public static void main(String[] a) {
   JPanel panel = new JPanel();
   JDialog dialog = new JDialog((JFrame) SwingUtilities.getWindowAncestor(panel), true);
 }

}


 </source>
   
  
 
  



SwingUtilities: invokeAndWait(Runnable run)

   <source lang="java">
 

import java.awt.ruponent; import java.awt.Graphics; import javax.swing.Icon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingUtilities; public class MainClass extends JPanel {

 public MainClass() {
   try {
     SwingUtilities.invokeAndWait(new Runnable() {
       public void run() {
         JLabel jl = new JLabel(new MyIcon(), JLabel.CENTER);
         add(jl);
       }
     });
   } catch (Exception exc) {
     System.out.println("Can"t create because of " + exc);
   }
 }
 public static void main(String[] args) {
   JFrame frame = new JFrame();
   frame.getContentPane().add(new MainClass());
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   frame.setSize(200, 200);
   frame.setVisible(true);
 }

}


 </source>
   
  
 
  



SwingUtilities.invokeLater(Runnable doRun)

   <source lang="java">
 

import java.awt.BorderLayout; import java.awt.Container; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingUtilities; public class InvokeExample {

 private static JButton good = new JButton("Good");
 private static JButton bad = new JButton("Bad");
 private static JButton bad2 = new JButton("Bad2");
 private static JLabel resultLabel = new JLabel("Ready", JLabel.CENTER);
 public static void main(String[] args) {
   JFrame f = new JFrame();
   f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   JPanel p = new JPanel();
   p.add(good);
   p.add(bad);
   p.add(bad2);
   Container c = f.getContentPane();
   c.setLayout(new BorderLayout());
   c.add(p, BorderLayout.CENTER);
   c.add(resultLabel, BorderLayout.SOUTH);
   good.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent ev) {
       resultLabel.setText("Working . . .");
       setEnabled(false);
       Thread worker = new Thread() {
         public void run() {
           try {
             Thread.sleep(5000);
           } catch (InterruptedException ex) {
           }
           SwingUtilities.invokeLater(new Runnable() {
             public void run() {
               resultLabel.setText("Ready");
               setEnabled(true);
             }
           });
         }
       };
       worker.start();
     }
   });
   bad.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent ev) {
       resultLabel.setText("Working . . .");
       setEnabled(false);
       try {
         Thread.sleep(5000);
       } catch (InterruptedException ex) {
       }
       resultLabel.setText("Ready");
       setEnabled(true);
     }
   });
   bad2.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent ev) {
       resultLabel.setText("Working . . . ");
       setEnabled(false);
       SwingUtilities.invokeLater(new Runnable() {
         public void run() {
           try {
             Thread.sleep(5000); // Dispatch thread is starving!
           } catch (InterruptedException ex) {
           }
           resultLabel.setText("Ready");
           setEnabled(true);
         }
       });
     }
   });
   f.setSize(300, 100);
   f.setVisible(true);
 }
 // Allows us to turn the buttons on or off while we work.
 static void setEnabled(boolean b) {
   good.setEnabled(b);
   bad.setEnabled(b);
   bad2.setEnabled(b);
 }

}


 </source>
   
  
 
  



SwingUtilities.isEventDispatchThread()

   <source lang="java">
 

/*

* Copyright (c) 2007, Romain Guy
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
*   * Redistributions of source code must retain the above copyright
*     notice, this list of conditions and the following disclaimer.
*   * Redistributions in binary form must reproduce the above
*     copyright notice, this list of conditions and the following
*     disclaimer in the documentation and/or other materials provided
*     with the distribution.
*   * Neither the name of the TimingFramework project nor the names of its
*     contributors may be used to endorse or promote products derived
*     from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

import java.awt.*; import javax.swing.*;

/**

* @author Romain Guy
*/

public class SafeRepaint extends JFrame {

   private SafeComponent safeComponent;
   public SafeRepaint() {
       super("Safe Repaint");
       safeComponent = new SafeComponent();
       add(safeComponent);
       pack();
       setLocationRelativeTo(null);
       setDefaultCloseOperation(EXIT_ON_CLOSE);
       new Thread(new Runnable() {
           public void run() {
               while (true) {
                   safeComponent.repaint();
                   try {
                       Thread.sleep(1000);
                   } catch (InterruptedException e) {
                   }
               }
           }
       }).start();
   }
   public static void main(String[] args) {
       SwingUtilities.invokeLater(new Runnable() {
           public void run() {
               SafeRepaint repaint = new SafeRepaint();
               repaint.setVisible(true);
           }
       });
   }

} /*

* Copyright (c) 2007, Romain Guy
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
*   * Redistributions of source code must retain the above copyright
*     notice, this list of conditions and the following disclaimer.
*   * Redistributions in binary form must reproduce the above
*     copyright notice, this list of conditions and the following
*     disclaimer in the documentation and/or other materials provided
*     with the distribution.
*   * Neither the name of the TimingFramework project nor the names of its
*     contributors may be used to endorse or promote products derived
*     from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

/**

* @author Romain Guy
*/

class SafeComponent extends JLabel {

   public SafeComponent() {
       super("Safe Repaint");
   }
   public void paintComponent(Graphics g) {
       super.paintComponent(g);
       System.out.println(SwingUtilities.isEventDispatchThread());
   }

}


 </source>
   
  
 
  



SwingUtilities.isLeftMouseButton(MouseEvent mouseEvent)

   <source lang="java">
 

import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.SwingUtilities; public class MainClass {

 public static void main(String args[]) {
   JFrame frame = new JFrame("Button Sample");
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   JButton button = new JButton("Select Me");
   ActionListener actionListener = new ActionListener() {
     public void actionPerformed(ActionEvent actionEvent) {
       System.out.println("I was selected.");
     }
   };
   MouseListener mouseListener = new MouseAdapter() {
     public void mousePressed(MouseEvent mouseEvent) {
       int modifiers = mouseEvent.getModifiers();
       if ((modifiers & InputEvent.BUTTON1_MASK) == InputEvent.BUTTON1_MASK) {
         System.out.println("Left button pressed.");
       }
       if ((modifiers & InputEvent.BUTTON2_MASK) == InputEvent.BUTTON2_MASK) {
         System.out.println("Middle button pressed.");
       }
       if ((modifiers & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK) {
         System.out.println("Right button pressed.");
       }
     }
     public void mouseReleased(MouseEvent mouseEvent) {
       if (SwingUtilities.isLeftMouseButton(mouseEvent)) {
         System.out.println("Left button released.");
       }
       if (SwingUtilities.isMiddleMouseButton(mouseEvent)) {
         System.out.println("Middle button released.");
       }
       if (SwingUtilities.isRightMouseButton(mouseEvent)) {
         System.out.println("Right button released.");
       }
       System.out.println();
     }
   };
   button.addActionListener(actionListener);
   button.addMouseListener(mouseListener);
   frame.add(button, BorderLayout.SOUTH);
   frame.setSize(300, 100);
   frame.setVisible(true);
 }

}


 </source>
   
  
 
  



SwingUtilities.isMiddleMouseButton(MouseEvent mouseEvent)

   <source lang="java">
 

import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.SwingUtilities; public class MainClass {

 public static void main(String args[]) {
   JFrame frame = new JFrame("Button Sample");
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   JButton button = new JButton("Select Me");
   ActionListener actionListener = new ActionListener() {
     public void actionPerformed(ActionEvent actionEvent) {
       System.out.println("I was selected.");
     }
   };
   MouseListener mouseListener = new MouseAdapter() {
     public void mousePressed(MouseEvent mouseEvent) {
       int modifiers = mouseEvent.getModifiers();
       if ((modifiers & InputEvent.BUTTON1_MASK) == InputEvent.BUTTON1_MASK) {
         System.out.println("Left button pressed.");
       }
       if ((modifiers & InputEvent.BUTTON2_MASK) == InputEvent.BUTTON2_MASK) {
         System.out.println("Middle button pressed.");
       }
       if ((modifiers & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK) {
         System.out.println("Right button pressed.");
       }
     }
     public void mouseReleased(MouseEvent mouseEvent) {
       if (SwingUtilities.isLeftMouseButton(mouseEvent)) {
         System.out.println("Left button released.");
       }
       if (SwingUtilities.isMiddleMouseButton(mouseEvent)) {
         System.out.println("Middle button released.");
       }
       if (SwingUtilities.isRightMouseButton(mouseEvent)) {
         System.out.println("Right button released.");
       }
       System.out.println();
     }
   };
   button.addActionListener(actionListener);
   button.addMouseListener(mouseListener);
   frame.add(button, BorderLayout.SOUTH);
   frame.setSize(300, 100);
   frame.setVisible(true);
 }

}



 </source>
   
  
 
  



SwingUtilities.isRightMouseButton(MouseEvent mouseEvent)

   <source lang="java">
 

import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.SwingUtilities; public class MainClass {

 public static void main(String args[]) {
   JFrame frame = new JFrame("Button Sample");
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   JButton button = new JButton("Select Me");
   ActionListener actionListener = new ActionListener() {
     public void actionPerformed(ActionEvent actionEvent) {
       System.out.println("I was selected.");
     }
   };
   MouseListener mouseListener = new MouseAdapter() {
     public void mousePressed(MouseEvent mouseEvent) {
       int modifiers = mouseEvent.getModifiers();
       if ((modifiers & InputEvent.BUTTON1_MASK) == InputEvent.BUTTON1_MASK) {
         System.out.println("Left button pressed.");
       }
       if ((modifiers & InputEvent.BUTTON2_MASK) == InputEvent.BUTTON2_MASK) {
         System.out.println("Middle button pressed.");
       }
       if ((modifiers & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK) {
         System.out.println("Right button pressed.");
       }
     }
     public void mouseReleased(MouseEvent mouseEvent) {
       if (SwingUtilities.isLeftMouseButton(mouseEvent)) {
         System.out.println("Left button released.");
       }
       if (SwingUtilities.isMiddleMouseButton(mouseEvent)) {
         System.out.println("Middle button released.");
       }
       if (SwingUtilities.isRightMouseButton(mouseEvent)) {
         System.out.println("Right button released.");
       }
       System.out.println();
     }
   };
   button.addActionListener(actionListener);
   button.addMouseListener(mouseListener);
   frame.add(button, BorderLayout.SOUTH);
   frame.setSize(300, 100);
   frame.setVisible(true);
 }

}


 </source>
   
  
 
  



SwingUtilities: updateComponentTreeUI(Component c)

   <source lang="java">
 

import java.awt.Container; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ButtonGroup; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JRadioButton; import javax.swing.SwingUtilities; import javax.swing.UIManager; public class MainClass {

 protected JFrame theFrame = new JFrame("LNF Switcher");
 protected Container cp;
 protected String curLF = "javax.swing.plaf.metal.MetalLookAndFeel";
 protected JRadioButton previousButton;
 public MainClass() {
   theFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   cp = theFrame.getContentPane();
   cp.setLayout(new FlowLayout());
   ButtonGroup bg = new ButtonGroup();
   JRadioButton bJava = new JRadioButton("Java");
   bJava.addActionListener(new LNFSetter("javax.swing.plaf.metal.MetalLookAndFeel", bJava));
   bg.add(bJava);
   cp.add(bJava);
   JRadioButton bMSW = new JRadioButton("MS-Windows");
   bMSW.addActionListener(new LNFSetter("com.sun.java.swing.plaf.windows.WindowsLookAndFeel", bMSW));
   bg.add(bMSW);
   cp.add(bMSW);
   JRadioButton bMotif = new JRadioButton("Motif");
   bMotif.addActionListener(new LNFSetter("com.sun.java.swing.plaf.motif.MotifLookAndFeel", bMotif));
   bg.add(bMotif);
   cp.add(bMotif);
   JRadioButton bMac = new JRadioButton("Sun-MacOS");
   bMac.addActionListener(new LNFSetter("com.sun.java.swing.plaf.mac.MacLookAndFeel", bMac));
   bg.add(bMac);
   cp.add(bMac);
   String defaultLookAndFeel = UIManager.getSystemLookAndFeelClassName();
   JRadioButton bDefault = new JRadioButton("Default");
   bDefault.addActionListener(new LNFSetter(defaultLookAndFeel, bDefault));
   bg.add(bDefault);
   cp.add(bDefault);
   (previousButton = bDefault).setSelected(true);
   theFrame.pack();
   theFrame.setVisible(true);
 }
 class LNFSetter implements ActionListener {
   String theLNFName;
   JRadioButton thisButton;
   LNFSetter(String lnfName, JRadioButton me) {
     theLNFName = lnfName;
     thisButton = me;
   }
   public void actionPerformed(ActionEvent e) {
     try {
       UIManager.setLookAndFeel(theLNFName);
       SwingUtilities.updateComponentTreeUI(theFrame);
       theFrame.pack();
     } catch (Exception evt) {
       JOptionPane.showMessageDialog(null, "setLookAndFeel didn"t work: " + evt, "UI Failure",
           JOptionPane.INFORMATION_MESSAGE);
       previousButton.setSelected(true); // reset the GUI to agree
     }
     previousButton = thisButton;
   }
 }
 public static void main(String[] argv) {
   new MainClass();
 }

}


 </source>