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

📄 basicinternalframetitlepane.java

📁 gcc的组建
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
     * @param a The Action that the button uses.     */    public PaneButton(Action a)    {      super(a);      setMargin(new Insets(0, 0, 0, 0));    }    /**     * This method returns true if the Component can be focused.     *     * @return false.     */    public boolean isFocusable()    {      // These buttons cannot be given focus.      return false;    }  }  /** The action command for the Close action. */  protected static final String CLOSE_CMD = "Close";  /** The action command for the Minimize action. */  protected static final String ICONIFY_CMD = "Minimize";  /** The action command for the Maximize action. */  protected static final String MAXIMIZE_CMD = "Maximize";  /** The action command for the Move action. */  protected static final String MOVE_CMD = "Move";  /** The action command for the Restore action. */  protected static final String RESTORE_CMD = "Restore";  /** The action command for the Size action. */  protected static final String SIZE_CMD = "Size";  /** The action associated with closing the JInternalFrame. */  protected Action closeAction;  /** The action associated with iconifying the JInternalFrame. */  protected Action iconifyAction;  /** The action associated with maximizing the JInternalFrame. */  protected Action maximizeAction;  /** The action associated with moving the JInternalFrame. */  protected Action moveAction;  /** The action associated with restoring the JInternalFrame. */  protected Action restoreAction;  /** The action associated with resizing the JInternalFrame. */  protected Action sizeAction;  /** The button that closes the JInternalFrame. */  protected JButton closeButton;  /** The button that iconifies the JInternalFrame. */  protected JButton iconButton;  /** The button that maximizes the JInternalFrame. */  protected JButton maxButton;  /** The icon displayed in the restore button. */  protected Icon minIcon = BasicIconFactory.createEmptyFrameIcon();  /** The icon displayed in the maximize button. */  protected Icon maxIcon = BasicIconFactory.createEmptyFrameIcon();  /** The icon displayed in the iconify button. */  protected Icon iconIcon = BasicIconFactory.createEmptyFrameIcon();  /** The icon displayed in the close button. */  protected Icon closeIcon;    /** The JInternalFrame that this TitlePane is used in. */  protected JInternalFrame frame;  /** The JMenuBar that is located at the top left of the Title Pane. */  protected JMenuBar menuBar;  /** The JMenu inside the menuBar. */  protected JMenu windowMenu;  /**   * The text color of the TitlePane when the JInternalFrame is not selected.   */  protected Color notSelectedTextColor;  /**   * The background color of the TitlePane when the JInternalFrame is not   * selected.   */  protected Color notSelectedTitleColor;  /** The text color of the titlePane when the JInternalFrame is selected. */  protected Color selectedTextColor;  /**   * The background color of the TitlePane when the JInternalFrame is   * selected.   */  protected Color selectedTitleColor;  /** The Property Change listener that listens to the JInternalFrame. */  protected PropertyChangeListener propertyChangeListener;  /**   * The label used to display the title. This label is not added to the   * TitlePane.   * This is package-private to avoid an accessor method.   */  transient JLabel title;  /**   * Creates a new BasicInternalFrameTitlePane object that is used in the   * given JInternalFrame.   *   * @param f The JInternalFrame this BasicInternalFrameTitlePane will be used   *        in.   */  public BasicInternalFrameTitlePane(JInternalFrame f)  {    frame = f;    setLayout(createLayout());    title = new JLabel();    title.setHorizontalAlignment(SwingConstants.LEFT);    title.setHorizontalTextPosition(SwingConstants.LEFT);    title.setOpaque(false);    setOpaque(true);    setBackground(Color.LIGHT_GRAY);    setOpaque(true);    installTitlePane();  }  /**   * This method installs the TitlePane onto the JInternalFrameTitlePane. It   * also creates any children components that need to be created and adds   * listeners to the appropriate components.   */  protected void installTitlePane()  {    installDefaults();    installListeners();    createActions();    assembleSystemMenu();    createButtons();    setButtonIcons();    addSubComponents();    enableActions();  }  /**   * This method adds the sub components to the TitlePane.   */  protected void addSubComponents()  {    add(menuBar);    add(closeButton);    add(iconButton);    add(maxButton);  }  /**   * This method creates the actions that are used to manipulate the   * JInternalFrame.   */  protected void createActions()  {    closeAction = new CloseAction();    closeAction.putValue(AbstractAction.ACTION_COMMAND_KEY, CLOSE_CMD);    iconifyAction = new IconifyAction();    iconifyAction.putValue(AbstractAction.ACTION_COMMAND_KEY, ICONIFY_CMD);    maximizeAction = new MaximizeAction();    maximizeAction.putValue(AbstractAction.ACTION_COMMAND_KEY, MAXIMIZE_CMD);    sizeAction = new SizeAction();    sizeAction.putValue(AbstractAction.ACTION_COMMAND_KEY, SIZE_CMD);    restoreAction = new RestoreAction();    restoreAction.putValue(AbstractAction.ACTION_COMMAND_KEY, RESTORE_CMD);    moveAction = new MoveAction();    moveAction.putValue(AbstractAction.ACTION_COMMAND_KEY, MOVE_CMD);  }  /**   * This method is used to install the listeners.   */  protected void installListeners()  {    propertyChangeListener = createPropertyChangeListener();    frame.addPropertyChangeListener(propertyChangeListener);  }  /**   * This method is used to uninstall the listeners.   */  protected void uninstallListeners()  {    frame.removePropertyChangeListener(propertyChangeListener);    propertyChangeListener = null;  }  /**   * This method installs the defaults determined by the look and feel.   */  protected void installDefaults()  {    title.setFont(UIManager.getFont("InternalFrame.titleFont"));    selectedTextColor = UIManager.getColor("InternalFrame.activeTitleForeground");    selectedTitleColor = UIManager.getColor("InternalFrame.activeTitleBackground");    notSelectedTextColor = UIManager.getColor("InternalFrame.inactiveTitleForeground");    notSelectedTitleColor = UIManager.getColor("InternalFrame.inactiveTitleBackground");      closeIcon = UIManager.getIcon("InternalFrame.closeIcon");    iconIcon = UIManager.getIcon("InternalFrame.iconifyIcon");    maxIcon = UIManager.getIcon("InternalFrame.maximizeIcon");  }  /**   * This method uninstalls the defaults.   */  protected void uninstallDefaults()  {    setFont(null);    selectedTextColor = null;    selectedTitleColor = null;    notSelectedTextColor = null;    notSelectedTitleColor = null;        closeIcon = null;    iconIcon = null;    maxIcon = null;  }  /**   * This method creates the buttons used in the TitlePane.   */  protected void createButtons()  {    closeButton = new PaneButton(closeAction);    closeButton.setText(null);    if (!frame.isClosable())      closeButton.setVisible(false);    iconButton = new PaneButton(iconifyAction);    iconButton.setText(null);    if (!frame.isIconifiable())      iconButton.setVisible(false);    maxButton = new PaneButton(maximizeAction);    maxButton.setText(null);    if (!frame.isMaximizable())      maxButton.setVisible(false);  }  /**   * Set icons for the minimize-, maximize- and close-buttons.   */  protected void setButtonIcons()  {    if (closeIcon != null && closeButton != null)      closeButton.setIcon(closeIcon);    if (iconIcon != null && iconButton != null)      iconButton.setIcon(iconIcon);    if (maxIcon != null && maxButton != null)      maxButton.setIcon(maxIcon);  }  /**   * This method creates the MenuBar used in the TitlePane.   */  protected void assembleSystemMenu()  {    menuBar = createSystemMenuBar();    windowMenu = createSystemMenu();    menuBar.add(windowMenu);    addSystemMenuItems(windowMenu);    enableActions();  }  /**   * This method adds the MenuItems to the given JMenu.   *   * @param systemMenu The JMenu to add MenuItems to.   */  protected void addSystemMenuItems(JMenu systemMenu)  {    JMenuItem tmp;    tmp = new JMenuItem(RESTORE_CMD);    tmp.addActionListener(restoreAction);    tmp.setMnemonic(KeyEvent.VK_R);    systemMenu.add(tmp);    tmp = new JMenuItem(MOVE_CMD);    tmp.addActionListener(moveAction);    tmp.setMnemonic(KeyEvent.VK_M);    systemMenu.add(tmp);    tmp = new JMenuItem(SIZE_CMD);    tmp.addActionListener(sizeAction);    tmp.setMnemonic(KeyEvent.VK_S);    systemMenu.add(tmp);    tmp = new JMenuItem(ICONIFY_CMD);    tmp.addActionListener(iconifyAction);    tmp.setMnemonic(KeyEvent.VK_N);    systemMenu.add(tmp);    tmp = new JMenuItem(MAXIMIZE_CMD);    tmp.addActionListener(maximizeAction);    tmp.setMnemonic(KeyEvent.VK_X);    systemMenu.add(tmp);    systemMenu.addSeparator();    tmp = new JMenuItem(CLOSE_CMD);    tmp.addActionListener(closeAction);    tmp.setMnemonic(KeyEvent.VK_C);    systemMenu.add(tmp);  }  /**   * This method creates a new JMenubar.   *   * @return A new JMenuBar.   */  protected JMenuBar createSystemMenuBar()  {    if (menuBar == null)      menuBar = new SystemMenuBar();    menuBar.removeAll();    return menuBar;  }  /**   * This method creates a new JMenu.   *   * @return A new JMenu.   */  protected JMenu createSystemMenu()  {    if (windowMenu == null)      windowMenu = new JMenu();    windowMenu.removeAll();    return windowMenu;  }  /**   * This method programmatically shows the JMenu.   */  protected void showSystemMenu()  {    // FIXME: Untested as KeyEvents are not hooked up.    menuBar.getMenu(1).getPopupMenu().show();  }  /**   * This method paints the TitlePane.   *   * @param g The Graphics object to paint with.   */  public void paintComponent(Graphics g)  {    paintTitleBackground(g);    if (frame.getTitle() != null && title != null)      {	Color saved = g.getColor();        Font f = title.getFont();        g.setFont(f);        FontMetrics fm = g.getFontMetrics(f);	if (frame.isSelected())	  g.setColor(selectedTextColor);	else	  g.setColor(notSelectedTextColor);	title.setText(getTitle(frame.getTitle(), fm, title.getBounds().width));	SwingUtilities.paintComponent(g, title, null, title.getBounds());	g.setColor(saved);      }  }  /**   * This method paints the TitlePane's background.   *   * @param g The Graphics object to paint with.   */  protected void paintTitleBackground(Graphics g)  {    if (!isOpaque())      return;    Color saved = g.getColor();    Dimension dims = getSize();    Color bg = getBackground();    if (frame.isSelected())      bg = selectedTitleColor;    else      bg = notSelectedTitleColor;    g.setColor(bg);    g.fillRect(0, 0, dims.width, dims.height);    g.setColor(saved);  }  /**   * This method returns the title string based on the available width and the   * font metrics.   *   * @param text The desired title.   * @param fm The FontMetrics of the font used.   * @param availableWidth The available width.   *   * @return The allowable string.   */  protected String getTitle(String text, FontMetrics fm, int availableWidth)  {    Rectangle vr = new Rectangle(0, 0, availableWidth, fm.getHeight());    Rectangle ir = new Rectangle();    Rectangle tr = new Rectangle();    String value = SwingUtilities.layoutCompoundLabel(this, fm, text, null,                                                      SwingConstants.CENTER,                                                      SwingConstants.LEFT,                                                      SwingConstants.CENTER,                                                      SwingConstants.LEFT, vr,                                                      ir, tr, 0);    return value;  }  /**   * This method fires something similar to a WINDOW_CLOSING event.   *   * @param frame The JInternalFrame that is being closed.   */  protected void postClosingEvent(JInternalFrame frame)  {    // FIXME: Implement postClosingEvent when I figure out what    // it's supposed to do.    // It says that this fires an WINDOW_CLOSING like event.     // So the closest thing is some kind of InternalFrameEvent.    // But none is fired.    // Can't see it called or anything.  }  /**   * This method enables the actions for the TitlePane given the frame's   * properties.   */  protected void enableActions()  {    closeAction.setEnabled(frame.isClosable());    iconifyAction.setEnabled(frame.isIconifiable());    // The maximize action is responsible for restoring it    // as well, if clicked from the button    maximizeAction.setEnabled(frame.isMaximizable());    // The restoring action is only active when selected    // from the menu.    restoreAction.setEnabled(frame.isMaximum());    sizeAction.setEnabled(frame.isResizable());    // FIXME: Tie MoveAction enabled status to a variable.    moveAction.setEnabled(false);  }  /**   * This method creates a new PropertyChangeListener.   *   * @return A new PropertyChangeListener.   */  protected PropertyChangeListener createPropertyChangeListener()  {    return new PropertyChangeHandler();  }  /**   * This method creates a new LayoutManager for the TitlePane.   *   * @return A new LayoutManager.   */  protected LayoutManager createLayout()  {    return new TitlePaneLayout();  }}

⌨️ 快捷键说明

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