2012-03-03 91 views
0

我有一個簡單的繪圖應用程序。我需要在左側添加一個菜單和一個工具欄。 因此,現在,我正在創建一個擴展JFrame的簡單類,而不是使用簡單的JFrame。我可以在線添加一些例子的菜單,但無法弄清楚如何添加JToolBar。我嘗試了幾種不同的方式,但沒有任何效果。我沒有得到一個錯誤,一切順利,但我沒有看到任何JToolBar。 這裏是我的JFrame的代碼,我希望你能幫上忙。JToolBar沒有顯示

class Menu extends JFrame { 
private JMenuItem openItem; 
private JMenuItem saveItem; 
private JMenuItem saveAsItem; 

public Menu(String title) { 

    openItem = new JMenuItem("Open..."); 
    openItem.setMnemonic('O'); 
    openItem.setAccelerator(KeyStroke.getKeyStroke("control O")); 

    saveItem = new JMenuItem("Save"); 
    saveItem.setMnemonic('S'); 
    saveItem.setAccelerator(KeyStroke.getKeyStroke("control S")); 

    saveAsItem = new JMenuItem("Save As..."); 
    saveAsItem.setMnemonic('S'); 
    saveAsItem.setAccelerator(KeyStroke.getKeyStroke("control S")); 

    // (2) Build menubar, menus, and add menuitems. 
    JMenuBar menubar = new JMenuBar(); 
    JMenu fileMenu = new JMenu("File"); 
    fileMenu.setMnemonic('F'); 
    menubar.add(fileMenu); 
    fileMenu.add(openItem); 
    fileMenu.addSeparator(); 
    fileMenu.add(saveItem); 

    // (3) Add listeners to menu items 
    openItem.addActionListener(new OpenAction()); // TODO change 

    setJMenuBar(menubar); 

    JToolBar toolbar = new JToolBar("Toolbar", JToolBar.VERTICAL);//); 
//  JPanel panel = new JPanel(); 
//  panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); 
    JButton newb = new JButton("new"); 
    toolbar.add(newb); 
//  toolbar.setOpaque(true); 
    toolbar.setLocation(100, 100); 
    toolbar.setVisible(true); 
//  toolbar.setMinimumSize(new Dimension(100, 100)); 
//  toolbar.setAlignmentX(0); 

//  panel.add(toolbar); 
    add(toolbar, BorderLayout.NORTH); 
    getContentPane().add(toolbar, BorderLayout.NORTH); 
//  getRootPane().setWindowDecorationStyle(JRootPane.PLAIN_DIALOG); 

    setTitle(title); 

    pack(); 
    setLocationRelativeTo(null); // Center window. 
} 

// OpenAction 
class OpenAction implements ActionListener { 
    public void actionPerformed(ActionEvent e) { 
     JOptionPane.showMessageDialog(Menu.this, "Can't Open."); 
    } 
} 
} 
+1

JToolBar爲我顯示這個代碼。但不要設置JToolBar的位置。相反,讓佈局經理爲你做。 – 2012-03-03 22:04:11

回答

0

我的問題是,我是我實例化我的JFrame的方式。我使用的是輔助函數像這樣的:

public static JFrame openInJFrame(Container content, int width, int height, 
     String title, Color bgColor) { 

    // ... 
    frame.setContentPane(content);  

    frame.setVisible(true); 
    return (frame); 
} 

所以我JToolBar中漸漸由容器對象換成...

謝謝你們!你的回答幫我弄清了我的問題。

6

它的工作很好,你不需要調用setVisible工具欄,因爲它表現在默認情況下,也不會在同一個地方添加工具欄兩個時間(北)

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class MenuDemo { 
    public static void main(String... args) { 
     EventQueue.invokeLater(
      new Runnable() { 
       @Override 
       public void run() { 
        JFrame menu = new Menu("Testing"); 
        menu.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        menu.setVisible(true); 
       } 
      } 
     ); 
    } 
} 

class Menu extends JFrame { 
    private JMenuItem openItem; 
    private JMenuItem saveItem; 
    private JMenuItem saveAsItem; 

    public Menu(String title) { 

     openItem = new JMenuItem("Open..."); 
     openItem.setMnemonic('O'); 
     openItem.setAccelerator(KeyStroke.getKeyStroke("control O")); 

     saveItem = new JMenuItem("Save"); 
     saveItem.setMnemonic('S'); 
     saveItem.setAccelerator(KeyStroke.getKeyStroke("control S")); 

     saveAsItem = new JMenuItem("Save As..."); 
     saveAsItem.setMnemonic('S'); 
     saveAsItem.setAccelerator(KeyStroke.getKeyStroke("control S")); 

     // (2) Build menubar, menus, and add menuitems. 
     JMenuBar menubar = new JMenuBar(); 
     JMenu fileMenu = new JMenu("File"); 
     fileMenu.setMnemonic('F'); 
     menubar.add(fileMenu); 
     fileMenu.add(openItem); 
     fileMenu.addSeparator(); 
     fileMenu.add(saveItem); 

     // (3) Add listeners to menu items 
     openItem.addActionListener(new OpenAction()); // TODO change 

     setJMenuBar(menubar); 

     JToolBar toolbar = new JToolBar("Toolbar", JToolBar.VERTICAL);//); 

     JButton newb = new JButton("new"); 
     toolbar.add(newb); 

     add(toolbar, BorderLayout.NORTH); 
     setTitle(title); 
     setLocationRelativeTo(null); 
     pack(); 
    } 

    // OpenAction 
    private class OpenAction implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      JOptionPane.showMessageDialog(Menu.this, "Can't Open."); 
     } 
    } 

} 
+0

謝謝你們!你的答案幫助我弄清楚,可能問題出在我實例化我的Menu JFrame的方式(我有一個幫助函數取代了內容) 可悲的是我不能將這個問題標記爲答案,因爲我是n00b,但是謝謝! – Eric 2012-03-03 22:23:02

+0

@Eric:是的,您可以將其標記爲「已回答」,但您可能需要等待幾分鐘才能完成。請回來一點,並檢查這是一個答案。 1+投給我。 – 2012-03-03 23:16:19