2015-10-15 1 views
0

J'ai suivi ce tutoriel:
Java toolbar tutorial
Cependant quand j'ai essayé d'insérer une barre d'outils dans l'interface graphique, il ne se présente pas. Quelqu'un peut-il me donner des conseils sur ce qu'il faut faire? Le code à ce jour est le suivant:barre d'outils Java (swing) ne pas montrer

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

J'ai aussi vérifié stackoverflow et recherches Google, mais je ceux que j'ai vu étaient soit pour Android et/ou je peux comprendre. Quelques conseils seraient grandement appréciés. Je vous remercie.

Répondre

1

Vous avez changé la mise en page après la création et l'ajout du JToolBarGroupLayout - ne me lancez pas sur ce choix)

Donc, si nous changeons createLayout il crée un composant secondaire, quelque chose comme. ..

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(); 
} 

Il affichera maintenant quelque chose comme ...

Frame

Parce que votre contenu et le JToolBar doivent vivre dans contentPane, vous devez être conscient de toutes les modifications que vous apportez. Cette solution fait un volet secondaire, sur lequel vous pouvez placer le contenu "principal", de la manière que vous voulez, mais qui est ensuite ajouté au contentPane qui utilise toujours un BorderLayout