JToolBar没有显示

时间:2012-03-03 21:58:30

标签: java swing jmenu jtoolbar

我有一个简单的绘图应用程序。我需要在左侧添加一个菜单和一个工具栏。 所以现在,我正在创建一个扩展JFrame的简单类,而不是使用简单的JFrame。我能够在线添加一些示例菜单,但无法弄清楚如何添加JToolBar。我尝试了几种不同的方法,但没有任何作用。我没有得到错误,一切都很顺利,但我没有看到任何JToolBar。 这是我的JFrame的代码,我希望你能提供帮助。

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.");
    }
}
}

2 个答案:

答案 0 :(得分:6)

它的工作正常,你不需要setVisible工具栏,因为它默认显示,也不要在同一个地方添加工具栏两次(NORTH)

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.");
        }
    }

}

答案 1 :(得分: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被Container对象替换了......

谢谢你们!你的回答帮助我解决了我的问题。