2011-10-29 36 views
0

我想从包文件夹(它的工作原理和设置正确)运行我的JFrames。问题是它编译和运行,但我什么都看不到,因为没有错误,我不知道要修复什么。我可能忽略了一些非常小的东西,但我无法找到它。这段代码是我的Main类和我将要使用的第一个JFrame类。任何关于如何从一个包最有效地实现JFrame的想法将非常感激。编译和运行,但它不存在

import GroupProject.GUI.Package.*; 
import javax.swing.*; 
import java.awt.*; 
import java.io.*; 


public class TestGuiApp1 
{ 

    public static void main(String[] Args) 
    { 
     // Gets screen dimensions to be used to center JFrame 
     Toolkit tk = Toolkit.getDefaultToolkit(); 
     Dimension d = tk.getScreenSize(); 

     //creates new Main Menu Frame from GUI packages 
     new MainMenuFrame(); 

     //constraints and unlocking/locking features 
     //setLocation((d.width/2)-350, (d.height/2)-350); 
     //setResizable(false); 


    } 

} 

// JFrame的启动类从包

package GroupProject.GUI.Package; 

    import javax.swing.*; 
    import java.awt.*; 
    import java.awt.event.*; 
    import com.sun.java.swing.plaf.nimbus.*; 

    public class MainMenuFrame extends JFrame 
    { 
     private JButton guess_word, 
         guess_number, 
         player_stats; 
     private JLabel pic_label = new JLabel(new ImageIcon("Question-Mark-Man.jpg")); 

     public MainMenuFrame() 
     {  

      try { 

       UIManager.setLookAndFeel(new NimbusLookAndFeel() 
       { 
        public UIDefaults getDefaults() 
        { 
         UIDefaults ret = super.getDefaults(); 
         ret.put("defaultFont", 
         new Font(Font.MONOSPACED, Font.BOLD, 16)); 
         return ret; 
       } 
       }); 

      JPanel p1 = new JPanel(); 
      JPanel p2 = new JPanel(); 

      ButtonListener listener = new ButtonListener(); 
      // Panel Size 
      setPreferredSize(new Dimension(550, 300)); 
      // Background Color 
      setBackground(new Color(127, 157, 217)); 
      p1.setBackground(new Color(127, 157, 217)); 


      // -------------------- Buttons ------------------- 

      // Guess a word Button 
      guess_word = new JButton("Guess a word", new ImageIcon("word game.png")); 
      guess_word.setFont(new Font("ariel narrow",Font.BOLD,24)); 
      guess_word.addActionListener(listener); 
      p1.add(guess_word); 

      // Guess a number Button 
      guess_number = new JButton("Guess a number", new ImageIcon("number game.png")); 
      guess_number.setFont(new Font("ariel narrow",Font.BOLD,24)); 
      guess_number.addActionListener(listener); 
      p1.add(guess_number); 

      // View player stats button 
      player_stats = new JButton("Player Stats", new ImageIcon("stats2.png")); 
      player_stats.setFont(new Font("ariel narrow",Font.BOLD,24)); 
      player_stats.addActionListener(listener); 
      p1.add(player_stats); 
      // --------------------------------------------------- 



      // ============ Layouts using group layout ============ 
      GroupLayout layout = new GroupLayout(this); 

      this.setLayout(layout); 
      layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING) 
       .addGroup(layout.createSequentialGroup() 
       .addContainerGap() 
       .addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING, false) 
        .addComponent(guess_word, GroupLayout.PREFERRED_SIZE, 280, 
          GroupLayout.PREFERRED_SIZE) 
        .addComponent(guess_number, GroupLayout.PREFERRED_SIZE, 280, 
          GroupLayout.PREFERRED_SIZE) 
        .addComponent(player_stats, GroupLayout.PREFERRED_SIZE, 280, 
          GroupLayout.PREFERRED_SIZE)) 
        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
        .addComponent(p2, GroupLayout.DEFAULT_SIZE, 
          GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
        .addContainerGap())); 

      layout.setVerticalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING) 
       .addGroup(layout.createSequentialGroup() 
       .addContainerGap() 
       .addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING, false) 
        .addComponent(p2, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 
           GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
        .addGroup(GroupLayout.Alignment.LEADING, layout.createSequentialGroup() 
        .addComponent(guess_word, GroupLayout.PREFERRED_SIZE, 60, 
         GroupLayout.PREFERRED_SIZE) 
        .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED) 
        .addComponent(guess_number, GroupLayout.PREFERRED_SIZE, 60, 
          GroupLayout.PREFERRED_SIZE) 
        .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED) 
        .addComponent(player_stats, GroupLayout.PREFERRED_SIZE, 60, 
          GroupLayout.PREFERRED_SIZE))) 

        .addContainerGap(239, Short.MAX_VALUE))); 
      // =================================================== 
      p2.add(pic_label); 
      } catch (Exception ex) 
      { 
       throw new Error(ex); 
      } 
     } 


     private class ButtonListener implements ActionListener 
     { 
      public void actionPerformed(ActionEvent e) 
      { 
       //need to set values to remember what game the user wants to play 
       // before it goes to the SelectPlayerTypeFrame 
       if (e.getSource() == guess_word) 
        ;//new MainMenu(); 

       if (e.getSource() == guess_number) 
        ; // new MainMenu(); 

       if (e.getSource() == player_stats) 
       ;//new MainMenu(); 
      } 
     } 

    } 
+0

啊,我想明白了GroupLayout使用了这个关键字,并且需要getContentPane()来代替。 – aStackofQueues

回答

4

你在哪里调用调用setVisible(真)在JFrame的?

myFrame.setVisible(true); 

或在您的情况:

this.setVisible(true); // this is not necessary but here for clarity 

还要注意,毕竟组件已被添加到GUI和调用pack(在另一注意到在这之后应该叫在这个页面上回答)。

您将要经过的Java Swing教程了解如何创建Swing程序有点作为这方面的知识将是非常有用的你:Swing Tutorials

另外,我强烈建议你不要使用NetBeans产生Swing代码给你,至少不是在游戏的这个阶段,除非你更了解Swing。代码生成器非常适用于快速和肮脏的代码创建,但如果您不知道Swing的细节和特性,那么如果您想要创建比最基本的GUI更多的东西,通常会遇到困难。我从经验得到的这个结论。

+0

最初我试过这个,但是,我得到了一个运行时错误... GroupLayout一次只能与一个容器一起使用 – aStackofQueues

+2

这意味着您正在使用GroupLayout错误。解决方案:不要使用NetBeans生成的代码。而是使用教程作为指导创建自己的Swing代码。这包括尽可能使用更易于使用的布局管理器。 –

4

您从未将您的框架设置为可见,并且您不需要调用pack()就可以将其框架尺寸告诉其子组件。

JFrame frame = new MainMenuFrame(); 
frame.pack(); 
frame.setVisible(true); 
+0

本来我试过这个,但是,我得到了一个运行时错误... GroupLayout一次只能与一个Container一起使用 – aStackofQueues