2012-03-03 20 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