Java 右鍵彈出式菜單

來源:互聯網
上載者:User

Java swing 的右鍵彈出式菜單,一下是一個樣本,實現了文字框的複製、粘貼、剪下。

 

 

 

import java.awt.datatransfer.Clipboard;<br />import java.awt.datatransfer.DataFlavor;<br />import java.awt.datatransfer.Transferable;<br />import java.awt.event.ActionEvent;<br />import java.awt.event.ActionListener;<br />import java.awt.event.InputEvent;<br />import java.awt.event.MouseEvent;<br />import java.awt.event.MouseListener;</p><p>import javax.swing.JFrame;<br />import javax.swing.JMenuItem;<br />import javax.swing.JPopupMenu;<br />import javax.swing.JScrollPane;<br />import javax.swing.JTextArea;<br />import javax.swing.KeyStroke;<br />import javax.swing.UIManager;</p><p>/**<br />* Java右鍵菜單實現文本組件內容的的複製、粘貼、剪下功能<br />*<br />*/</p><p>public class Test extends JFrame {</p><p>private static final long serialVersionUID = -5942087991012920147L;</p><p>private JScrollPane pane = null;</p><p>private TextAreaMenu text = null;</p><p>public Test() {<br /> super("右鍵菜單");<br /> try { // 使用Windows的介面風格<br /> UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");<br /> } catch (Exception e) {<br /> e.printStackTrace();<br /> }<br /> text = new TextAreaMenu();<br /> pane = new JScrollPane(text);<br /> this.getContentPane().add(pane);<br /> this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br /> this.setSize(300, 200);<br /> this.setVisible(true);<br />}</p><p>public static void main(String args[]) {<br /> new Test();<br />}</p><p>/**<br />* 帶有功能菜單的JTextArea<br />*<br />*/<br />class TextAreaMenu extends JTextArea implements MouseListener {</p><p> private static final long serialVersionUID = -2308615404205560110L;</p><p> private JPopupMenu pop = null; // 快顯功能表</p><p> private JMenuItem copy = null, paste = null, cut = null; // 三個功能菜單</p><p> public TextAreaMenu() {<br /> super();<br /> init();<br /> }</p><p> private void init() {<br /> this.addMouseListener(this);<br /> pop = new JPopupMenu();<br /> pop.add(copy = new JMenuItem("複製"));<br /> pop.add(paste = new JMenuItem("粘貼"));<br /> pop.add(cut = new JMenuItem("剪下"));<br /> copy.setAccelerator(KeyStroke.getKeyStroke('C', InputEvent.CTRL_MASK));<br /> paste.setAccelerator(KeyStroke.getKeyStroke('V', InputEvent.CTRL_MASK));<br /> cut.setAccelerator(KeyStroke.getKeyStroke('X', InputEvent.CTRL_MASK));<br /> copy.addActionListener(new ActionListener() {<br /> public void actionPerformed(ActionEvent e) {<br /> action(e);<br /> }<br /> });<br /> paste.addActionListener(new ActionListener() {<br /> public void actionPerformed(ActionEvent e) {<br /> action(e);<br /> }<br /> });<br /> cut.addActionListener(new ActionListener() {<br /> public void actionPerformed(ActionEvent e) {<br /> action(e);<br /> }<br /> });<br /> this.add(pop);<br /> }</p><p> /**<br /> * 菜單動作<br /> * @param e<br /> */<br /> public void action(ActionEvent e) {<br /> String str = e.getActionCommand();<br /> if (str.equals(copy.getText())) { // 複製<br /> this.copy();<br /> } else if (str.equals(paste.getText())) { // 粘貼<br /> this.paste();<br /> } else if (str.equals(cut.getText())) { // 剪下<br /> this.cut();<br /> }<br /> }</p><p> public JPopupMenu getPop() {<br /> return pop;<br /> }</p><p> public void setPop(JPopupMenu pop) {<br /> this.pop = pop;<br /> }</p><p> /**<br /> * 剪下板中是否有文本資料可供粘貼<br /> *<br /> * @return true為有文本資料<br /> */<br /> public boolean isClipboardString() {<br /> boolean b = false;<br /> Clipboard clipboard = this.getToolkit().getSystemClipboard();<br /> Transferable content = clipboard.getContents(this);<br /> try {<br /> if (content.getTransferData(DataFlavor.stringFlavor) instanceof String) {<br /> b = true;<br /> }<br /> } catch (Exception e) {<br /> }<br /> return b;<br /> }</p><p> /**<br /> * 文本組件中是否具備複製的條件<br /> *<br /> * @return true為具備<br /> */<br /> public boolean isCanCopy() {<br /> boolean b = false;<br /> int start = this.getSelectionStart();<br /> int end = this.getSelectionEnd();<br /> if (start != end)<br /> b = true;<br /> return b;<br /> }</p><p> public void mouseClicked(MouseEvent e) {<br /> }</p><p> public void mouseEntered(MouseEvent e) {<br /> }</p><p> public void mouseExited(MouseEvent e) {<br /> }</p><p> public void mousePressed(MouseEvent e) {<br /> if (e.getButton() == MouseEvent.BUTTON3) {<br /> copy.setEnabled(isCanCopy());<br /> paste.setEnabled(isClipboardString());<br /> cut.setEnabled(isCanCopy());<br /> pop.show(this, e.getX(), e.getY());<br /> }<br /> }</p><p> public void mouseReleased(MouseEvent e) {<br /> }</p><p>}</p><p>}<br />

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.