2015-10-15 22 views
0

我一直在关注这个教程:
Java toolbar tutorial
然而,当我试图插入一个工具栏,图形用户界面,它不会显示出来。有人可以给我建议做什么?到目前为止的代码是这样的:的Java(秋千)工具栏没有显示

import javax.swing.Box; 
import java.awt.Container; 
import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.GroupLayout; 
import javax.swing.JButton; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import java.awt.event.KeyEvent; 
import javax.swing.ImageIcon; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 
import javax.swing.AbstractAction; 
import static javax.swing.Action.MNEMONIC_KEY; 
import static javax.swing.Action.SMALL_ICON; 
import static javax.swing.JFrame.EXIT_ON_CLOSE; 
import javax.swing.KeyStroke; 
import java.awt.BorderLayout; 
import java.awt.event.ItemEvent; 
import java.awt.event.ItemListener; 
import javax.swing.BorderFactory; 
import javax.swing.JCheckBoxMenuItem; 
import javax.swing.JLabel; 
import javax.swing.JToolBar; 

public class gui extends JFrame { 

private JLabel statusbar; 

public gui() { 

    initUI(); 
} 

private void initUI() { 

    createMenuBar(); 
    createToolBar(); 

    statusbar = new JLabel("Ready"); 
    statusbar.setBorder 

(BorderFactory.createEtchedBorder()); 
    add(statusbar, BorderLayout.SOUTH); 

    JButton quitButton = new JButton("Quit"); 
    quitButton.setToolTipText("A button component"); 

    quitButton.addActionListener(new ActionListener() 

{ 
     @Override 
     public void actionPerformed(ActionEvent event) 

{ 
      System.exit(0); 
     } 
    }); 

    quitButton.setMnemonic(KeyEvent.VK_B); 

    createLayout(quitButton); 

    setTitle("Typing Tutor"); 
    setSize(360, 250); 
    setLocationRelativeTo(null); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
} 

private void createMenuBar() { 

    JMenuBar menubar = new JMenuBar(); 

    ImageIcon iconNew = new ImageIcon("new.png"); 
    ImageIcon iconOpen = new ImageIcon("open.png"); 
    ImageIcon iconSave = new ImageIcon("save.png"); 
    ImageIcon iconExit = new ImageIcon("exit.png"); 

    JMenu fileMenu = new JMenu("File"); 
    fileMenu.setMnemonic(KeyEvent.VK_F); 

    // Old code 

    JMenu impMenu = new JMenu("Import"); 
    fileMenu.setMnemonic(KeyEvent.VK_I); 

    JMenuItem newsfMi = new JMenuItem("Import newsfeed list..."); 
    JMenuItem bookmMi = new JMenuItem("Import bookmarks..."); 
    JMenuItem mailMi = new JMenuItem("Import mail..."); 

    impMenu.add(newsfMi); 
    impMenu.add(bookmMi); 
    impMenu.add(mailMi); 

    JMenuItem newMi = new JMenuItem("New", iconNew); 
    JMenuItem openMi = new JMenuItem("Open", iconOpen); 
    JMenuItem saveMi = new JMenuItem("Save", iconSave); 

    JMenuItem exitMi = new JMenuItem("Exit", iconExit); 
    exitMi.setMnemonic(KeyEvent.VK_E); 
    exitMi.setToolTipText("Exit application"); 
    exitMi.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent event) 

    { 
       System.exit(0); 
      } 
     }); 

     // New code 

     JMenu viewMenu = new JMenu("View"); 
     viewMenu.setMnemonic(KeyEvent.VK_V); 

     JCheckBoxMenuItem sbarMi = new JCheckBoxMenuItem 

("Show status bar"); 
     sbarMi.setMnemonic(KeyEvent.VK_S); 
     sbarMi.setDisplayedMnemonicIndex(5); 
     sbarMi.setSelected(true); 

     sbarMi.addItemListener(new ItemListener() { 

      @Override 
      public void itemStateChanged(ItemEvent e) { 

       if (e.getStateChange() == 

ItemEvent.SELECTED) { 
        statusbar.setVisible(true); 
       } else { 
        statusbar.setVisible(false); 
       } 

      } 

     }); 

     // Newer code 
     JMenu helpMenu = new JMenu("Help"); 


     viewMenu.add(sbarMi); 
     fileMenu.add(newMi); 
     fileMenu.add(openMi); 
     fileMenu.add(saveMi); 
     fileMenu.addSeparator(); 
     fileMenu.add(impMenu); 
     fileMenu.addSeparator(); 
     fileMenu.add(exitMi); 


     menubar.add(fileMenu); 
     menubar.add(viewMenu); 
     menubar.add(Box.createHorizontalGlue()); 
     menubar.add(helpMenu); 

     setJMenuBar(menubar); 
    } 

private void createToolBar() { 

     JToolBar toolbar = new JToolBar(); 

     ImageIcon icon = new ImageIcon("exit.png"); 

     JButton exitButton = new JButton(icon); 
     toolbar.add(exitButton); 

     exitButton.addActionListener(new ActionListener() 

{ 
      @Override 
      public void actionPerformed(ActionEvent event) 

{ 
       System.exit(0); 
      } 
     }); 

     add(toolbar, BorderLayout.NORTH);   
    } 

    private void createLayout(JComponent... arg) { 

     Container pane = getContentPane(); 
     GroupLayout gl = new GroupLayout(pane); 
     pane.setLayout(gl); 

     gl.setAutoCreateContainerGaps(true); 

     gl.setHorizontalGroup(gl.createSequentialGroup() 
       .addComponent(arg[0]) 
     ); 

     gl.setVerticalGroup(gl.createSequentialGroup() 
       .addComponent(arg[0]) 
     ); 

     pack(); 
    } 

    public static void main(String[] args) { 

     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       gui ex = new gui(); 
       ex.setVisible(true); 
      } 
     }); 
    } 
} 

我还检查了计算器和谷歌搜索,但我是我见过的那些要么Android和/或我能理解。一些建议将不胜感激。谢谢。

回答

1

你已经修改了配置后,创建并添加JToolBar(以GroupLayout - 不要让我开始对这个选择)

因此,如果我们改变createLayout所以它创建了一个次要成分,有点像。 ..

private void createLayout(JComponent... arg) { 

    JPanel pane = new JPanel(); 
    //Container pane = getContentPane(); 
    GroupLayout gl = new GroupLayout(pane); 
    pane.setLayout(gl); 

    gl.setAutoCreateContainerGaps(true); 

    gl.setHorizontalGroup(gl.createSequentialGroup() 
        .addComponent(arg[0]) 
    ); 

    gl.setVerticalGroup(gl.createSequentialGroup() 
        .addComponent(arg[0]) 
    ); 

    add(pane); 

    pack(); 
} 

现在会显示类似...

Frame

因为您的内容和JToolBar需要住在contentPane之内,所以您需要对您所做的任何更改有所了解。这种解决方案使您可以以任何您想要的方式在其上放置“主要”内容的次要窗格,然后将其添加到contentPane,该窗口仍在使用BorderLayout