Witam wszystkich. Mam problem z narysowaniem obrazka w oknie.
public class Puzzle extends JPanel
{
public BufferedImage biObraz;
public Puzzle()
{
JFileChooser fc = new JFileChooser();
if (fc.showOpenDialog(this)==JFileChooser.APPROVE_OPTION);
{
File obraz = new File(String.valueOf(fc.getSelectedFile()));
try
{
biObraz = ImageIO.read(obraz);
}
catch (IOException er)
{
System.err.println("Błąd odczytu obrazka !");
er.printStackTrace();
}
}
Dimension dimension = new Dimension(biObraz.getWidth(), biObraz.getHeight());
setPreferredSize(dimension);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
g.drawImage(biObraz, 0, 0, this);
}
}
public class ObrazFrame extends JFrame implements ActionListener
{
private BufferedImage biObraz;
private JMenuBar menuBar;
private JMenu mPlik, mOpcje;
private JMenuItem mOtworz, mWyjscie;
public ObrazFrame()
{
setSize(200,100);
setTitle("Puzzle");
setLayout(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
menuBar = new JMenuBar();
setJMenuBar(menuBar);
mPlik = new JMenu("Plik");
menuBar.add(mPlik);
mOpcje = new JMenu("Opcje");
menuBar.add(mOpcje);
mOtworz = new JMenuItem("Nowe zdjęcie");
mPlik.add(mOtworz);
mOtworz.addActionListener(this);
mOtworz.setAccelerator(KeyStroke.getKeyStroke("ctrl O"));
mWyjscie = new JMenuItem("Wyjście");
mPlik.add(mWyjscie);
mWyjscie.addActionListener(this);
mWyjscie.setAccelerator(KeyStroke.getKeyStroke("ctrl Q"));
}
public void actionPerformed(ActionEvent e)
{
Object zrodlo = e.getSource();
if (zrodlo==mWyjscie)
{
dispose();
}
else if (zrodlo==mOtworz)
{
Puzzle puzle = new Puzzle();
add(puzle);
pack();
}
}
}
Takie wywołanie po prostu skutkuje zmniejszeniem okna do minimum, a obrazek nie zostaje narysowany.
Nie wiem jak rozgryźć to dodanie obiektu "puzle" do panelu. Wiadomo, że jeśli te instrukcje:
Puzzle puzle = new Puzzle();
add(puzle);
Wpiszę do konstruktora ObrazFrame(), to obrazek zostanie wyświetlony, jednak wtedy nie będzie to wykonywane po działaniu na JFileChooser. Długo nad tym siedziałem, te przykłady w internecie, które widziałem nie pomogły, więc proszę o pomoc przy tym problemie.
Z góry dziękuję i proszę o odpowiedź ;)