Aplikacja obrazkowa

0

Witam serdecznie. Od niedawna mam przyjemność próbować swoich sił w Javie. Chciałbym stworzyć aplikację obrazkową. Na początku tworzę Panel obsługi. Póki co chciałbym aby po wciśnięciu buttona "Otwórz" można było wybrać obraz (jpg, gif lub png), który wyświetli się na powstałej ramce (wywołanie drugiej funkcji). Widzę , że obraz się ładuje bo okienko poprawnie dobiera rozmiar do obrazka , jednak paintComponent nie działa i wyświetla mi pustą ramkę. Będę wdzięczny za wszelkie wskazówki..
Kod klasy: ImageBox2

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.Graphics2D;
import java.awt.font.* ;
import javax.swing.* ;
import java.text.*;
import javax.swing.JComponent;
import javax.swing.JFrame;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;
/**
 * Write a description of class ImageBox2 here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class ImageBox2 extends JFrame implements ActionListener
{
 
  private double Width,Height;
  private JButton Open,NIC;
  private TextField width,height;
  private  JLabel ImageWindow,WidthLabel,HeightLabel;
  private JFileChooser chooser;
  private JPanel General;
  private JFrame frame;
  JPanel CENTER = new JPanel();
  private Image image,image2;
  private int declaredWidth,declaredHeight;
 public static void main(String[] args)  {
       EventQueue.invokeLater(new Runnable() {
           public void run(){
               ImageBox2 box  = new  ImageBox2();
               }
        });
    }
    /**
     * Constructor for objects of class ImageBox2
     */
    public ImageBox2()
    {setSize(400,400) ; 
   setVisible (true) ;
   ImageGui2() ;
    }
void ImageGui2(){
    setLayout(new GridLayout(3,3)) ;
    Open = new JButton("Otwórz");
    Open.addActionListener(this);
    add(Open);
    NIC = new JButton("Nic");
    add(NIC);
    WidthLabel = new JLabel("Image width",JLabel.CENTER);
    add(WidthLabel);
    HeightLabel = new JLabel("Image height",JLabel.CENTER);
    add(HeightLabel);
    width = new TextField(10);
    add(width);
    height = new TextField(10);
    add(height);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    validate() ;
}
public void actionPerformed(ActionEvent ae) {
Object source = ae.getSource();
if (source == Open){
JFrame MyFrame = new ImageFrame();
}
}
}

Oraz kod klasy ImageFrame:

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.Graphics2D;
import java.awt.font.* ;
import javax.swing.* ;
import java.text.*;
import javax.swing.JComponent;
import javax.swing.JFrame;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;

public class ImageFrame extends JFrame
{
  private int declaredWidth,declaredHeight;
  private Image image;
  JPanel CENTER = new JPanel();

    /**
     * Constructor for objects of class ImageFrame
     */
    public ImageFrame()
    {
    
  JFileChooser chooser = new JFileChooser();
  int odpowiedz = chooser.showOpenDialog(this);
  if (odpowiedz == chooser.APPROVE_OPTION) {
      File file = chooser.getSelectedFile();
	try {
		image = ImageIO.read(file);
		declaredWidth = image.getWidth(this);
		declaredHeight = image.getHeight(this);
		setSize(declaredWidth,declaredHeight);
		setVisible(true);
        validate() ;
        repaint()
	} catch (IOException ex) {
	 
	}
}
    }
public void paintComponent(Graphics g) {
		Graphics2D g2d = (Graphics2D) g;
		g2d.drawImage(image,0,0,declaredWidth,declaredHeight,this);
	}

}
0

Po pierwsze, nie zostawiaj pustej obsługi błędów, minimum to:

    } catch (IOException ex) {
         System.out.println(ex);
    }

Po drugie, kod ma błąd składniowy - jest niekompilowalny. Nie wiem jak rozpoznałeś, że działa źle.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.