JTextField zostaje utworzony w JFrame, ale nie pokazuje się

0

Witam. Wprowadzam JTextField analogicznie do tutorialu:
Po uruchomieniu aplikacji, JTextField nie pojawia się, jednak istnieje w JFrame. Po najechaniu na miejsce gdzie powinien się znajdować, kursor zmienia się na kursor zachęty do wpisania tekstu i po kliknięciu lewym przyciskiem myszy JTextField dopiero się pojawia.
Tutaj podaję kod źródłowy:

public class Okno extends JFrame {

	private static final long serialVersionUID = 1L;

	public Okno(){
		setSize(400, 200);
		setTitle("Program");
		setLayout(null);
	}
}
public class NazwaGry {

	public static String main() {

		Okno nazwaokno = new Okno();
		nazwaokno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		nazwaokno.setVisible(true);

		JLabel info = new JLabel("Nazwa gry:");
		info.setBounds(20, 20, 150, 20);
		nazwaokno.add(info);

		JTextField wprowadz = new JTextField(" ");
		wprowadz.setBounds(170, 20, 150, 20);
		nazwaokno.add(wprowadz);
}

A wygląda to tak:

nlskub.gif

Dodam, że mój system operacyjny to Windows 8.1 Pro, a wersja Javy jre1.8.0_31.
Czy zna ktoś rozwiązanie mojego problemu?

dodanie animacji do załączników posta - @furious programming

1

Ja znam, instrukcję

nawaokno.setVisible(true);

umieść po dodaniu wszystkich komponentów.
Rady na przyszłość:

  • kod
        nazwaokno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        nazwaokno.setVisible(true);
 
        JLabel info = new JLabel("Nazwa gry:");
        info.setBounds(20, 20, 150, 20);
        nazwaokno.add(info);
 
        JTextField wprowadz = new JTextField(" ");
        wprowadz.setBounds(170, 20, 150, 20);
        nazwaokno.add(wprowadz);

przenieś do konstruktora (musisz wtedy skreślić wszystkie wyrażenia nazwaokno.)

  • zapomnij o istnieniu instrukcji
setLayout(null);
0

Dziękuję za próbę pomocy. Jednak problem wciąż istnieje.
Po poprawkach kod wygląda tak.

Public class NazwaGry {

	public static String main() {
		
		Okno nazwaokno = new Okno("Nazwa gry:");
public class Okno extends JFrame {
	
	private static final long serialVersionUID = 1L;
	
	public Okno(String lbl){		
		setSize(400, 200);
		setTitle("Program");		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
		
		JLabel info = new JLabel(lbl);
		info.setBounds(20, 20, 150, 20);
		add(info);
		
		JTextField wprowadz = new JTextField(" ");
		wprowadz.setBounds(170, 20, 150, 20);
		add(wprowadz);

	}
	
}

A wynik od razu po uruchomieniu jest taki:

user image

To na pewno dalej błąd w kodzie programu? Nie wiem dlaczego, mam wrażenie, że to jakiś błąd związany z systemem...

0

Dodam tylko, że wprowadzenie setVisible(true); po dodaniu wszystkich komponentów, wprowadza odwrotne działanie. Czyli najpierw pojawia się JLabel, a po rozciągnięciu okna nakłada się na niego JTextField który jest wielkości na całe okno tak jak na animacji.

1

Rezygnacja z

setLayout(null);

oznacza, że komponenty rozmieszcza Swing, a nie Ty. Zatem wszystkie

setBounds(...);

są bez sensu.
import javax.swing.;
import java.awt.
;
public class Okno extends JFrame
{
public Okno(String lbl){
setLayout(new FlowLayout());
setTitle("Program");
JLabel info = new JLabel(lbl);
add(info);

    JTextField wprowadz = new JTextField(16);
    add(wprowadz);
    pack();
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);         
} 

}

0

Serdecznie dziękuję! Działa!

1 użytkowników online, w tym zalogowanych: 0, gości: 1