画面上の任意の場所に画像(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);
}
}
'setLayout(null)'は何をしていますか?レイアウトマネージャを使って何かが変わったかどうかを調べてみてください... – nbro
正確な座標を設定できるようにnullに設定しました。私はそれがプログラムを構築するための最良の方法ではないことを知っていますが、私はこの場合は正常に動作すると思います。 – SputnicK
'この場合はうまくいきます.' - ラベルのランダムな位置がテキストフィールドと重なるとどうなりますか?別々のパネルを作成する必要があります。たとえば、フレームのPAGE_STARTにテキストフィールドを追加することができます。次に、別のパネルを作成し、このパネルをフレームの中央に追加します。次に、この2番目のパネルにラベルを追加します。ラベルのランダムな位置がテキストフィールドと重ならないようになりました。 – camickr