Piszę prostą grę kółko i krzyżyk. Wymyśliłem że grafikę będzie obsługiwała klasa dziedzicząca po JPanel, do programu wczytałem pliki jako obiekt BufferedImage. Podczas wywoływania metody PaintComponent wykonuję się metoda DrawImage. Następnie chcę dodać 9 obiektów typu Pole do nowego JPanelu i tu pojawia się problem, gdy do obietku JFrame dodam mój Panel obiekty typu Pole nie wyświetlają grafiki a jedynie coś (przesyłam zdjęcię)
import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; import javax.imageio.*; import javax.swing.*; class TicTacToe { JPanel Plansza; JFrame ramka; BufferedImage nic; BufferedImage kolko; BufferedImage krzyzyk; BufferedImage mkolko; BufferedImage mkrzyzyk; Pole pola; class Pole extends JPanel { String stan; public void paintComponent(Graphics g) { //instrukcje warunkowe sprawdzające stan pola // w zaleznosci od stanu będą rysowane inne zdjecia Graphics2D g2d = (Graphics2D) g; g2d.drawImage(nic, 0, 0, this); } } //Klasa jest wewnętrzna poniewaz musi ona korzystać ze składowych wystepujacych w klasie TicTacToe public static void main(String[] args) { TicTacToe kik = new TicTacToe(); kik.przygotuj_zdjecia(); kik.do_dziela(); } public void przygotuj_zdjecia() { Plansza = new JPanel(); File Fnic = new File("nic.bmp"); try { nic = ImageIO.read(Fnic); } catch(IOException x){;} File Fkolko = new File("o.bmp"); try { kolko = ImageIO.read(Fkolko); } catch(IOException x){;} File Fkrzyzyk = new File("x.bmp"); try { krzyzyk = ImageIO.read(Fkrzyzyk); } catch(IOException x){;} File Fmkolko = new File("osmall"); try { mkolko = ImageIO.read(Fmkolko); } catch(IOException x){;} File Fmkrzyzyk = new File("xsmall"); try { mkrzyzyk = ImageIO.read(Fmkrzyzyk); } catch(IOException x){;} } public void do_dziela() { Plansza.add(new Pole()); ramka = new JFrame("TicTacToe"); ramka.setSize(500,500); ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ramka.getContentPane().add(Plansza); ramka.setVisible(true); } }
Image may be NSFW.
Clik here to view.