亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? xpspinnerui.java

?? Swing Windows XP 外觀和感覺 BeanSoft 修改版, 2003年 原始的作者: XP 外觀和感覺 by Stefan Krause - http://www.stefan
?? JAVA
字號:
package com.stefankrause.xplookandfeel;

import java.awt.AWTEvent;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FocusTraversalPolicy;
import java.awt.KeyboardFocusManager;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.text.AttributedCharacterIterator;
import java.text.CharacterIterator;
import java.text.DateFormat;
import java.text.Format;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Map;

import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFormattedTextField;
import javax.swing.JSpinner;
import javax.swing.SpinnerDateModel;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicSpinnerUI;
import javax.swing.text.InternationalFormatter;

public class XPSpinnerUI extends BasicSpinnerUI {
	/**
	 * The mouse/action listeners that are added to the spinner's 
	 * arrow buttons.  These listeners are shared by all 
	 * spinner arrow buttons.
	 * 
	 * @see #createNextButton
	 * @see #createPreviousButton
	 */
	private static final ArrowButtonHandler nextButtonHandler = new ArrowButtonHandler("increment", true);
	private static final ArrowButtonHandler previousButtonHandler = new ArrowButtonHandler("decrement", false);
	private static final Dimension zeroSize = new Dimension(0, 0);

	public static ComponentUI createUI(JComponent c) {
		return new XPSpinnerUI();
	}

	protected Component createPreviousButton() {
		JButton b = new SpecialUIButton(new XPSpinnerButtonUI(SwingConstants.SOUTH));
		b.addActionListener(previousButtonHandler);
		b.addMouseListener(previousButtonHandler);
		return b;
	}

	protected Component createNextButton() {
		JButton b = new SpecialUIButton(new XPSpinnerButtonUI(SwingConstants.NORTH));
		b.addActionListener(nextButtonHandler);
		b.addMouseListener(nextButtonHandler);
		return b;
	}

	/**
	 * @see javax.swing.plaf.basic.BasicSpinnerUI#createEditor()
	 */
	protected JComponent createEditor() {
		JComponent editor = super.createEditor();
		if (editor instanceof JSpinner.DefaultEditor) {
			JSpinner.DefaultEditor de = (JSpinner.DefaultEditor) editor;


            // This is pretty silly: But it's the only way I've found (so far) 
            // to find the real size of the editor
            de.getTextField().setBorder(new EmptyBorder(0, 0, 0, 0)); //half,0,diff-half,0));
            
			Dimension prefSize = de.getPreferredSize();
            int compHeight=prefSize.height;
            
			int height = XPSpinnerButtonUI.getSkin(SwingConstants.NORTH).getVsize() + XPSpinnerButtonUI.getSkin(SwingConstants.SOUTH).getVsize();
			int diff = height - compHeight;
            
			if (diff > 0) {
				int half = diff / 2;
				de.getTextField().setBorder(new EmptyBorder(half,0,diff-half,0));
			}             
		}
		return editor;
	}
    

	/**
	 * Copy and paste from BasicSpinnerUI - sigh !
	 * 
	 * 
	 * A handler for spinner arrow button mouse and action events.  When 
	 * a left mouse pressed event occurs we look up the (enabled) spinner 
	 * that's the source of the event and start the autorepeat timer.  The
	 * timer fires action events until any button is released at which 
	 * point the timer is stopped and the reference to the spinner cleared.
	 * The timer doesn't start until after a 300ms delay, so often the 
	 * source of the initial (and final) action event is just the button
	 * logic for mouse released - which means that we're relying on the fact
	 * that our mouse listener runs after the buttons mouse listener.
	 * <p>
	 * Note that one instance of this handler is shared by all slider previous 
	 * arrow buttons and likewise for all of the next buttons, 
	 * so it doesn't have any state that persists beyond the limits
	 * of a single button pressed/released gesture.
	 */
	private static class ArrowButtonHandler extends AbstractAction implements MouseListener {
		final javax.swing.Timer autoRepeatTimer;
		final boolean isNext;
		JSpinner spinner = null;

		ArrowButtonHandler(String name, boolean isNext) {
			super(name);
			this.isNext = isNext;
			autoRepeatTimer = new javax.swing.Timer(60, this);
			autoRepeatTimer.setInitialDelay(300);
		}

		private JSpinner eventToSpinner(AWTEvent e) {
			Object src = e.getSource();
			while ((src instanceof Component) && !(src instanceof JSpinner)) {
				src = ((Component) src).getParent();
			}
			return (src instanceof JSpinner) ? (JSpinner) src : null;
		}

		public void actionPerformed(ActionEvent e) {
			JSpinner spinner = this.spinner;

			if (!(e.getSource() instanceof javax.swing.Timer)) {
				// Most likely resulting from being in ActionMap.
				spinner = eventToSpinner(e);
			}
			if (spinner != null) {
				try {
					int calendarField = getCalendarField(spinner);
					spinner.commitEdit();
					if (calendarField != -1) {
						((SpinnerDateModel) spinner.getModel()).setCalendarField(calendarField);
					}
					Object value = (isNext) ? spinner.getNextValue() : spinner.getPreviousValue();
					if (value != null) {
						spinner.setValue(value);
						select(spinner);
					}
				} catch (IllegalArgumentException iae) {
					UIManager.getLookAndFeel().provideErrorFeedback(spinner);
				} catch (ParseException pe) {
					UIManager.getLookAndFeel().provideErrorFeedback(spinner);
				}
			}
		}

		/**
		 * If the spinner's editor is a DateEditor, this selects the field
		 * associated with the value that is being incremented.
		 */
		private void select(JSpinner spinner) {
			JComponent editor = spinner.getEditor();

			if (editor instanceof JSpinner.DateEditor) {
				JSpinner.DateEditor dateEditor = (JSpinner.DateEditor) editor;
				JFormattedTextField ftf = dateEditor.getTextField();
				Format format = dateEditor.getFormat();
				Object value;

				if (format != null && (value = spinner.getValue()) != null) {
					SpinnerDateModel model = dateEditor.getModel();
					DateFormat.Field field = DateFormat.Field.ofCalendarField(model.getCalendarField());

					if (field != null) {
						try {
							AttributedCharacterIterator iterator = format.formatToCharacterIterator(value);
							if (!select(ftf, iterator, field) && field == DateFormat.Field.HOUR0) {
								select(ftf, iterator, DateFormat.Field.HOUR1);
							}
						} catch (IllegalArgumentException iae) {
						}
					}
				}
			}
		}

		/**
		 * Selects the passed in field, returning true if it is found,
		 * false otherwise.
		 */
		private boolean select(JFormattedTextField ftf, AttributedCharacterIterator iterator, DateFormat.Field field) {
			int max = ftf.getDocument().getLength();

			iterator.first();
			do {
				Map attrs = iterator.getAttributes();

				if (attrs != null && attrs.containsKey(field)) {
					int start = iterator.getRunStart(field);
					int end = iterator.getRunLimit(field);

					if (start != -1 && end != -1 && start <= max && end <= max) {
						ftf.select(start, end);
					}
					return true;
				}
			} while (iterator.next() != CharacterIterator.DONE);
			return false;
		}

		/**
		 * Returns the calendarField under the start of the selection, or
		 * -1 if there is no valid calendar field under the selection (or
		 * the spinner isn't editing dates.
		 */
		private int getCalendarField(JSpinner spinner) {
			JComponent editor = spinner.getEditor();

			if (editor instanceof JSpinner.DateEditor) {
				JSpinner.DateEditor dateEditor = (JSpinner.DateEditor) editor;
				JFormattedTextField ftf = dateEditor.getTextField();
				int start = ftf.getSelectionStart();
				JFormattedTextField.AbstractFormatter formatter = ftf.getFormatter();

				if (formatter instanceof InternationalFormatter) {
					Format.Field[] fields = ((InternationalFormatter) formatter).getFields(start);

					for (int counter = 0; counter < fields.length; counter++) {
						if (fields[counter] instanceof DateFormat.Field) {
							int calendarField;

							if (fields[counter] == DateFormat.Field.HOUR1) {
								calendarField = Calendar.HOUR;
							} else {
								calendarField = ((DateFormat.Field) fields[counter]).getCalendarField();
							}
							if (calendarField != -1) {
								return calendarField;
							}
						}
					}
				}
			}
			return -1;
		}

		public void mousePressed(MouseEvent e) {
			if (SwingUtilities.isLeftMouseButton(e) && e.getComponent().isEnabled()) {
				spinner = eventToSpinner(e);
				autoRepeatTimer.start();

				focusSpinnerIfNecessary();
			}
		}

		public void mouseReleased(MouseEvent e) {
			autoRepeatTimer.stop();
			spinner = null;
		}

		public void mouseClicked(MouseEvent e) {
		}

		public void mouseEntered(MouseEvent e) {
		}

		public void mouseExited(MouseEvent e) {
		}

		/**
		 * Requests focus on a child of the spinner if the spinner doesn't
		 * have focus.
		 */
		private void focusSpinnerIfNecessary() {
			Component fo = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
			if (spinner.isRequestFocusEnabled() && (fo == null || !SwingUtilities.isDescendingFrom(fo, spinner))) {
				Container root = spinner;

				if (!root.isFocusCycleRoot()) {
					root = root.getFocusCycleRootAncestor();
				}
				if (root != null) {
					FocusTraversalPolicy ftp = root.getFocusTraversalPolicy();
					Component child = ftp.getComponentAfter(root, spinner);

					if (child != null && SwingUtilities.isDescendingFrom(child, spinner)) {
						child.requestFocus();
					}
				}
			}
		}
	}

}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一区不卡| 国产亚洲污的网站| 成人午夜激情在线| 午夜日韩在线观看| 中文字幕一区在线观看视频| 欧美成人video| 欧美三级中文字幕在线观看| 成人视屏免费看| 久久精品久久综合| 亚洲电影你懂得| 亚洲视频在线一区| 国产欧美日韩在线视频| 欧美一级理论片| 在线一区二区三区四区五区| 成人av网站免费观看| 国模套图日韩精品一区二区| 亚洲成av人综合在线观看| 中文字幕一区在线| 亚洲国产高清不卡| 久久久久综合网| 26uuu欧美| 欧美电影免费观看高清完整版在 | 亚洲一区二区三区三| 国产午夜精品一区二区三区嫩草| 欧美一区中文字幕| 欧美性一二三区| 色综合色综合色综合| 成人免费高清在线观看| 国产麻豆精品一区二区| 久久国产三级精品| 久久99久久久欧美国产| 日韩成人午夜电影| 免费久久99精品国产| 日韩精品一级中文字幕精品视频免费观看| 一区二区在线看| 一区二区三区中文字幕| 亚洲狠狠丁香婷婷综合久久久| 综合久久久久综合| 亚洲精品伦理在线| 亚洲男女一区二区三区| 亚洲欧美日韩小说| 亚洲一区二区三区美女| 午夜在线成人av| 日韩精品亚洲一区| 蜜臀av国产精品久久久久| 蜜桃av一区二区三区| 老司机免费视频一区二区| 国产在线不卡一卡二卡三卡四卡| 国产一区二区三区精品视频| 国产精品66部| av在线播放一区二区三区| 92国产精品观看| 欧美亚洲动漫制服丝袜| 制服丝袜亚洲色图| 日韩欧美一级精品久久| 久久久高清一区二区三区| 国产欧美精品国产国产专区 | 精品一区二区三区在线播放 | 精品精品国产高清一毛片一天堂| 精品国内二区三区| 国产精品污网站| 亚洲欧美另类久久久精品| 亚洲国产精品视频| 另类调教123区| 粉嫩aⅴ一区二区三区四区| 91色综合久久久久婷婷| 欧美高清www午色夜在线视频| 26uuu成人网一区二区三区| 国产精品伦一区二区三级视频| 一区二区欧美在线观看| 蜜桃av一区二区三区电影| 成人免费av在线| 欧美日韩在线播放一区| 久久综合久久综合久久综合| 成人欧美一区二区三区视频网页| 亚洲在线观看免费| 国产自产v一区二区三区c| 在线视频国内自拍亚洲视频| 日韩小视频在线观看专区| 国产精品久久久久aaaa樱花 | 不卡av电影在线播放| 欧美群妇大交群中文字幕| 久久久不卡网国产精品二区| 亚洲三级在线免费| 精品在线免费视频| 色综合天天性综合| 久久亚洲精品小早川怜子| 亚洲一区在线观看免费| 国产米奇在线777精品观看| 日本道精品一区二区三区| 2024国产精品| 性做久久久久久免费观看欧美| 国产综合成人久久大片91| 欧美视频一区二区在线观看| 国产精品视频观看| 精品在线一区二区| 欧美精品一二三区| 亚洲色图制服丝袜| 国模娜娜一区二区三区| 欧美乱妇15p| 亚洲乱码国产乱码精品精可以看| 激情综合五月天| 欧美精品少妇一区二区三区| 日韩一区欧美一区| 国产成人超碰人人澡人人澡| 日韩三级av在线播放| 亚洲综合自拍偷拍| 91片在线免费观看| 国产欧美精品日韩区二区麻豆天美| 欧美aaa在线| 欧美视频在线观看一区| 亚洲欧美一区二区三区国产精品| 国产一区三区三区| 日韩精品自拍偷拍| 日韩av一区二区三区| 欧美日韩大陆在线| 伊人婷婷欧美激情| 91亚洲午夜精品久久久久久| 国产精品国产三级国产普通话三级 | 国产一区二区三区av电影| 欧美一区二区高清| 日韩二区三区四区| 538prom精品视频线放| 亚洲香蕉伊在人在线观| 91亚洲大成网污www| 中文字幕欧美日本乱码一线二线| 国内偷窥港台综合视频在线播放| 日韩一级黄色大片| 日韩电影在线免费观看| 在线综合视频播放| 日本美女一区二区三区| 欧美一区二区免费| 蜜桃精品在线观看| 26uuu国产电影一区二区| 国产老肥熟一区二区三区| 久久婷婷综合激情| 国产精品77777| 国产精品午夜在线| 99热99精品| 一区二区三区四区不卡在线 | 亚洲国产cao| 欧美视频中文一区二区三区在线观看 | 欧美三电影在线| 亚洲va欧美va天堂v国产综合| 欧美午夜一区二区| 午夜精品久久久久影视| 日韩一级完整毛片| 国产一区不卡在线| 最新日韩在线视频| 91黄色激情网站| 日韩精品一区第一页| 日韩精品一区二区三区在线观看| 极品销魂美女一区二区三区| 亚洲国产高清不卡| 欧亚洲嫩模精品一区三区| 男女性色大片免费观看一区二区| 日韩精品一区在线| 粉嫩一区二区三区性色av| 亚洲图片欧美激情| 666欧美在线视频| 福利91精品一区二区三区| 亚洲欧美日韩国产手机在线| 欧美精品视频www在线观看| 国产综合色在线| 亚洲欧美一区二区久久| 欧美一级日韩一级| 成人丝袜18视频在线观看| 亚洲第一精品在线| www亚洲一区| 在线亚洲高清视频| 裸体在线国模精品偷拍| 日韩一区在线免费观看| 欧美久久久久久久久| 国产精品一区二区久激情瑜伽| 亚洲色图20p| 精品国产一二三区| 91偷拍与自偷拍精品| 秋霞国产午夜精品免费视频| 国产精品视频第一区| 91精品国产综合久久国产大片| 国产69精品久久久久毛片| 天堂va蜜桃一区二区三区| 国产精品欧美久久久久一区二区| 欧美精品日日鲁夜夜添| 国产成人精品免费一区二区| 调教+趴+乳夹+国产+精品| 欧美激情一区在线| 91精品婷婷国产综合久久竹菊| 成人免费高清在线| 麻豆国产91在线播放| 一区二区三区91| 久久久国产午夜精品| 欧美电影影音先锋| 91同城在线观看| 国产精品456| 免费观看在线综合| 亚洲国产欧美在线| 成人欧美一区二区三区白人 | 亚洲欧美在线视频| 久久久久久久久99精品|