【问题标题】:JToolBar not showingJToolBar 不显示
【发布时间】:2012-03-03 21:58:30
【问题描述】:

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

【问题讨论】:

  • JToolBar 用这段代码显示给我。但不要设置 JToolBar 的位置。而是让布局管理器为您执行此操作。

标签: java swing jmenu jtoolbar


【解决方案1】:

它工作正常,你不需要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.");
        }
    }

}

【讨论】:

  • 谢谢大家!您的回答帮助我弄清楚,可能问题出在我实例化 Menu JFrame 的方式上(我有一个替换内容的辅助函数)遗憾的是,我无法将此问题标记为已回答,因为我是 n00b,但谢谢!跨度>
  • @Eric:是的,您可以将其标记为“已回答”,但您可能需要等待几分钟才能这样做。请稍后再回来检查这个作为答案。 1+ 来自我的投票。
【解决方案2】:

我的问题是我实例化 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 对象替换了...

谢谢各位!您的回答帮助我解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    相关资源
    最近更新 更多