JTextField没有出现在JFrame中

时间:2016-09-17 23:33:59

标签: java swing jframe jtextfield

我创建了一个在屏幕上随机位置生成图像(JLabel)的游戏。单击时,图像会在不同的随机位置生成。我现在计划在屏幕上也有文字。我正在使用JTextField这样做。问题是尽管JTextField //My api.php routes Route::get('/cities/{country_id}', function (Request $request, $country_id) { $cities=App\City::where('country_id', $country_id)->get()->pluck('name','id'); return $cities; }); //My blade file @extends('layouts.app') @section('content') <div class="container"> <div class="row"> <div class="col-md-8 col-md-offset-2"> <div id="events"> <div class="panel panel-default"> <div class="panel-heading">Select cities by country</div> <div class="panel-body"> {!! Form::open() !!} {!! Form::select('country', $countries, null, ['v-model'=>'country', '@change'=>'WhenCountryHasBeenSelected' ,'class'=>'form-control']) !!} <div v-show="CountrySelected"> {!! Form::select('city',$cities, null, ['class'=>'form-control']) !!} {!! Form::close() !!} Selected @{{ $data | json }} </div> </div> </div> </div> </div> </div> @endsection使用与JLabel msg相同的方法添加,但它并未出现。有人可以解释为什么它不会在JFrame中产生吗?

BoxGame:

box

窗口:

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

1 个答案:

答案 0 :(得分:3)

  

尽管使用与JLabel框相同的方法添加了JTextField消息,但它没有出现。

不,您没有使用与标签相同的方法。再仔细看看你的代码。

您在JLabel上使用了哪些方法?

现在比较用于JTextField的方法,看看有什么区别。

在“moveBox()”方法中,您无需继续将该框添加到面板中。您只需添加一次该框。然后你可以简单地改变它的位置。

您不应该使用静态变量。变量应该是类的实例变量。