2016-09-17 13 views
0

画面上の任意の場所に画像(JLabel)を生成するゲームを作成しました。クリックすると、イメージは別のランダムな場所に生成されます。私は今も画面にテキストを表示する予定です。私はJTextFieldを使ってこれをやっています。問題は、JLabel boxと同じメソッドを使用して追加しても、JTextField msgが表示されないことです。誰かがなぜJFrameで産卵していないのか説明できますか?JFrameにJTextFieldが表示されない

BoxGame:

import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.util.Random; 

import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JTextField; 

@SuppressWarnings("serial") 
public class BoxGame02 extends JFrame { 

    static JLabel box  = new JLabel(); 
    static JTextField msg = new JTextField(); 

    static int min   = 2; 
    static int max   = 350; 

    static Random random = new Random(); 
    static int rand1  = min + random.nextInt(max - min + 1); 
    static int rand2  = min + random.nextInt(max - min + 1); 
    static int randMessage = 1 + random.nextInt(10 - 1 + 1); 

    public BoxGame02() { 
     super("Click the Box!"); 
     setLayout(null); 

     ImageIcon icon = new ImageIcon("C:/Users/btayl/JavaProjects/Java Game Development/Box Game/BoxGame02/Images/face.png"); 
     box.setIcon(icon); 
     box.setSize(50,50); 

     box.setLocation(rand1, rand2); 
     add(box); 

     msg.setText("Text on Screen"); 
     msg.setLocation(10, 200); 
     add(msg); 

     box.setName("box"); 
     BoxListener clickBox = new BoxListener(); 

     box.addMouseListener(clickBox); 

    } 

    class BoxListener extends MouseAdapter { 

     public void mouseClicked(MouseEvent e) { 
      JLabel l = (JLabel) e.getSource(); 

      if(l.getName().equals("box")) 
       moveBox(); 
     } 
    } 
    public void moveBox() { 
     System.out.println("Testing!"); 

     rand1   = min + random.nextInt(max - min + 1); 
     rand2   = min + random.nextInt(max - min + 1); 
     randMessage  = 1 + random.nextInt(10 - 1 + 1); 

     box.setLocation(rand1, rand2); 
     add(box); 

     revalidate(); 
     repaint(); 
    } 
} 

ウィンドウ:

public class Window { 
    public static void main(String[] args) { 

     BoxGame02 frame = new BoxGame02(); 
     frame.setSize(400, 400); 
     frame.setLocationRelativeTo(null); 
     frame.setResizable(false); 
     frame.setVisible(true); 
    } 
} 
+0

'setLayout(null)'は何をしていますか?レイアウトマネージャを使って何かが変わったかどうかを調べてみてください... – nbro

+0

正確な座標を設定できるようにnullに設定しました。私はそれがプログラムを構築するための最良の方法ではないことを知っていますが、私はこの場合は正常に動作すると思います。 – SputnicK

+0

'この場合はうまくいきます.' - ラベルのランダムな位置がテキストフィールドと重なるとどうなりますか?別々のパネルを作成する必要があります。たとえば、フレームのPAGE_STARTにテキストフィールドを追加することができます。次に、別のパネルを作成し、このパネルをフレームの中央に追加します。次に、この2番目のパネルにラベルを追加します。ラベルのランダムな位置がテキストフィールドと重ならないようになりました。 – camickr

答えて

3

のJTextFieldのMSGは、それがJLabelのボックスと同じ方法を使用して追加されているにもかかわらず表示されません。

いいえあなたはラベルと同じ方法を使用しませんでした。あなたのコードをもう一度見てください。

JLabelでどのようなメソッドを使用しましたか?

ここで、JTextFieldで使用されている方法を比較して、その違いを確認してください。

あなたの "moveBox()"メソッドでは、ボックスをパネルに追加し続ける必要はありません。ボックスは一度だけ追加します。次に、その場所を簡単に変更できます。

静的変数は使用しないでください。変数はクラスのインスタンス変数でなければなりません。

+0

moveBox()メソッドとmouseClicked()メソッドの両方に 'msg'を追加しようとしましたが、それでも動作しません。あなたはより詳細な説明を提供できますか? – SputnicK

+0

@SputnicK、あなたはコードは同じだと言った。だから、 "ボックス"変数でどのようなメソッドを呼び出すのか、 "msg"変数でどのメソッドを呼び出すのかを教えてください。ヌルレイアウトを使用する場合は、各コンポーネントで同じプロパティを管理する必要があります。これは、レイアウトマネージャを使用する別の理由です。 – camickr

+0

ああ私はサイズを設定していない... Welp私はばかだ。助けてくれてありがとう: – SputnicK

関連する問題