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 ツールバーはデフォルトで表示されるため、同じ場所 (北) にツールバーを 2 回追加する必要はありません。

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 に答える