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

📄 basicoptionpaneui.java

📁 java jdk 1.4的源码
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
		Object[]           sValues = optionPane.getSelectionValues();		Object             inputValue = optionPane		                           .getInitialSelectionValue();		JComponent         toAdd;		if (sValues != null) {		    if (sValues.length < 20) {			JComboBox            cBox = new JComboBox();			for(int counter = 0, maxCounter = sValues.length;			    counter < maxCounter; counter++) {			    cBox.addItem(sValues[counter]);                        }			if (inputValue != null) {			    cBox.setSelectedItem(inputValue);                        }			inputComponent = cBox;			toAdd = cBox;		    } else {			JList                list = new JList(sValues);			JScrollPane          sp = new JScrollPane(list);			list.setVisibleRowCount(10);			list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);			if(inputValue != null)			    list.setSelectedValue(inputValue, true);			list.addMouseListener(new ListSelectionListener());			toAdd = sp;			inputComponent = list;		    }		} else {		    MultiplexingTextField   tf = new MultiplexingTextField(20);                    tf.setKeyStrokes(new KeyStroke[] {                                     KeyStroke.getKeyStroke("ENTER") } );		    if (inputValue != null) {                        String inputString = inputValue.toString();			tf.setText(inputString);                        tf.setSelectionStart(0);                        tf.setSelectionEnd(inputString.length());                    }		    tf.addActionListener(new TextFieldActionListener());		    toAdd = inputComponent = tf;		}		Object[]           newMessage;		if (message == null) {		    newMessage = new Object[1];		    newMessage[0] = toAdd;				} else {		    newMessage = new Object[2];		    newMessage[0] = message;		    newMessage[1] = toAdd;		}		return newMessage;	    }	    return optionPane.getMessage();	}	return null;    }    /**     * Creates and adds a JLabel representing the icon returned from     * <code>getIcon</code> to <code>top</code>. This is messaged from     * <code>createMessageArea</code>     */    protected void addIcon(Container top) {	/* Create the icon. */	Icon                  sideIcon = getIcon();	if (sideIcon != null) {	    JLabel            iconLabel = new JLabel(sideIcon);	    iconLabel.setVerticalAlignment(SwingConstants.TOP);	    top.add(iconLabel, BorderLayout.BEFORE_LINE_BEGINS);	}    }    /**     * Returns the icon from the JOptionPane the receiver is providing     * the look and feel for, or the default icon as returned from     * <code>getDefaultIcon</code>.     */    protected Icon getIcon() {	Icon      mIcon = (optionPane == null ? null : optionPane.getIcon());	if(mIcon == null && optionPane != null)	    mIcon = getIconForType(optionPane.getMessageType());	return mIcon;    }    /**     * Returns the icon to use for the passed in type.     */    protected Icon getIconForType(int messageType) {	if(messageType < 0 || messageType > 3)	    return null;	switch(messageType) {	case 0:	    return UIManager.getIcon("OptionPane.errorIcon");	case 1:	    return UIManager.getIcon("OptionPane.informationIcon");	case 2:	    return UIManager.getIcon("OptionPane.warningIcon");	case 3:	    return UIManager.getIcon("OptionPane.questionIcon");	}	return null;    }    /**     * Returns the maximum number of characters to place on a line.     */    protected int getMaxCharactersPerLineCount() {	return optionPane.getMaxCharactersPerLineCount();    }   /**     * Recursively creates new JLabel instances to represent <code>d</code>.     * Each JLabel instance is added to <code>c</code>.     */    protected void burstStringInto(Container c, String d, int maxll) {	// Primitive line wrapping	int len = d.length();	if (len <= 0)	    return;	if (len > maxll) {	    int p = d.lastIndexOf(' ', maxll);	    if (p <= 0)		p = d.indexOf(' ', maxll);	    if (p > 0 && p < len) {		burstStringInto(c, d.substring(0, p), maxll);		burstStringInto(c, d.substring(p + 1), maxll);		return;	    }	}	JLabel label = new JLabel(d, JLabel.LEFT);        configureMessageLabel(label);	c.add(label);    }    protected Container createSeparator() {        return null;    }    /**     * Creates and returns a Container containing the buttons. The buttons     * are created by calling <code>getButtons</code>.     */    protected Container createButtonArea() {        JPanel bottom = new JPanel();        bottom.setBorder(UIManager.getBorder("OptionPane.buttonAreaBorder"));	bottom.setLayout(new ButtonAreaLayout(true, 6));	addButtonComponents(bottom, getButtons(), getInitialValueIndex());        mnemonics = null;	return bottom;    }    /**     * Creates the appropriate object to represent each of the objects in     * <code>buttons</code> and adds it to <code>container</code>. This     * differs from addMessageComponents in that it will recurse on     * <code>buttons</code> and that if button is not a Component     * it will create an instance of JButton.     */    protected void addButtonComponents(Container container, Object[] buttons,				 int initialIndex) {	if (buttons != null && buttons.length > 0) {	    boolean            sizeButtonsToSame = getSizeButtonsToSameWidth();	    boolean            createdAll = true;	    int                numButtons = buttons.length;	    JButton[]          createdButtons = null;	    int                maxWidth = 0;            int[]              mnemonics = this.mnemonics;            if (mnemonics != null && mnemonics.length != buttons.length) {                mnemonics = null;            }	    if (sizeButtonsToSame) {		createdButtons = new JButton[numButtons];            }	    for(int counter = 0; counter < numButtons; counter++) {		Object       button = buttons[counter];		Component    newComponent;		if (button instanceof Component) {		    createdAll = false;		    newComponent = (Component)button;		    container.add(newComponent);		    hasCustomComponents = true;				} else {		    JButton      aButton;		    if (button instanceof Icon)			aButton = new JButton((Icon)button);		    else			aButton = new JButton(button.toString());		    aButton.setMultiClickThreshhold(UIManager.getInt("OptionPane.buttonClickThreshhold"));                    configureButton(aButton);		    container.add(aButton);                    ActionListener buttonListener = createButtonActionListener(counter);                    if (buttonListener != null) {                        aButton.addActionListener(buttonListener);                    }		    newComponent = aButton;                    if (mnemonics != null) {                        aButton.setMnemonic(mnemonics[counter]);                    }		}		if (sizeButtonsToSame && createdAll && 		   (newComponent instanceof JButton)) {		    createdButtons[counter] = (JButton)newComponent;		    maxWidth = Math.max(maxWidth,					newComponent.getMinimumSize().width);		}		if (counter == initialIndex) {		    initialFocusComponent = newComponent;                    if (initialFocusComponent instanceof JButton) {                        JButton defaultB = (JButton)initialFocusComponent;                        defaultB.addAncestorListener(new AncestorListener() {                           public void ancestorAdded(AncestorEvent e) {                                JButton defaultButton = (JButton)e.getComponent();                               JRootPane root = SwingUtilities.getRootPane(defaultButton);                               if (root != null) {                                   root.setDefaultButton(defaultButton);                               }                           }                           public void ancestorRemoved(AncestorEvent event) {}                           public void ancestorMoved(AncestorEvent event) {}                        });                    }		}	    }	    ((ButtonAreaLayout)container.getLayout()).		              setSyncAllWidths((sizeButtonsToSame && createdAll));	    /* Set the padding, windows seems to use 8 if <= 2 components,	       otherwise 4 is used. It may actually just be the size of the	       buttons is always the same, not sure. */	    if (sizeButtonsToSame && createdAll) {		JButton               aButton;		int                   padSize;		padSize = (numButtons <= 2? 8 : 4);		for(int counter = 0; counter < numButtons; counter++) {		    aButton = createdButtons[counter];		    aButton.setMargin(new Insets(2, padSize, 2, padSize));		}	    }	}    }    protected ActionListener createButtonActionListener(int buttonIndex) {        return new ButtonActionListener(buttonIndex);    }    /**     * Returns the buttons to display from the JOptionPane the receiver is     * providing the look and feel for. If the JOptionPane has options     * set, they will be provided, otherwise if the optionType is     * YES_NO_OPTION, yesNoOptions is returned, if the type is     * YES_NO_CANCEL_OPTION yesNoCancelOptions is returned, otherwise     * defaultButtons are returned.     */    protected Object[] getButtons() {	if (optionPane != null) {	    Object[] suppliedOptions = optionPane.getOptions();	    if (suppliedOptions == null) {                Object[] defaultOptions;		int type = optionPane.getOptionType();                Locale l = optionPane.getLocale();		if (type == JOptionPane.YES_NO_OPTION) {                    defaultOptions = new String[2];                    defaultOptions[0] = UIManager.get("OptionPane.yesButtonText",l);                    defaultOptions[1] = UIManager.get("OptionPane.noButtonText",l);                    mnemonics = new int[2];                    mnemonics[0] = getMnemonic("OptionPane.yesButtonMnemonic", l);                    mnemonics[1] = getMnemonic("OptionPane.noButtonMnemonic", l);		} else if (type == JOptionPane.YES_NO_CANCEL_OPTION) {                    defaultOptions = new String[3];                    defaultOptions[0] = UIManager.get("OptionPane.yesButtonText",l);                    defaultOptions[1] = UIManager.get("OptionPane.noButtonText",l);                    defaultOptions[2] = UIManager.get("OptionPane.cancelButtonText",l);                    mnemonics = new int[3];                    mnemonics[0] = getMnemonic("OptionPane.yesButtonMnemonic", l);                    mnemonics[1] = getMnemonic("OptionPane.noButtonMnemonic", l);                    mnemonics[2] = getMnemonic("OptionPane.cancelButtonMnemonic", l);		} else if (type == JOptionPane.OK_CANCEL_OPTION) {                    defaultOptions = new String[2];                    defaultOptions[0] = UIManager.get("OptionPane.okButtonText",l);                    defaultOptions[1] = UIManager.get("OptionPane.cancelButtonText",l);                    mnemonics = new int[2];                    mnemonics[0] = getMnemonic("OptionPane.okButtonMnemonic", l);                    mnemonics[1] = getMnemonic("OptionPane.cancelButtonMnemonic", l);		} else {                    defaultOptions = new String[1];                    defaultOptions[0] = UIManager.get("OptionPane.okButtonText",l);                    mnemonics = new int[1];                    mnemonics[0] = getMnemonic("OptionPane.okButtonMnemonic", l);                }                return defaultOptions;                	    }	    return suppliedOptions;	}	return null;    }    /**     * Returns the mnemonic for the passed in key.     */    private int getMnemonic(String key, Locale l) {        String value = (String)UIManager.get(key, l);        if (value == null) {            return 0;        }        try {            return Integer.parseInt(value);        }        catch (NumberFormatException nfe) { }        return 0;    }    /**     * Returns true, basic L&F wants all the buttons to have the same     * width.     */    protected boolean getSizeButtonsToSameWidth() {	return true;    }    /**     * Returns the initial index into the buttons to select. The index     * is calculated from the initial value from the JOptionPane and     * options of the JOptionPane or 0.     */    protected int getInitialValueIndex() {	if (optionPane != null) {	    Object             iv = optionPane.getInitialValue();	    Object[]           options = optionPane.getOptions();	    if(options == null) {		return 0;	    }	    else if(iv != null) {		for(int counter = options.length - 1; counter >= 0; counter--){		    if(options[counter].equals(iv))			return counter;		}	    }	}	return -1;    }    /**     * Sets the input value in the option pane the receiver is providing     * the look and feel for based on the value in the inputComponent.     */    protected void resetInputValue() {	if(inputComponent != null && (inputComponent instanceof JTextField)) {	    optionPane.setInputValue(((JTextField)inputComponent).getText());	} else if(inputComponent != null &&                  (inputComponent instanceof JComboBox)) {	    optionPane.setInputValue(((JComboBox)inputComponent)				     .getSelectedItem());	} else if(inputComponent != null) {	    optionPane.setInputValue(((JList)inputComponent)				     .getSelectedValue());        }    }    /**     * If inputComponent is non-null, the focus is requested on that,     * otherwise request focus on the default value     */    public void selectInitialValue(JOptionPane op) {	if (inputComponent != null)	    inputComponent.requestFocus();	else {	    if (initialFocusComponent != null)	        initialFocusComponent.requestFocus();            if (initialFocusComponent instanceof JButton) {                JRootPane root = SwingUtilities.getRootPane(initialFocusComponent);                if (root != null) {                    root.setDefaultButton((JButton)initialFocusComponent);                }            }        }    }    /**     * Returns true if in the last call to validateComponent the message     * or buttons contained a subclass of Component.     */    public boolean containsCustomComponents(JOptionPane op) {	return hasCustomComponents;    }    /**     * <code>ButtonAreaLayout</code> behaves in a similar manner to     * <code>FlowLayout</code>. It lays out all components from left to     * right. If <code>syncAllWidths</code> is true, the widths of each     * component will be set to the largest preferred size width.     *     * This inner class is marked &quot;public&quot; due to a compiler bug.     * This class should be treated as a &quot;protected&quot; inner class.     * Instantiate it only within subclasses of BasicOptionPaneUI.     */      public static class ButtonAreaLayout implements LayoutManager {	protected boolean           syncAllWidths;	protected int               padding;        /** If true, children are lumped together in parent. */	protected boolean           centersChildren;	public ButtonAreaLayout(boolean syncAllWidths, int padding) {	    this.syncAllWidths = syncAllWidths;	    this.padding = padding;	    centersChildren = true;	}	public void setSyncAllWidths(boolean newValue) {	    syncAllWidths = newValue;	}	public boolean getSyncAllWidths() {	    return syncAllWidths;	}	public void setPadding(int newPadding) {	    this.padding = newPadding;	}

⌨️ 快捷键说明

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