2013-11-15 38 views
-3

有沒有人有任何示例代碼來製作可拖動菜單?Java - 如何創建可移動菜單

我是新來的Java和我想找到一種方法來使鼠標可拖動的菜單。就像很多程序一樣。您可以在屏幕上拖動頂部菜單欄,以便將其放置在其他位置。我認爲Java也可以做到這一點,因爲我看到一些我認爲用Java編寫的應用程序可以做到這一點。

問題:如何在Java中的JFrame中創建可拖動的菜單?

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.KeyEvent; 

import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 
import javax.swing.SwingUtilities; 

public class MyExample extends JFrame { 

    public MyExample() { 
     initUI(); 
    } 

    public final void initUI() { 

     JMenuBar menubar = new JMenuBar(); 

     JMenu file = new JMenu("File"); 
     file.setMnemonic(KeyEvent.VK_F); 

     JMenuItem eMenuItem = new JMenuItem("Exit"); 
     eMenuItem.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent event) { 
       System.exit(0); //exit the system 
      } 
     }); 

     file.add(eMenuItem); 
     menubar.add(file); 
     setJMenuBar(menubar); 

     setTitle("My Menu"); 
     setSize(300, 100); 
     setLocationRelativeTo(); //I tried draggable 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 

    public static void main(String[] args) { 
       MyExample e = new MyExample(); 
       e.setVisible(true); 
    } 
} 

我希望能夠從JFrame的頂部拖動菜單到另一個位置窗外,並離開那裏。我已經使用了工具欄,但工作良好,但我試圖看看是否可以用菜單完成。如果您查看任何軟件應用程序,則通常位於文件位置旁邊的可抓取區域。這可以單擊並拖動該區域。下面

class myListenerOne implements ActionListener { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     System.out.println("Action Class Listener 1"); 
     System.exit(0); 
    } 
} 

class myListenerTwo implements ActionListener { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     System.out.println("Action Class Listener 2"); 
     System.exit(0); 
    } 
} 

class myListenerThree implements ActionListener { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     System.out.println("Action Class Listener 3"); 
     System.exit(0); 
    } 
} 

這裏

ImageIcon icon = new ImageIcon(getClass().getResource("10cd.jpg")); 
    JMenu file1 = new JMenu("File"); 
    file1.setMnemonic(KeyEvent.VK_F); 
    JMenu file2 = new JMenu("Open"); 
    file2.setMnemonic(KeyEvent.VK_F); 
    JMenu file3 = new JMenu("A"); 
    file3.setMnemonic(KeyEvent.VK_F); 
    JMenu file4 = new JMenu("B"); 
    file4.setMnemonic(KeyEvent.VK_F); 
    JMenu file5 = new JMenu("C"); 
    file5.setMnemonic(KeyEvent.VK_F); 
    JMenu file6 = new JMenu("D"); 
    file6.setMnemonic(KeyEvent.VK_F); 

    JMenuItem eMenuItem1a = new JMenuItem("File 1"/*, icon*///); 
    /*eMenuItem1a.setMnemonic(KeyEvent.VK_E); 
    eMenuItem1a.setToolTipText("Exit application"); 

    JMenuItem eMenuItem1b = new JMenuItem("File 2"/*, icon*///); 
/* eMenuItem1b.setMnemonic(KeyEvent.VK_E); 
    eMenuItem1b.setToolTipText("Exit application"); 

    JMenuItem eMenuItem1c = new JMenuItem("File 3"/*, icon*///); 
/* eMenuItem1c.setMnemonic(KeyEvent.VK_E); 
    eMenuItem1c.setToolTipText("Exit application"); 

    JMenuItem eMenuItem2 = new JMenuItem("Exit"/*, icon*///); 
/* eMenuItem2.setMnemonic(KeyEvent.VK_E); 
    eMenuItem2.setToolTipText("Exit application"); 

    JMenuItem eMenuItem3 = new JMenuItem("Exit"/*, icon*///); 
    /*eMenuItem3.setMnemonic(KeyEvent.VK_E); 
    eMenuItem3.setToolTipText("Exit application"); 

    JMenuItem eMenuItem4 = new JMenuItem("Exit"/*, icon*///); 
    /*eMenuItem4.setMnemonic(KeyEvent.VK_E); 
    eMenuItem4.setToolTipText("Exit application"); 

    eMenuItem1a.addActionListener(new myListenerOne()); 
    eMenuItem1b.addActionListener(new myListenerTwo()); 
    eMenuItem1c.addActionListener(new myListenerThree()); 
    eMenuItem2.addActionListener(new myListenerOne()); 
    eMenuItem3.addActionListener(new myListenerTwo()); 
    eMenuItem4.addActionListener(new myListenerThree()); 

    file1.add(eMenuItem1a); 
    file1.add(eMenuItem1b); 
    file1.add(eMenuItem1c); 
    file2.add(eMenuItem2); 
    file3.add(eMenuItem3); 
    file4.add(eMenuItem4); 

    menubar.add(file1); 
    menubar.add(file2); 
    menubar.add(file3); 
    menubar.add(file4); 
    menubar.add(file5); 
    menubar.add(file6); 

    setJMenuBar(menubar); 

//的ActionListeners是另一個菜單的例子,我忘了今天早上包含。生病了,只是沒有想到它實際上。無論如何,我想知道的是如果菜單可以設置爲可移動菜單,以便當您單擊並拖動它時,它可以移動到框架中的任何位置。我已經看到這個我已經使用的一些Java應用程序完成,但只是沒有看到它在一段時間。

import javax.swing.JToolBar; 
import javax.swing.JButton; 
import javax.swing.ImageIcon; 

import javax.swing.JFrame; 
import javax.swing.JTextArea; 
import javax.swing.JScrollPane; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 
import javax.swing.UIManager; 

import java.net.URL; 

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

public class ToolBarDemo extends JPanel 
         implements ActionListener { 
    protected JTextArea textArea; 
    protected String newline = "\n"; 
    static final private String PREVIOUS = "previous"; 
    static final private String UP = "up"; 
    static final private String NEXT = "next"; 

    public ToolBarDemo() { 
     super(new BorderLayout()); 

     //Create the toolbar. 
     JToolBar toolBar = new JToolBar("Still draggable"); 
     addButtons(toolBar); 

     //Create the text area used for output. Request 
     //enough space for 5 rows and 30 columns. 
     textArea = new JTextArea(5, 30); 
     textArea.setEditable(false); 
     JScrollPane scrollPane = new JScrollPane(textArea); 

     //Lay out the main panel. 
     setPreferredSize(new Dimension(450, 130)); 
     add(toolBar, BorderLayout.PAGE_START); 
     add(scrollPane, BorderLayout.CENTER); 
    } 

    protected void addButtons(JToolBar toolBar) { 
     JButton button = null; 

     //first button 
     button = makeNavigationButton("Back24", PREVIOUS, 
             "Back to previous something-or-other", 
             "Previous"); 
     toolBar.add(button); 

     //second button 
     button = makeNavigationButton("Up24", UP, 
             "Up to something-or-other", 
             "Up"); 
     toolBar.add(button); 

     //third button 
     button = makeNavigationButton("Forward24", NEXT, 
             "Forward to something-or-other", 
             "Next"); 
     toolBar.add(button); 
    } 

    protected JButton makeNavigationButton(String imageName, 
              String actionCommand, 
              String toolTipText, 
              String altText) { 
     //Look for the image. 
     String imgLocation = imageName + ".gif"; 
     URL imageURL = ToolBarDemo.class.getResource(imgLocation); 

     //Create and initialize the button. 
     JButton button = new JButton(); 
     button.setActionCommand(actionCommand); 
     button.setToolTipText(toolTipText); 
     button.addActionListener(this); 

     if (imageURL != null) {      //image found 
      button.setIcon(new ImageIcon(imageURL, altText)); 
     } else {          //no image found 
      button.setText(altText); 
      System.err.println("Resource not found: " 
           + imgLocation); 
     } 

     return button; 
    } 

    public void actionPerformed(ActionEvent e) { 
     String cmd = e.getActionCommand(); 
     String description = null; 

     // Handle each button. 
     if (PREVIOUS.equals(cmd)) { //first button clicked 
      description = "taken you to the previous <something>."; 
     } else if (UP.equals(cmd)) { // second button clicked 
      description = "taken you up one level to <something>."; 
     } else if (NEXT.equals(cmd)) { // third button clicked 
      description = "taken you to the next <something>."; 
     } 

     displayResult("If this were a real app, it would have " 
         + description); 
    } 

    protected void displayResult(String actionDescription) { 
     textArea.append(actionDescription + newline); 
     textArea.setCaretPosition(textArea.getDocument().getLength()); 
    } 

    /** 
    * Create the GUI and show it. For thread safety, 
    * this method should be invoked from the 
    * event dispatch thread. 
    */ 
    private static void createAndShowGUI() { 
     //Create and set up the window. 
     JFrame frame = new JFrame("Doug's Test ToolBarDemo!!!!"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     //Add content to the window. 
     frame.add(new ToolBarDemo()); 

     //Display the window. 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     //Schedule a job for the event dispatch thread: 
     //creating and showing this application's GUI. 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       //Turn off metal's use of bold fonts 
      UIManager.put("swing.boldMetal", Boolean.FALSE); 
      createAndShowGUI(); 
      } 
     }); 
    } 
} 

以下代碼將JToolBar添加到框架。我喜歡這個,因爲它是可拖動的,但看起來不同於普通菜單。如果您可以將菜單設置爲可拖動,則我更感興趣。

+1

爲什麼你不能使用JToolBar? JMenu給你一個JToolbar不能做什麼? – Dodd10x

+0

我認爲JMenu看起來有點不同。我忘了粘貼代碼開始並失去聲望點。這是否可以改變,以及如何去做。 –

+0

問題已編輯。忘記了開始的代碼。 –

回答