📄 combomenubar.java
字号:
/* (swing1.1.1beta2) */package tame.menu;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.border.*;import tame.icon.*;/**@author Nobuo Tamemasa@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); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -