Java Tutorial/Swing/AbstractBorder

Материал из Java эксперт
Перейти к: навигация, поиск

Bottom Border

   <source lang="java">

import java.awt.Color; import java.awt.ruponent; import java.awt.Graphics; import java.awt.Insets; import javax.swing.border.AbstractBorder; public class BottomBorder extends AbstractBorder {

 protected int thickness;
 protected Color lineColor;
 protected int gap;
 public BottomBorder(Color color) {
   this(color, 1, 1);
 }
 public BottomBorder(Color color, int thickness) {
   this(color, thickness, thickness);
 }
 public BottomBorder(Color color, int thickness, int gap) {
   lineColor = color;
   this.thickness = thickness;
   this.gap = gap;
 }
 public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
   Color oldColor = g.getColor();
   int i;
   g.setColor(lineColor);
   for (i = 0; i < thickness; i++) {
     g.drawLine(x, y + height - i - 1, x + width, y + height - i - 1);
   }
   g.setColor(oldColor);
 }
 public Insets getBorderInsets(Component c) {
   return new Insets(0, 0, gap, 0);
 }
 public Insets getBorderInsets(Component c, Insets insets) {
   insets.left = 0;
   insets.top = 0;
   insets.right = 0;
   insets.bottom = gap;
   return insets;
 }
 /**
  * Returns the color of the border.
  */
 public Color getLineColor() {
   return lineColor;
 }
 /**
  * Returns the thickness of the border.
  */
 public int getThickness() {
   return thickness;
 }
 /**
  * Returns whether or not the border is opaque.
  */
 public boolean isBorderOpaque() {
   return false;
 }
 public int getGap() {
   return gap;
 }

}</source>





Rectangle border

   <source lang="java">

import java.awt.Color; import java.awt.ruponent; import java.awt.Graphics; import java.awt.Insets; import javax.swing.border.AbstractBorder; public class RectangleBorder extends AbstractBorder {

 protected Insets thickness;
 protected Color lineColor;
 protected Insets gap;
 public RectangleBorder(Color color) {
   this(color, new Insets(1, 1, 1, 1));
 }
 public RectangleBorder(Color color, Insets thickness) {
   this(color, thickness, thickness);
 }
 public RectangleBorder(Color color, Insets thickness, Insets gap) {
   lineColor = color;
   this.thickness = thickness;
   this.gap = gap;
 }
 public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
   Color oldColor = g.getColor();

   g.setColor(lineColor);
   // top
   for (int i = 0; i < thickness.top; i++) {
     g.drawLine(x, y + i, x + width, y + i);
   }
   // bottom
   for (int i = 0; i < thickness.bottom; i++) {
     g.drawLine(x, y + height - i - 1, x + width, y + height - i - 1);
   }
   // right
   for (int i = 0; i < thickness.right; i++) {
     g.drawLine(x + width - i - 1, y, x + width - i - 1, y + height);
   }
   // left
   for (int i = 0; i < thickness.left; i++) {
     g.drawLine(x + i, y, x + i, y + height);
   }
   g.setColor(oldColor);
 }
 /**
  * Returns the insets of the border.
  * 
  * @param c
  *          the component for which this border insets value applies
  */
 public Insets getBorderInsets(Component c) {
   return gap;
 }
 public Insets getBorderInsets(Component c, Insets insets) {
   insets.left = gap.left;
   insets.top = gap.top;
   insets.right = gap.right;
   insets.bottom = gap.bottom;
   return insets;
 }
 /**
  * Returns the color of the border.
  */
 public Color getLineColor() {
   return lineColor;
 }
 /**
  * Returns the thickness of the border.
  */
 public Insets getThickness() {
   return thickness;
 }
 /**
  * Returns whether or not the border is opaque.
  */
 public boolean isBorderOpaque() {
   return false;
 }
 public Insets getGap() {
   return gap;
 }

}</source>





Right border

   <source lang="java">

//com.amkai.borders; import java.awt.Graphics; import java.awt.Insets; import java.awt.Color; import java.awt.ruponent; import javax.swing.border.AbstractBorder; public class RightSideBorder extends AbstractBorder {

   protected int thickness;
   protected Color lineColor;
   protected int gap;
   public RightSideBorder(Color color) {
       this(color, 1, 1);
   }
   public RightSideBorder(Color color, int thickness)  {
       this(color, thickness, thickness);
   }
   public RightSideBorder(Color color, int thickness, int gap)  {
       lineColor = color;
       this.thickness = thickness;
       this.gap = gap;
   }
   public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
       Color oldColor = g.getColor();
       int i;
       g.setColor(lineColor);
       for(i = 0; i < thickness; i++)  {
         g.drawLine(x+width-i-1, y, x+width-i-1, y+height);
       }
       g.setColor(oldColor);
   }
   /**
    * Returns the insets of the border.
    * @param c the component for which this border insets value applies
    */
   public Insets getBorderInsets(Component c)       {
       return new Insets(0, 0, 0,gap);
   }
   public Insets getBorderInsets(Component c, Insets insets) {
       insets.left = 0;
       insets.top = 0;
       insets.right = gap;
       insets.bottom = 0;
       return insets;
   }
   /**
    * Returns the color of the border.
    */
   public Color getLineColor()     {
       return lineColor;
   }
   /**
    * Returns the thickness of the border.
    */
   public int getThickness()       {
       return thickness;
   }
   /**
    * Returns whether or not the border is opaque.
    */
   public boolean isBorderOpaque() { 
       return false; 
   }
 public int getGap() {
   return gap;
 }

}</source>





Shadow Popup Border

   <source lang="java">

/*

* Copyright (c) 2001-2009 JGoodies Karsten Lentzsch. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
*  o Redistributions of source code must retain the above copyright notice,
*    this list of conditions and the following disclaimer.
*
*  o 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.
*
*  o Neither the name of JGoodies Karsten Lentzsch 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.ruponent; import java.awt.Graphics; import java.awt.Image; import java.awt.Insets; import javax.swing.ImageIcon; import javax.swing.JComponent; import javax.swing.border.AbstractBorder; /**

* A border with a drop shadow intended to be used as the outer border
* of popups. Can paint the screen background if used with heavy-weight
* popup windows.
*
* @author Karsten Lentzsch
* @author Andrej Golovnin
* @version $Revision: 1.6 $
*
* @see ShadowPopup
* @see ShadowPopupFactory
*/

final class ShadowPopupBorder extends AbstractBorder {

   /**
    * The drop shadow needs 5 pixels at the bottom and the right hand side.
    */
   private static final int SHADOW_SIZE = 5;
 /**
  * The singleton instance used to draw all borders.
  */
 private static ShadowPopupBorder instance = new ShadowPopupBorder();
 /**
  * The drop shadow is created from a PNG image with 8 bit alpha channel.
  */
 private static Image shadow
   = new ImageIcon(ShadowPopupBorder.class.getResource("shadow.png")).getImage();
   // Instance Creation *****************************************************
 /**
  * Returns the singleton instance used to draw all borders.
  */
 public static ShadowPopupBorder getInstance() {
   return instance;
 }
 /**
  * Paints the border for the specified component with the specified
    * position and size.
  */
 public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
   // draw drop shadow
   g.drawImage(shadow, x +  5, y + height - 5, x + 10, y + height, 0, 6, 5, 11, null, c);
   g.drawImage(shadow, x + 10, y + height - 5, x + width - 5, y + height, 5, 6, 6, 11, null, c);
   g.drawImage(shadow, x + width - 5, y + 5, x + width, y + 10, 6, 0, 11, 5, null, c);
   g.drawImage(shadow, x + width - 5, y + 10, x + width, y + height - 5, 6, 5, 11, 6, null, c);
   g.drawImage(shadow, x + width - 5, y + height - 5, x + width, y + height, 6, 6, 11, 11, null, c);
 }
 /**
  * Returns the insets of the border.
  */
 public Insets getBorderInsets(Component c) {
   return new Insets(0, 0, SHADOW_SIZE, SHADOW_SIZE);
 }
   /**
    * Reinitializes the insets parameter with this Border"s current Insets.
    * @param c the component for which this border insets value applies
    * @param insets the object to be reinitialized
    * @return the insets object
    */
   public Insets getBorderInsets(Component c, Insets insets) {
       insets.left = insets.top = 0;
       insets.right = insets.bottom = SHADOW_SIZE;
       return insets;
   }

}</source>





Swing Abstract Border

   <source lang="java">

import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.ButtonGroup; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JRadioButtonMenuItem; import javax.swing.border.AbstractBorder; import javax.swing.border.BevelBorder; import javax.swing.border.rupoundBorder; import javax.swing.border.EmptyBorder; import javax.swing.border.EtchedBorder; import javax.swing.border.LineBorder; import javax.swing.border.MatteBorder; import javax.swing.border.SoftBevelBorder; import javax.swing.border.TitledBorder; public class SwingBorder extends JFrame {

 Container frameContainer;
 JPanel panel = new JPanel();
 JMenuBar menuBar = new JMenuBar();
 JMenu fileMenu = new JMenu("File");
 JMenuItem fileExit = new JMenuItem("Exit");
 JMenu borderMenu = new JMenu("Border");
 String[] borderTypes = { "Bevel", "Compound", "Empty", "Etched", "Line", "Matte", "SoftBevel",
     "Titled" };
 JRadioButtonMenuItem[] borders = new JRadioButtonMenuItem[borderTypes.length];
 AbstractBorder[] border = { new BevelBorder(BevelBorder.LOWERED),
     new CompoundBorder(new LineBorder(Color.blue, 10), new LineBorder(Color.red, 5)),
     new EmptyBorder(10, 10, 10, 10), new EtchedBorder(), new LineBorder(Color.blue, 10),
     new MatteBorder(new ImageIcon("phone.gif")), new SoftBevelBorder(BevelBorder.RAISED),
     new TitledBorder("TitledBorder") };
 ButtonGroup buttonGroup = new ButtonGroup();
 public SwingBorder() {
   super("");
   fileMenu.add(fileExit);
   for (int i = 0; i < borderTypes.length; ++i) {
     borders[i] = new JRadioButtonMenuItem(borderTypes[i]);
     buttonGroup.add(borders[i]);
     borderMenu.add(borders[i]);
   }
   menuBar.add(fileMenu);
   menuBar.add(borderMenu);
   setJMenuBar(menuBar);
   frameContainer = getContentPane();
   frameContainer.setLayout(new BorderLayout());
   frameContainer.add("Center", panel);
   setupEventHandlers();
   setSize(450, 450);
   setVisible(true);
 }
 void setupEventHandlers() {
   addWindowListener(new WindowHandler());
   fileExit.addActionListener(new MenuItemHandler());
   for (int i = 0; i < borders.length; ++i)
     borders[i].addItemListener(new ItemHandler());
 }
 public static void main(String[] args) {
   SwingBorder app = new SwingBorder();
 }
 public class WindowHandler extends WindowAdapter {
   public void windowClosing(WindowEvent e) {
     System.exit(0);
   }
 }
 public class MenuItemHandler implements ActionListener {
   public void actionPerformed(ActionEvent e) {
     String cmd = e.getActionCommand();
     if (cmd.equals("Exit"))
       System.exit(0);
   }
 }
 public class ItemHandler implements ItemListener {
   public void itemStateChanged(ItemEvent e) {
     JRadioButtonMenuItem button = (JRadioButtonMenuItem) e.getItem();
     String label = button.getText();
     for (int i = 0; i < borderTypes.length; ++i) {
       if (label.equals(borderTypes[i])) {
         panel.setBorder(border[i]);
         repaint();
       }
     }
   }
 }

}</source>