📄 arrowbutton.java
字号:
/* * NachoCalendar * * Project Info: http://nachocalendar.sf.net * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by the * Free Software Foundation; * either version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A * PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * * [Java is a trademark or registered trademark of Sun Microsystems, Inc. * in the United States and other countries.] * * Changes * ------- * * ArrowButton.java * * Created on August 13, 2004, 11:44 AM */package net.sf.nachocalendar.components;import java.awt.Color;import java.awt.Dimension;import java.awt.Graphics;import javax.swing.JButton;/** JButton showing an arrow. * @author Ignacio Merani */public class ArrowButton extends JButton { /** Default size. */ private int defaultsize = 16; /** Direction for the arrow. */ private int direction; /** Creates a new instance of ArrowButton. * @param direction direction of the arrow */ public ArrowButton(int direction) { super(); this.direction = direction; } /** * Invoked by Swing to draw components. * Applications should not invoke <code>paint</code> directly, * but should instead use the <code>repaint</code> method to * schedule the component for redrawing. * <p> * This method actually delegates the work of painting to three * protected methods: <code>paintComponent</code>, * <code>paintBorder</code>, * and <code>paintChildren</code>. They're called in the order * listed to ensure that children appear on top of component itself. * Generally speaking, the component and its children should not * paint in the insets area allocated to the border. Subclasses can * just override this method, as always. A subclass that just * wants to specialize the UI (look and feel) delegate's * <code>paint</code> method should just override * <code>paintComponent</code>. * * @param g the <code>Graphics</code> context in which to paint */ public void paint(Graphics g) { super.paint(g); int mid, i, j, x, y; int w, h, size; w = getSize().width; h = getSize().height; size = Math.min((h - 4) / 3, (w - 4) / 3); size = Math.max(size, 2); x = (w - size) / 2; y = (h - size) / 2; j = 0; size = Math.max(size, 2); mid = (size / 2) - 1; g.translate(x, y); if (isEnabled()) { g.setColor(getForeground()); } else g.setColor(Color.gray); switch (direction) { case NORTH: for (i = 0; i < size; i++) { g.drawLine(mid - i, i, mid + i, i); } break; case SOUTH: j = 0; for (i = size - 1; i >= 0; i--) { g.drawLine(mid - i, j, mid + i, j); j++; } break; case WEST: for (i = 0; i < size; i++) { g.drawLine(i, mid - i, i, mid + i); } break; case EAST: j = 0; for (i = size - 1; i >= 0; i--) { g.drawLine(j, mid - i, j, mid + i); j++; } break; default: } } /** * If the <code>preferredSize</code> has been set to a * non-<code>null</code> value just returns it. * If the UI delegate's <code>getPreferredSize</code> * method returns a non <code>null</code> value then return that; * otherwise defer to the component's layout manager. * * @return the value of the <code>preferredSize</code> property */ public Dimension getPreferredSize() { return new Dimension(defaultsize, defaultsize); } /** * Getter for property direction. * @return Value of property direction. */ public int getDirection() { return this.direction; } /** * Setter for property direction. * @param direction New value of property direction. */ public void setDirection(int direction) { this.direction = direction; } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -