jnumbercombobox.java
来自「优秀的打印控件全源代码,类似水晶表的设计器!」· Java 代码 · 共 296 行
JAVA
296 行
/* * JNumberComboBox.java * * iReport -- Visual designer for generating JasperReports Documents * Copyright (C) 2002-2003 Giulio Toffoli gt@businesslogic.it * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * Giulio Toffoli * Via T.Aspetti, 233 * 35100 Padova ITALY * gt@businesslogic.it * * Created on 15 febbraio 2003, 10.31 */package it.businesslogic.ireport.gui;import it.businesslogic.ireport.gui.event.*;import javax.swing.*;import java.awt.event.*;import java.util.*;import java.text.*;/** * This class is designed for the zoom combo box. * It stores a vector of predefined values (see the inner class NumberEntry), * added from the program using addEntry(String name, double value) method. * The user can insert manually a value. It is interpreted using NumberFormat. * (max fraction digits used: 2) * The value is valuated on focus lost.... * * @author Giulio Toffoli */public class JNumberComboBox extends JComboBox implements KeyListener, ActionListener, FocusListener { private NumberFormat numberFormat = null; private Vector entries; private double value; private double minValue; private double maxValue; /** Utility field used by event firing mechanism. */ private javax.swing.event.EventListenerList listenerList = null; private String postfix=""; /** Creates a new instance of JNumberComboBox */ public JNumberComboBox() { super(); entries = new Vector(); this.setFocusCycleRoot(false); numberFormat = NumberFormat.getNumberInstance(); numberFormat.setMinimumFractionDigits(0); numberFormat.setMaximumFractionDigits(2); this.setEditable(true); // this code solve sun Metal Bug Id 4137675 // Attention, this.setEditable(true); must be call before!!! for (int i=0; i<this.getComponentCount(); i++) { //System.out.println("Register to: "+ this.getComponent(i).getClass()); this.getComponent(i).addFocusListener(this); } this.addFocusListener(this); this.addKeyListener(this); this.addActionListener(this); } public void addEntry(String name, double value) { // If this entry name already exists, we change the value... Enumeration e = entries.elements(); while (e.hasMoreElements()) { NumberEntry ne = (NumberEntry)e.nextElement(); if (ne.name.equals(name)) { ne.value = value; return; } } NumberEntry entry = new NumberEntry(name,value); this.addItem(entry); this.entries.addElement(entry); } public void actionPerformed(ActionEvent e) { super.actionPerformed(e); int selectedIndex = this.getSelectedIndex(); if (selectedIndex > -1) { if (((NumberEntry)getSelectedItem()).value != value) { double oldValue = this.value; this.value = ((NumberEntry)getSelectedItem()).value; fireValueChangedListenerValueChanged(new ValueChangedEvent((JComponent)this, oldValue, this.value)); } this.setSelectedItem( numberFormat.format( value ) +getPostfix()); } } /** Invoked when a key has been pressed. * See the class description for {@link KeyEvent} for a definition of * a key pressed event. * */ public void keyPressed(KeyEvent e) { if (e.getKeyCode() == e.VK_ENTER) { } } /** Invoked when a key has been released. * See the class description for {@link KeyEvent} for a definition of * a key released event. * */ public void keyReleased(KeyEvent e) { } /** Invoked when a key has been typed. * See the class description for {@link KeyEvent} for a definition of * a key typed event. * */ public void keyTyped(KeyEvent e) { } /** Invoked when a component gains the keyboard focus. * */ public void focusGained(FocusEvent e) { } /** Invoked when a component loses the keyboard focus. * */ public void focusLost(FocusEvent e) { try { Number num = numberFormat.parse( ""+ this.getSelectedItem()); if (num.doubleValue() != value) { double oldValue = this.value; this.value = num.doubleValue(); fireValueChangedListenerValueChanged(new ValueChangedEvent(this, oldValue, this.value)); } } catch (Exception ex) { System.out.println(ex.getMessage()); fireValueChangedListenerValueChanged(new ValueChangedEvent(this, this.value, this.value)); } this.setSelectedItem( numberFormat.format( value )+getPostfix() ); } /** Getter for property minValue. * @return Value of property minValue. * */ public double getMinValue() { return minValue; } /** Setter for property minValue. * @param minValue New value of property minValue. * */ public void setMinValue(double minValue) { this.minValue = minValue; } /** Getter for property maxValue. * @return Value of property maxValue. * */ public double getMaxValue() { return maxValue; } /** Setter for property maxValue. * @param maxValue New value of property maxValue. * */ public void setMaxValue(double maxValue) { this.maxValue = maxValue; } /** Getter for property value. * @return Value of property value. * */ public double getValue() { return value; } /** Setter for property value. * @param value New value of property value. * */ public void setValue(double value) { if (this.value != value) { double oldValue = this.value; this.value = value; fireValueChangedListenerValueChanged(new ValueChangedEvent(this, oldValue, this.value)); } this.setSelectedItem( numberFormat.format( this.value )+getPostfix() ); } /** Registers ValueChangedListener to receive events. * @param listener The listener to register. * */ public synchronized void addValueChangedListener(it.businesslogic.ireport.gui.event.ValueChangedListener listener) { if (listenerList == null ) { listenerList = new javax.swing.event.EventListenerList(); } listenerList.add(it.businesslogic.ireport.gui.event.ValueChangedListener.class, listener); } /** Removes ValueChangedListener from the list of listeners. * @param listener The listener to remove. * */ public synchronized void removeValueChangedListener(it.businesslogic.ireport.gui.event.ValueChangedListener listener) { listenerList.remove(it.businesslogic.ireport.gui.event.ValueChangedListener.class, listener); } /** Notifies all registered listeners about the event. * * @param event The event to be fired * */ private void fireValueChangedListenerValueChanged(it.businesslogic.ireport.gui.event.ValueChangedEvent event) { if (listenerList == null) return; Object[] listeners = listenerList.getListenerList(); for (int i = listeners.length-2; i>=0; i-=2) { if (listeners[i]==it.businesslogic.ireport.gui.event.ValueChangedListener.class) { ((it.businesslogic.ireport.gui.event.ValueChangedListener)listeners[i+1]).valueChanged(event); } } } /** Getter for property postfix. * @return Value of property postfix. * */ public java.lang.String getPostfix() { return postfix; } /** Setter for property postfix. * @param postfix New value of property postfix. * */ public void setPostfix(java.lang.String postfix) { this.postfix = postfix; } }class NumberEntry { public String name=""; public double value=0.0; public String toString() { return name; } public NumberEntry( String name, double value) { this.name = name; this.value = value; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?