0

我有一个简单的绘图应用程序。我需要在左侧添加一个菜单和一个工具栏。所以现在,我没有使用简单的 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.");
    }
}
}
4

2 回答 2

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

}
于 2012-03-03T22:18:16.687 回答
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 对象取代了......

多谢你们!你的回答帮助我弄清楚了我的问题。

于 2012-03-05T02:26:01.247 回答