⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pspinner.java

📁 更方便的SWING
💻 JAVA
字号:
/*
 * PSwing Utilities -- Nifty Swing Widgets
 * Copyright (C) 2002  Pallas Technology
 * 
 * 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
 * 
 * Pallas Technology
 * 1170 HOWELL MILL RD NW
 * SUITE 306
 * ATLANTA GEORGIA 30318
 * 
 * PHONE 404.983.0623
 * EMAIL info@pallastechnology.com
 * 
 * www.pallastechnology.com
 **************************************************************************
 * $Archive: SwingTools$
 * $FileName: PSpinner.java$
 * $FileID: 20$
 *
 * Last change:
 * $AuthorName: Rob MacGrogan$
 * $Date: 2/5/03 3:21 PM$
 * $VerID: 61$
 * $Comment: Like JSpinner, except that there is no editor and
 *          buttons are right and left instead of up/down.$
 **************************************************************************/
package com.pallas.swing.spinner;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Vector;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SpinnerModel;
import javax.swing.SpinnerNumberModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import com.sun.org.omg.SendingContext.CodeBasePackage.ValueDescSeqHelper;


/**
 * Title:   $FileName: PSpinner.java$
 * @version $VerNum: 1$
 * @author $AuthorName: Rob MacGrogan$<br><br>
 * 
 * $Description: Like JSpinner, except that there is no editor
 *              and buttons are right and left instead of up/down.$<br>
 * $KeyWordsOff: $<br><br>
 */
public class PSpinner extends JPanel {

  private SpinnerModel model = null;
  private PSpinnerFormat format = null;
  private JLabel valueDisplay = null;
  private JButton left = null;
  private JButton right = null;

  private Vector changeLisnteners = new Vector();

  private static final Dimension BUTTON_DIMS = new Dimension(16, 16);

  public PSpinner(){
    model = new SpinnerNumberModel();
    format = new DefaultFormat();
    initializeComponent();
  }
  
  public PSpinner(SpinnerModel model){
    this.model = model;
    format = new DefaultFormat();
    initializeComponent();
  }
  
  public PSpinner(SpinnerModel model, PSpinnerFormat format){
    this.model = model;
    this.format = format;
    initializeComponent();
  }

  private void initializeComponent(){

    valueDisplay = new JLabel();
    left = buildLeftButton();
    right = buildRightButton();

    setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
    add(left);
    add(Box.createHorizontalStrut(4));
    add(valueDisplay);
    add(Box.createHorizontalStrut(4));
    add(right);
    //setButtonDims();
  }

  public void setDisplayAreaPreferredSize(Dimension dim){
    valueDisplay.setPreferredSize(dim);
    //setButtonDims();
  }
  
  public void setDisplayAreaMinimumSize(Dimension dim){
    valueDisplay.setMinimumSize(dim);
  }
  
  public void setDisplayAreaMaximumSize(Dimension dim){
    valueDisplay.setMaximumSize(dim);
  }

  public void addChangeListener(ChangeListener listener){
    changeLisnteners.add(listener);
  }

  protected void displayCurrentValue(){
    Object o = model.getValue();
    String s = format.formatValue(o);
    valueDisplay.setText(s);
  }
  
  protected void fireStateChanged(){
    Iterator itr = changeLisnteners.iterator();
    ChangeEvent ev = new ChangeEvent(this);
    while(itr.hasNext()){
      ChangeListener listener = (ChangeListener)itr.next();
      listener.stateChanged(ev);
    }
  }
  
  public ChangeListener[] getChangeListeners(){
    ChangeListener[] listeners = new ChangeListener[changeLisnteners.size()];
    changeLisnteners.toArray(listeners);
    return listeners;
  }
  
  public PSpinnerFormat getFormat(){
    return this.format;
  }
  
  public SpinnerModel getModel(){
    return this.model;
  }
  
  public Object getNextValue(){
    return model.getNextValue();
  }
  
  public Object getPreviousValue(){
    return model.getPreviousValue();
  }
  
  public Object getValue(){
    return model.getValue();
  }
  
  public void removeChangeListener(ChangeListener listener){
    changeLisnteners.remove(listener);
  }

  public void setFormat(PSpinnerFormat format){
    this.format = format;
  }
  
  public void setModel(SpinnerModel model){
    this.model = model;
  }
  
  public void setValue(Object o){
    model.setValue(o);
    displayCurrentValue();
    fireStateChanged();
  }
  
  void next(){
    model.setValue(model.getNextValue());
    displayCurrentValue();
    fireStateChanged();
  }
  
  void previous(){
    model.setValue(model.getPreviousValue());
    displayCurrentValue();
    fireStateChanged();
  }

  private void setButtonDims(){
    int h = valueDisplay.getSize().height;
    Dimension dims = new Dimension(h, h);
    left.setSize(dims);
    right.setSize(dims);
  }
    
  private JButton buildLeftButton(){
    ButtonSpinAction action = new ButtonSpinAction(this);
    action.setPreviousButton();
    JButton btn = new JButton(action);
    btn.setPreferredSize(BUTTON_DIMS);
    return btn;
  }

  private JButton buildRightButton(){
    ButtonSpinAction action = new ButtonSpinAction(this);
    action.setNextButton();
    JButton btn = new JButton(action);
    btn.setPreferredSize(BUTTON_DIMS);
    return btn;
  }

  public void paint(Graphics g){
    //setButtonDims();
    super.paint(g);
  }

  public static void main(String[] args){
    try{
      JFrame frame = new JFrame();
      
      JPanel panel = new JPanel();
      PSpinner spinner = new PSpinner();
      spinner.setValue(new Integer(2002));
      panel.add(spinner);

      frame.getContentPane().add(panel);
      
      frame.addWindowListener
          (new
            WindowAdapter() {
              public void windowClosing(WindowEvent e){
                System.exit(0);
              }
            }//end anon class
      );
  
  
      Dimension sd = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
      int width = 350;
      int height = 150;
      int x = (sd.width - width) / 2;
      int y = (sd.height - height) /2;
  
      frame.setBounds(x, y, width, height);
      //setLookAndFeel();
  
      frame.setVisible(true);
    }
    catch (Throwable thr){
      thr.printStackTrace();
    }
  }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -