📄 s10.htm
字号:
<p> menuBar.add(fileMenu);<br> setJMenuBar(menuBar);<br> }<br> }<br> class UnderlineElement extends JButton implements MenuElement {<br> private boolean drawUnderline = false;</p> <p> public UnderlineElement(String s) {<br> super(s);<br> setBorder(BorderFactory.createEmptyBorder(2,2,2,2));<br> }<br> public Component getComponent() {<br> return this;<br> }<br> public MenuElement[] getSubElements() {<br> return new MenuElement[0];<br> }<br> public void menuSelectionChanged(boolean b) {<br> drawUnderline = b;<br> repaint();<br> }<br> public void paintComponent(Graphics g) {<br> super.paintComponent(g);</p> <p> Insets insets = getInsets();</p> <p> if(drawUnderline) {<br> FontMetrics fm = g.getFontMetrics();<br> g.drawLine(insets.left, insets.top + fm.getHeight(),<br> fm.stringWidth(getText()), <br> insets.top + fm.getHeight());<br> }<br> }<br> public void processKeyEvent(KeyEvent me,<br> MenuElement[] element, <br> MenuSelectionManager msm) {<br> }<br> public void processMouseEvent(MouseEvent me) {<br> super.processMouseEvent(me);<br> MenuSelectionManager.defaultManager().processMouseEvent(<br> me);<br> }<br> public void processMouseEvent(MouseEvent me, <br> MenuElement[] element, <br> MenuSelectionManager msm) {<br> if(me.getID() == MouseEvent.MOUSE_CLICKED || <br> me.getID() == MouseEvent.MOUSE_RELEASED) {</p> <p> msm.setSelectedPath(null);<br> doClick();<br> }<br> else<br> msm.setSelectedPath(getPath());<br> }<br> public MenuElement[] getPath() {<br> MenuSelectionManager defaultManager = <br> MenuSelectionManager.defaultManager();<br> MenuElement oldPath[] = defaultManager.getSelectedPath();<br> MenuElement newPath[];<br> int len = oldPath.length;</p> <p> if(len > 0) {<br> MenuElement lastElement = oldPath[len-1];<br> Component parent = getParent();</p> <p> if (lastElement == parent) {<br> newPath = new MenuElement[len+1];</p> <p> System.arraycopy(oldPath, 0, newPath, 0, len);<br> newPath[len] = this;<br> }<br> else {<br> int j;</p> <p> for (j = len-1; j >= 0; j--) {<br> if (oldPath[j].getComponent() == parent)<br> break;<br> }<br> newPath = new MenuElement[j+2];<br> System.arraycopy(oldPath, 0, newPath, 0, j+1);<br> newPath[j+1] = this;<br> }<br> }<br> else<br> return new MenuElement[0];</p> <p> return newPath;<br> }<br> }</p> <hr size="1" noshade> <p> 10.8 JPopupMenu</p> <p> </p> <p align="center"><b>例10-16 使用弹出式菜单</b></p> <hr noshade size="1"> import javax.swing.*;<br> import javax.swing.event.*;<br> import java.awt.*;<br> import java.awt.event.*; <p>public class Test extends JApplet {<br> public void init() {<br> Container contentPane = getContentPane();<br> final JLabel label = new JLabel("Click here for popup");<br> final JPopupMenu popup = new JPopupMenu();<br> final JSlider slider = new JSlider();</p> <p> popup.add(new JMenuItem("Copy", new ImageIcon(this.getClass().getResource("copy.gif"))));<br> popup.add(new CutAction(new ImageIcon(this.getClass().getResource("cut.gif"))));<br> popup.addSeparator();<br> popup.add(slider);</p> <p> label.addMouseListener(new MouseAdapter() {<br> public void mousePressed (MouseEvent e) { <br> popup.show(label, e.getX(), e.getY());<br> }<br> });<br> slider.addChangeListener(new ChangeListener() {<br> public void stateChanged(ChangeEvent e) {<br> if( ! slider.getValueIsAdjusting())<br> popup.setVisible(false);<br> }<br> });</p> <p> label.setHorizontalAlignment(JLabel.CENTER);<br> contentPane.add(label, BorderLayout.CENTER);<br> }<br> class CutAction extends AbstractAction {<br> java.net.URL iconurl;<br> <br> public CutAction(Icon icon) {<br> //super("Cut", new ImageIcon("cut.gif"));<br> super("Cut",icon);<br> }<br> public void actionPerformed(ActionEvent e) {<br> System.out.println("cut");<br> }<br> }<br> }</p> <hr size="1" noshade> <p> 10.8.1 弹出式菜单触发器</p> <p> </p> <p align="center"><b>例10-17 显示一个弹出式菜单以响应弹出式菜单触发器</b></p> <hr noshade size="1"> import javax.swing.*;<br> import java.awt.*;<br> import java.awt.event.*; <p>public class Test extends JApplet {<br> private JPopupMenu popup = new JPopupMenu();</p> <p> public void init() {<br> Container contentPane = getContentPane();</p> <p> popup.add(new JMenuItem("item one"));<br> popup.add(new JMenuItem("item two"));<br> popup.add(new JMenuItem("item three"));<br> popup.add(new JMenuItem("item four"));</p> <p> contentPane.addMouseListener(new MouseAdapter() {<br> public void mousePressed (MouseEvent e) { <br> showPopup(e); <br> }<br> public void mouseClicked (MouseEvent e) { <br> showPopup(e); <br> }<br> public void mouseReleased(MouseEvent e) { <br> showPopup(e); <br> }<br> });<br> }<br> void showPopup(MouseEvent e) {<br> if(e.isPopupTrigger())<br> popup.show(this, e.getX(), e.getY());<br> }<br> }</p> <hr size="1" noshade> <p> 10.8.2 轻量/中量/重量弹出式菜单</p> <p> </p> <p> 10.8.3 弹出式菜单调用者</p> <p> </p> <p align="center"><b>例10-18 相对于其调用者显示弹出式菜单</b></p> <hr noshade size="1"> import javax.swing.*;<br> import java.awt.*;<br> import java.awt.event.*; <p>public class Test extends JApplet {<br> JComboBox combobox = new JComboBox();<br> JPopupMenu popup = new JPopupMenu();<br> ColoredCanvas popupRelativeToMe;<br> ColoredCanvas blueCanvas, redCanvas, yellowCanvas;</p> <p> public void init() {<br> Container contentPane = getContentPane();<br> blueCanvas = new ColoredCanvas(Color.blue);<br> redCanvas = new ColoredCanvas(Color.red);<br> yellowCanvas = new ColoredCanvas(Color.yellow);<br> popupRelativeToMe = blueCanvas;</p> <p> popup.add(new JMenuItem("item one"));<br> popup.add(new JMenuItem("item two"));<br> popup.add(new JMenuItem("item three"));<br> popup.add(new JMenuItem("item four"));</p> <p> contentPane.setLayout(new FlowLayout());<br> contentPane.add(new JLabel("Popup Over:"));<br> contentPane.add(combobox); <br> contentPane.add(blueCanvas);<br> contentPane.add(redCanvas);<br> contentPane.add(yellowCanvas);</p> <p> combobox.addItem("Blue Canvas");<br> combobox.addItem("Yellow Canvas");<br> combobox.addItem("Red Canvas");</p> <p> combobox.addItemListener(new ItemListener() {<br> public void itemStateChanged(ItemEvent event) {<br> if(event.getStateChange() == ItemEvent.SELECTED) {<br> JComboBox c = (JComboBox)event.getSource();<br> String label = (String)c.getSelectedItem();</p> <p> if(label.equals("Blue Canvas"))<br> popupRelativeToMe = blueCanvas;<br> else if(label.equals("Red Canvas"))<br> popupRelativeToMe = redCanvas;<br> else if(label.equals("Yellow Canvas"))<br> popupRelativeToMe = yellowCanvas;</p> <p> popup.show(popupRelativeToMe, 5, 5);<br> }<br> }<br> });<br> }<br> }<br> class ColoredCanvas extends JPanel {<br> private Color color;</p> <p> public ColoredCanvas(Color color) {<br> this.color = color;<br> }<br> public void paintComponent(Graphics g) {<br> super.paintComponent(g);</p> <p> Dimension size = getSize();<br> g.setColor (color);<br> g.fill3DRect(0,0,size.width-1,size.height-1,true);<br> }<br> public Dimension getPreferredSize() {<br> return new Dimension(100,100);<br> }<br> }</p> <hr size="1" noshade> <p> 10.8.4 JPopupMenu属性</p> <p> </p> <p> 10.8.5 JPopupMenu事件</p> <p> </p> <p align="center"><b>例10-19 弹出式菜单事件的清单</b></p> <hr noshade size="1"> import javax.swing.*;<br> import javax.swing.event.*;<br> import java.awt.*;<br> import java.awt.event.*;<br> import java.beans.*; <p>public class Test extends JApplet {<br> public void init() {<br> final Container contentPane = getContentPane();<br> final JPopupMenu popup = new JPopupMenu();<br> <br> popup.add(new JMenuItem("item one"));<br> popup.add(new JMenuItem("item two"));<br> popup.add(new JMenuItem("item three"));<br> popup.add(new JMenuItem("item four"));</p> <p> popup.addPopupMenuListener(new PopupMenuListener() {<br> public void popupMenuCanceled(PopupMenuEvent e) {<br> showStatus("menu canceled");<br> }<br> public void popupMenuWillBecomeVisible(<br> PopupMenuEvent e) {<br> showStatus("menu will become visible");<br> }<br> public void popupMenuWillBecomeInvisible(<br> PopupMenuEvent e) {<br> showStatus("menu will become invisible");<br> }<br> });<br> addMouseListener(new MouseAdapter() {<br> public void mousePressed (MouseEvent e) { <br> popup.show(contentPane, e.getX(), e.getY());<br> }<br> });<br> }<br> }</p> <hr size="1" noshade> <p> 10.8.6 JPopupMenu类总结</p> <p> </p> <p align="center"><b>例10-20 为弹出式菜单设置位置、边框和调用者</b></p> <hr noshade size="1"> import javax.swing.*;<br> import java.awt.*;<br> import java.awt.event.*;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -