2012-08-28 43 views
2

我的java接口有問題,我想顯示一個菜單欄和工具欄以及一些標籤和文本框,但是每次使用gridbaglayout時都沒有顯示我的標籤作爲我的文本字段,它只顯示我的菜單欄和工具欄可以幫助我與這一個,我搜索先生(谷歌)關於這個問題,但無法找到一個體面的解決方案與我的問題,我只是新手在Java和我希望Java可以作爲我的編程語言在我的下一個項目中使用。工具欄和菜單欄的網格包佈局

這裏是我的代碼:

package Forms; 
import javax.swing.*; 
import java.awt.*; 
public class CompleteGridLayout { 
    static JFrame frame; 
    static JPanel panel, panelData; 
    static JMenuBar menuBar; 
    static JMenu menuFile, menuSetting, menuOption; 
    static JMenuItem itemNew, itemOpen, itemSave, itemPrint, itemOption, itemClose, itemView, itemReports; 
    static JToolBar toolBar; 
    static Icon iconMenu; 
    static JButton barSave, barEdit, barClear, barDelete; 
    static ButtonGroup group; 
    static JRadioButtonMenuItem subFont1, subFont2, subFont3, subFont4, subFont5; 
    static JCheckBoxMenuItem checkPrefer; 
    static JLabel label; 
    static JTextField textFirst, textMiddle, textLast; 
    static JCheckBox checkGender; 

    public static void main(String[] args) 
    { 
     SwingUtilities.invokeLater(new Runnable(){ 
      public void run() 
      { 
       gui(); 
      } 
     }); 
    } 
    public static void gui() 
    { 

     frame = new JFrame("Complete GridBag Layout Interface"); 
     //frame.setResizable(false); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(300, 300); 

     panel = new JPanel(); 
     panel.setLayout(new GridBagLayout()); 
     frame.getContentPane().add(panel); 
     CompleteGridLayout myMenu = new CompleteGridLayout(); 
     myMenu.MyMenuBar(); 
     myMenu.MyToolBar(); 

     GridBagConstraints bag = new GridBagConstraints(); 
     bag.anchor = GridBagConstraints.CENTER; 
     bag.gridx = 0; 
     bag.gridy = 3; 
     panel.add(dataPanel(), bag); 


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

    public static JPanel dataPanel() 
    { 

     panelData = new JPanel(); 
     label = new JLabel("First Name: "); 
     textFirst = new JTextField(10); 
     panelData.setLayout(new GridBagLayout()); 
     GridBagConstraints bagData = new GridBagConstraints(); 
     int i = 0; 
     bagData.gridx = 1; 
     bagData.gridy = i; 
     bagData.gridwidth = 2; 
     bagData.fill = GridBagConstraints.HORIZONTAL; 
     panelData.add(textFirst, bagData); 

     bagData.gridx = 0; 
     bagData.gridy = i; 
     bagData.gridwidth = 1; 
     bagData.fill = GridBagConstraints.NONE; 
     panelData.add(label, bagData); 
     i++; 
     return panelData; 
    } 

    public void MyToolBar() 
    { 

     toolBar = new JToolBar(JToolBar.HORIZONTAL); 
     frame.add(toolBar); 


     iconMenu = new ImageIcon(getClass().getResource("icons/save-bar.png")); 
     barSave = new JButton("Save", iconMenu); 
     toolBar.add(barSave); 

     iconMenu = new ImageIcon(getClass().getResource("icons/edit-bar.png")); 
     barEdit = new JButton("Edit", iconMenu); 
     toolBar.add(barEdit); 

     iconMenu = new ImageIcon(getClass().getResource("icons/clear-bar.png")); 
     barClear = new JButton("Clear", iconMenu); 
     toolBar.add(barClear); 

     iconMenu = new ImageIcon(getClass().getResource("icons/delete-bar.png")); 
     barDelete = new JButton("Delete", iconMenu); 
     toolBar.add(barDelete); 
    } 
    public void MyMenuBar() 
    { 
     menuBar = new JMenuBar(); 
     frame.setJMenuBar(menuBar); 

     //Menus 
     menuFile = new JMenu("File"); 
     menuBar.add(menuFile); 

     iconMenu = new ImageIcon(getClass().getResource("icons/new.png")); 
     itemNew = new JMenuItem("New", iconMenu); 
     menuFile.add(itemNew); 

     iconMenu = new ImageIcon(getClass().getResource("icons/open.png")); 
     itemOpen = new JMenuItem("Open", iconMenu); 
     menuFile.add(itemOpen); 

     iconMenu = new ImageIcon(getClass().getResource("icons/save.png")); 
     itemSave = new JMenuItem("Save", iconMenu); 
     menuFile.add(itemSave); 

     menuFile.addSeparator(); 

     iconMenu = new ImageIcon(getClass().getResource("icons/print.png")); 
     itemPrint = new JMenuItem("Print", iconMenu); 
     menuFile.add(itemPrint); 
     menuFile.addSeparator(); 

     menuSetting = new JMenu("Settings"); 
     menuFile.add(menuSetting); 
     group = new ButtonGroup(); 

     subFont1 = new JRadioButtonMenuItem("10 Pixel"); 
     menuSetting.add(subFont1); 
     group.add(subFont1); 

     subFont2 = new JRadioButtonMenuItem("12 Pixel"); 
     menuSetting.add(subFont2); 
     group.add(subFont2); 

     subFont3 = new JRadioButtonMenuItem("14 Pixel"); 
     menuSetting.add(subFont3); 
     group.add(subFont3); 

     subFont4 = new JRadioButtonMenuItem("16 Pixel"); 
     menuSetting.add(subFont4); 
     group.add(subFont4); 

     subFont5 = new JRadioButtonMenuItem("24 Pixel"); 
     menuSetting.add(subFont5); 
     group.add(subFont5); 
     menuSetting.addSeparator(); 

     checkPrefer = new JCheckBoxMenuItem("Preference"); 
     menuSetting.add(checkPrefer); 
     group.add(checkPrefer); 

     iconMenu = new ImageIcon(getClass().getResource("icons/close.png")); 
     itemClose = new JMenuItem("Close", iconMenu); 
     menuFile.add(itemClose); 

     menuOption = new JMenu("Option"); 
     menuBar.add(menuOption); 

     iconMenu = new ImageIcon(getClass().getResource("icons/view.png")); 
     itemView = new JMenuItem("View Users", iconMenu); 
     menuOption.add(itemView); 

     iconMenu = new ImageIcon(getClass().getResource("icons/report.png")); 
     itemReports = new JMenuItem("Reports", iconMenu); 
     menuOption.add(itemReports); 
    } 
} 

通過我只用一個標籤的方式和文本字段僅用於測試目的。

+0

*「我的Java界面有問題」,*換檔鍵似乎也有問題。如果沒有,請在每個句子的開始處使用它,如「I」和課程名稱等。這樣可以使文本更易於閱讀。你不會想讓它變得更難以幫助我們,對吧? –

+0

對不起,對於語法我總是忘記大寫每個第一個字母。 – Zyrax

+1

您可以使用'UIManager'中的圖標使您的示例自成一體,如[此處](http://stackoverflow.com/a/7935040/230513)所示。 – trashgod

回答

2

您也可以使用框架的默認BorderLayout,如下所示。

作爲@Mad的評論,請考慮重新考慮您的代碼以減少instance variables的擴散。

image

import java.awt.*; 
import javax.swing.*; 

public class CompleteGridLayout { 

    static JFrame frame; 
    static JPanel panel, panelData; 
    static JMenuBar menuBar; 
    static JMenu menuFile, menuSetting, menuOption; 
    static JMenuItem itemNew, itemOpen, itemSave, itemPrint, itemOption, itemClose, itemView, itemReports; 
    static JToolBar toolBar; 
    static Icon iconMenu = UIManager.getIcon("html.pendingImage"); 
    static JButton barSave, barEdit, barClear, barDelete; 
    static ButtonGroup group; 
    static JRadioButtonMenuItem subFont1, subFont2, subFont3, subFont4, subFont5; 
    static JCheckBoxMenuItem checkPrefer; 
    static JLabel label; 
    static JTextField textFirst, textMiddle, textLast; 
    static JCheckBox checkGender; 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       gui(); 
      } 
     }); 
    } 

    public static void gui() { 

     frame = new JFrame("Complete GridBag Layout Interface"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(300, 300); 

     CompleteGridLayout myMenu = new CompleteGridLayout(); 
     myMenu.myMenuBar(); 
     myMenu.myToolBar(); 
     frame.setJMenuBar(menuBar); 
     frame.add(dataPanel(), BorderLayout.CENTER); 
     frame.add(toolBar, BorderLayout.SOUTH); 

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

    public static JPanel dataPanel() { 

     panelData = new JPanel(); 
     label = new JLabel("First Name: "); 
     textFirst = new JTextField(10); 
     panelData.setLayout(new GridBagLayout()); 
     GridBagConstraints bagData = new GridBagConstraints(); 
     int i = 0; 
     bagData.gridx = 1; 
     bagData.gridy = i; 
     bagData.gridwidth = 2; 
     bagData.fill = GridBagConstraints.HORIZONTAL; 
     panelData.add(textFirst, bagData); 

     bagData.gridx = 0; 
     bagData.gridy = i; 
     bagData.gridwidth = 1; 
     bagData.fill = GridBagConstraints.NONE; 
     panelData.add(label, bagData); 
     i++; 
     return panelData; 
    } 

    public void myToolBar() { 

     toolBar = new JToolBar(JToolBar.HORIZONTAL); 
     frame.add(toolBar); 


     barSave = new JButton("Save", iconMenu); 
     toolBar.add(barSave); 

     barEdit = new JButton("Edit", iconMenu); 
     toolBar.add(barEdit); 

     barClear = new JButton("Clear", iconMenu); 
     toolBar.add(barClear); 

     barDelete = new JButton("Delete", iconMenu); 
     toolBar.add(barDelete); 
    } 

    public void myMenuBar() { 
     menuBar = new JMenuBar(); 
     frame.setJMenuBar(menuBar); 

     //Menus 
     menuFile = new JMenu("File"); 
     menuBar.add(menuFile); 

     itemNew = new JMenuItem("New", iconMenu); 
     menuFile.add(itemNew); 

     itemOpen = new JMenuItem("Open", iconMenu); 
     menuFile.add(itemOpen); 

     itemSave = new JMenuItem("Save", iconMenu); 
     menuFile.add(itemSave); 

     menuFile.addSeparator(); 

     itemPrint = new JMenuItem("Print", iconMenu); 
     menuFile.add(itemPrint); 
     menuFile.addSeparator(); 

     menuSetting = new JMenu("Settings"); 
     menuFile.add(menuSetting); 
     group = new ButtonGroup(); 

     subFont1 = new JRadioButtonMenuItem("10 Pixel"); 
     menuSetting.add(subFont1); 
     group.add(subFont1); 

     subFont2 = new JRadioButtonMenuItem("12 Pixel"); 
     menuSetting.add(subFont2); 
     group.add(subFont2); 

     subFont3 = new JRadioButtonMenuItem("14 Pixel"); 
     menuSetting.add(subFont3); 
     group.add(subFont3); 

     subFont4 = new JRadioButtonMenuItem("16 Pixel"); 
     menuSetting.add(subFont4); 
     group.add(subFont4); 

     subFont5 = new JRadioButtonMenuItem("24 Pixel"); 
     menuSetting.add(subFont5); 
     group.add(subFont5); 
     menuSetting.addSeparator(); 

     checkPrefer = new JCheckBoxMenuItem("Preference"); 
     menuSetting.add(checkPrefer); 
     group.add(checkPrefer); 

     itemClose = new JMenuItem("Close", iconMenu); 
     menuFile.add(itemClose); 

     menuOption = new JMenu("Option"); 
     menuBar.add(menuOption); 

     itemView = new JMenuItem("View Users", iconMenu); 
     menuOption.add(itemView); 

     itemReports = new JMenuItem("Reports", iconMenu); 
     menuOption.add(itemReports); 
    } 
} 
1

好吧,我返工你的代碼,以便它(至少對我來說)是有道理的......

panel = new JPanel(); 
panel.setLayout(new GridBagLayout()); 
getContentPane().add(panel); 
createMenuBar(); 
// Your problem is here. This will add the toolbar to the contentPane, 
// removing the "panel" that you previously added... 
createToolBar(); 

GridBagConstraints bag = new GridBagConstraints(); 
bag.anchor = GridBagConstraints.CENTER; 
bag.gridx = 0; 
bag.gridy = 3; 
panel.add(dataPanel(), bag); 

這是工具欄

public void createToolBar() { 
    toolBar = new JToolBar(JToolBar.HORIZONTAL); 
    add(toolBar); // This works like getContentPane().add(toolBar); 
+0

是的,因爲我認爲JToolbar就像一個JMenubar它有自己的內容窗格,我認爲「玻璃內容窗格」如果我沒有弄錯,但我錯了我仍然需要爲我的JToolBar創建另一個面板。順便說一下thx的幫助。 – Zyrax