2012-03-03 2 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. Вместо этого пусть менеджеры макетов сделают это за вас. –

ответ

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 ...

Спасибо, ребята! Ваши ответы помогли мне разобраться в моей проблеме.

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

спасибо, ребята! ваши ответы помогли мне понять, что может возникнуть проблема в том, как я создавал свое меню JFrame (у меня была вспомогательная функция, которая заменила содержимое) К сожалению, я не могу отметить этот вопрос как ответ, потому что я n00b, но спасибо! – Eric

+0

@ Эрик: да, вы можете отметить это как «ответили», но вам, возможно, придется подождать несколько минут, чтобы сделать это. Пожалуйста, вернитесь немного и проверьте это как ответ. 1+ голосовать от меня. –

Смежные вопросы