Jmenu

来源:互联网 发布:淘宝企业店铺申请流程 编辑:程序博客网 时间:2024/06/05 18:34
/* (swing1.1.1beta2) *///package jp.gr.java_conf.tame.swing.examples;import java.util.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.border.*;import javax.swing.plaf.metal.*;import javax.swing.plaf.basic.*;import jp.gr.java_conf.tame.swing.menu.*;/** * @version 1.0 05/10/99 */  public class ComboBoxMenuExample extends JFrame {  public ComboBoxMenuExample() {    super("ComboBoxMenu Example");         String[] itemStr = {      "name"   ,"Red"     ,"Blue",      "number" ,"255,0,0" ,"0,0,255",      // separator      "system" ,"control" ,"controlHighlight" ,"controlShadow",                "text"     };                              JMenuItem[] menuItems = new JMenuItem[7];    menuItems[0] = new JMenuItem(itemStr[ 1]);    menuItems[1] = new JMenuItem(itemStr[ 2]);    menuItems[2] = new JMenuItem(itemStr[ 4]);    menuItems[3] = new JMenuItem(itemStr[ 5]);    menuItems[4] = new JMenuItem(itemStr[ 8]);    menuItems[5] = new JMenuItem(itemStr[ 9]);    menuItems[6] = new JMenuItem(itemStr[10]);        JMenu[] menus = new JMenu[4];    menus[0] = new JMenu(itemStr[0]);    menus[1] = new JMenu(itemStr[3]);    menus[2] = new JMenu(itemStr[6]);    menus[3] = new JMenu(itemStr[7]);        menus[0].add(menuItems[0]);    menus[0].add(menuItems[1]);    menus[1].add(menuItems[2]);    menus[1].add(menuItems[3]);    menus[3].add(menuItems[4]);    menus[3].add(menuItems[5]);    menus[2].add(menus[3]);    menus[2].add(menuItems[6]);        JMenu menu = ComboMenuBar.createMenu(menuItems[0].getText());    menu.add(menus[0]);    menu.add(menus[1]);    menu.addSeparator();    menu.add(menus[2]);        ComboMenuBar comboMenu = new ComboMenuBar(menu);                JComboBox combo = new JComboBox();    combo.addItem(itemStr[ 1]);    combo.addItem(itemStr[ 2]);    combo.addItem(itemStr[ 4]);    combo.addItem(itemStr[ 5]);    combo.addItem(itemStr[ 8]);    combo.addItem(itemStr[ 9]);    combo.addItem(itemStr[10]);        getContentPane().setLayout(new FlowLayout());    getContentPane().add(new ComboPanel("Fake ComboBox", comboMenu));    getContentPane().add(new ComboPanel("ComboBox"     , combo));  }    class ComboPanel extends JPanel {    ComboPanel(String title, JComponent c) {      setLayout(new FlowLayout());      setBorder(new TitledBorder(title));      add(c);    }  }  public static void main (String args[]) {    ComboBoxMenuExample frame = new ComboBoxMenuExample();    frame.addWindowListener(new WindowAdapter() {      public void windowClosing(WindowEvent e) {System.exit(0);      }    });    frame.setSize(370, 100);    frame.setVisible(true);      }     }=======================================
/* (swing1.1.1beta2) */package jp.gr.java_conf.tame.swing.menu;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.border.*;import jp.gr.java_conf.tame.swing.icon.*;/** * @version 1.0 05/10/99 */  public class ComboMenuBar extends JMenuBar {  JMenu menu;    Dimension preferredSize;    public ComboMenuBar(JMenu menu) {    this.menu = menu;        Color color = UIManager.getColor("Menu.selectionBackground");       UIManager.put("Menu.selectionBackground",      UIManager.getColor("Menu.background"));    menu.updateUI();        UIManager.put("Menu.selectionBackground", color);        MenuItemListener listener = new MenuItemListener();    setListener(menu, listener);            add(menu);  }    class MenuItemListener implements ActionListener {    public void actionPerformed(ActionEvent e) {      JMenuItem item = (JMenuItem)e.getSource();      menu.setText(item.getText());      menu.requestFocus();    }      }    private void setListener(JMenuItem item,ActionListener listener) {    if (item instanceof JMenu) {      JMenu menu = (JMenu)item;      int n = menu.getItemCount();      for (int i=0;i<n;i++) {        setListener(menu.getItem(i), listener);      }    } else if (item != null) {             // null means separator      item.addActionListener(listener);    }     }      public String getSelectedItem() {    return menu.getText();  }    public void setPreferredSize(Dimension size) {    preferredSize = size;  }    public Dimension getPreferredSize() {    if (preferredSize == null) {      Dimension sd = super.getPreferredSize();      Dimension menuD = getItemSize(menu);      Insets margin = menu.getMargin();      Dimension retD  = new Dimension(menuD.width,         margin.top + margin.bottom + menuD.height);      menu.setPreferredSize(retD);      preferredSize = retD;    }    return preferredSize;   }    private Dimension getItemSize(JMenu menu) {    Dimension d = new Dimension(0,0);    int n = menu.getItemCount();    for (int i=0;i<n;i++) {      Dimension itemD;      JMenuItem item = menu.getItem(i);      if (item instanceof JMenu) {        itemD = getItemSize((JMenu)item);      } else if (item != null) {        itemD = item.getPreferredSize();      } else {        itemD = new Dimension(0,0);        // separator      }      d.width  = Math.max(d.width,  itemD.width );      d.height = Math.max(d.height, itemD.height);    }    return d;  }    public static class ComboMenu extends JMenu {    ArrowIcon iconRenderer;        public ComboMenu(String label) {      super(label);      iconRenderer = new ArrowIcon(SwingConstants.SOUTH, true);      setBorder(new EtchedBorder());      setIcon(new BlankIcon(null, 11));      setHorizontalTextPosition(JButton.LEFT);      setFocusPainted(true);    }      public void paintComponent(Graphics g) {      super.paintComponent(g);      Dimension d = this.getPreferredSize();      int x = Math.max(0, d.width - iconRenderer.getIconWidth() -3);      int y = Math.max(0, (d.height - iconRenderer.getIconHeight())/2 -2);      iconRenderer.paintIcon(this,g, x,y);    }  }    public static JMenu createMenu(String label) {    return new ComboMenu(label);  }  }==============================================
/* (swing1.1) */package jp.gr.java_conf.tame.swing.icon;import java.awt.*;import javax.swing.*;import javax.swing.plaf.basic.*;/** * @version 1.0 02/26/99 */public class ArrowIcon implements Icon, SwingConstants {  private static final int DEFAULT_SIZE = 11;  //private static final int DEFAULT_SIZE = 5;  private int size;  private int iconSize;  private int direction;  private boolean isEnabled;  private BasicArrowButton iconRenderer;  public ArrowIcon(int direction, boolean isPressedView) {    this(DEFAULT_SIZE, direction, isPressedView);  }  public ArrowIcon(int iconSize, int direction, boolean isEnabled) {    this.size = iconSize / 2;    this.iconSize = iconSize;    this.direction = direction;    this.isEnabled = isEnabled;    iconRenderer = new BasicArrowButton(direction);  }  public void paintIcon(Component c, Graphics g, int x, int y) {    iconRenderer.paintTriangle(g, x, y, size, direction, isEnabled);  }  public int getIconWidth() {    //int retCode;    switch (direction) {      case NORTH:      case SOUTH: return iconSize;      case EAST:      case WEST:  return size;    }    return iconSize;  }  public int getIconHeight() {    switch (direction) {      case NORTH:      case SOUTH: return size;      case EAST:      case WEST:  return iconSize;    }    return size;  }}===================================================
/* (swing1.1) */package jp.gr.java_conf.tame.swing.icon;import java.awt. *;import javax.swing. *;/** * @version 1.0 02/26/99 */public class BlankIcon implements Icon {  private Color fillColor;  private int size;  public BlankIcon() {    this(null, 11);  }  public BlankIcon(Color color, int size) {    //UIManager.getColor("control")    //UIManager.getColor("controlShadow")    fillColor = color;    this.size = size;      }  public void paintIcon(Component c, Graphics g, int x, int y) {    if (fillColor != null) {      g.setColor(fillColor);      g.drawRect(x, y, size-1, size-1);    }  }  public int getIconWidth() {    return size;  }  public int getIconHeight() {    return size;  }}