Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Samuel Kodytek
Tvůrce
Avatar
Samuel Kodytek:6.8.2013 22:31

Ahoj mam problem po spusteni se mi ukazuje jen bile okno a to tam mam pritom tenhle kod :(

package javagame;
import java.awt.Graphics;
import javax.swing.JFrame;

public class JavaGame extends JFrame {

    public JavaGame() {
        setVisible(true);
        setSize(500, 500);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);
        setLocationRelativeTo(null);
        setTitle("Java Game");
    }

    public void paintComponent (Graphics g)
    {
        super.paintComponents(g);
        g.drawString("Hello World!", 20, 20);
    }

    public static void main(String[] args) {
                new JavaGame();
    }
}

dekuji za pomoc

Odpovědět
6.8.2013 22:31
There is more than one way to screw it
Avatar
Hartrik
Tvůrce
Avatar
Hartrik:7.8.2013 14:36

Je tam několik chyb:

  • Metoda paintComponent by se asi měla jmenovat paintComponents.
  • Pokud necháš vytisknout text na pozici x20 y20 nebude vidět - chce to větší číslo :)
  • setVisible(true); se dává až nakonec a stejně konstruktor není nejlepší místo (navíc je to tam 2x)
new JavaGame().setVisible(true);
Editováno 7.8.2013 14:37
 
Nahoru Odpovědět
7.8.2013 14:36
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Hartrik
David Hartinger:7.8.2013 14:58

PaintComponent je přece správně, vždyť je to přetížená metoda JFrame. new JavaGame().set­Visible(true) mi nepřijde jako dobrá praktika. Proč by nebyl text na pozici 20;20 vidět?

Na první pohled v tom kódu nic špatného nevidím, možná je problém v tom, že kreslí rovnou na frame místo na panel.

Nahoru Odpovědět
7.8.2013 14:58
You are the greatest project you will ever work on.
Avatar
Hartrik
Tvůrce
Avatar
Hartrik:7.8.2013 15:06

Správně je to paintComponents -s (http://docs.oracle.com/…/JFrame.html)
Je to lepší praktika než jak to je teď
Můžeš si to zkusit

Funkční to bude například takto:

package t01;

import java.awt.Graphics;
import javax.swing.JFrame;

public class JavaGame extends JFrame {

    public JavaGame() {

        setSize(500, 500);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);
        setTitle("Java Game");

        setLocationRelativeTo(null);
    }

    @Override
    public void paint(Graphics g) {
        g.drawString("Hello World!", 0 ,40);
    }

    public static void main(String[] args) {
        new JavaGame().setVisible(true);
    }

}
Editováno 7.8.2013 15:06
 
Nahoru Odpovědět
7.8.2013 15:06
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Hartrik
David Hartinger:7.8.2013 15:08

Aha, ono je to u JFramu jinak, tak to se omlouvám :)

Nahoru Odpovědět
7.8.2013 15:08
You are the greatest project you will ever work on.
Avatar
Hartrik
Tvůrce
Avatar
Odpovídá na David Hartinger
Hartrik:7.8.2013 15:14

Metoda paintComponents mi v tomto případě ale stejně nefunguje (možná kvůli tomu panelu, jak jsi psal), tak jsem použil metodu paint.

 
Nahoru Odpovědět
7.8.2013 15:14
Avatar
Samuel Kodytek
Tvůrce
Avatar
Samuel Kodytek:7.8.2013 16:13

Dekuju za pomoc uz sem to vyresil byl problem v tom JFramu mel jsem pouzivat JPanel :)

Nahoru Odpovědět
7.8.2013 16:13
There is more than one way to screw it
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.