JTextField zostaje utworzony w JFrame, ale nie pokazuje się

2015-02-14 12:59
Zimny Samiec
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

edytowany 1x, ostatnio: furious programming, 2016-12-13 18:26
Obrazki czy animacje GIF dodawaj do załączników posta, a nie na zewnętrzne hostingi; - furious programming 2015-02-14 16:16

Pozostało 580 znaków

2015-02-14 13:09
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);

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 2x, ostatnio: bogdans, 2015-02-14 13:23

Pozostało 580 znaków

2015-02-14 15:49
Zimny Samiec
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...

edytowany 1x, ostatnio: furious programming, 2016-12-13 18:26

Pozostało 580 znaków

2015-02-14 15:53
Zimny Samiec
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.

Pozostało 580 znaków

2015-02-14 15:55

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

}


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 4x, ostatnio: bogdans, 2015-02-14 16:09

Pozostało 580 znaków

2015-02-14 16:32
Zimny Samiec
0

Serdecznie dziękuję! Działa!

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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