2012-03-03 7 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을 인스턴스화하는 방식이었습니다. 나는이 같은 도우미 함수를 사용했다 : 그래서 내 JToolBar의이 컨테이너 객체로 대체하기되었다

public static JFrame openInJFrame(Container content, int width, int height, 
     String title, Color bgColor) { 

    // ... 
    frame.setContentPane(content);  

    frame.setVisible(true); 
    return (frame); 
} 

...

감사들! 당신의 대답이 내 문제를 파악하는 데 도움이되었습니다.

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

} 
+0

고마워! 당신의 대답은 내가 문제를 내 Menu JFrame을 인스턴스화하는 방식으로 이해할 수있게 도와 주었다. (나는 콘텐츠를 대체하는 헬퍼 함수를 ​​가졌다.) 슬프게도 나는 n00b이기 때문에 슬프게도이 질문을 대답으로 표시 할 수 없다. – Eric

+0

@ Eric : 예, 이것을 "대답"이라고 표시 할 수 있지만 그렇게하기까지 몇 분 정도 기다려야 할 수도 있습니다. 잠시 후에 다시 대답 해주십시오. 나에게서 1 + 표. –