Rysowanie obrazka

0

Staram się napisać prosty edytor grafiki na uczelnię, ale już mam problem z samym narysowaniem obrazka z pliku. Plik jest wybierany z jFileChooser1 i ma być wyświetlony w jPanel2 (chyba że jest jakiś lepszy sposób). Do pisania używam NetBeans więc część kodu została dodana z automatu.

private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {
    int returnVal = jFileChooser1.showOpenDialog(GrafikaView.this);
    if (returnVal == jFileChooser1.APPROVE_OPTION) {
         file = jFileChooser1.getSelectedFile();
            try {
                
                image = ImageIO.read(file);
            } catch (IOException ex) {
                Logger.getLogger(GrafikaView.class.getName()).log(Level.SEVERE, null, ex);
            }
         imagex=image.getWidth();
         imagey=image.getHeight();
          Dimension dimension = new Dimension(imagex, imagey);
		jPanel2.setSize(dimension);
               
              g.drawImage(image, imagex, imagey, null); <- Tu nie wiem co wstawić dokładnie...

    
         
    }
}

Fragment kodu z menu Otwierania pliku. Gdy wybiorę plik dostaje java.lang.NullPointerException. Jakieś wskazówki?

0

Na pewno nie tak:

   jPanel2.setSize(dimension);
   g.drawImage(image, imagex, imagey, null); <- Tu nie wiem co wstawić dokładnie...

Raczej tak:

   jPanel2.setPreferredSize(dimension);
   jPanel2.repaint();

jPanel2 powinien być z klasy MojPanel extends JPanel, w tej klasie powinieneś nadpisać metodę paintComponent(), a w niej umieścić rysowanie obrazka.

0

Stworzyłem sobie class'ę ImagePanel:

public class ImagePanel extends JPanel
{
public void paint(Graphics g)
{
if( image != null)
g.drawImage(image,0,0, this);
}
 
} 

i w głównym kodzie pozmieniałem tak jak mówiłeś:

    int returnVal = jFileChooser1.showOpenDialog(GrafikaView.this);
    if (returnVal == jFileChooser1.APPROVE_OPTION) {
            try {
                file = jFileChooser1.getSelectedFile();
               
                       image = ImageIO.read(file);

                imagex=image.getWidth();
                imagey=image.getHeight();

                Dimension dimension = new Dimension(imagex, imagey);
                       jPanel2.setPreferredSize(dimension);
                ImagePanel panel = new ImagePanel();
                jPanel2.add(panel,BorderLayout.CENTER);
                jPanel2.repaint();                 

            } catch (IOException ex) {
                Logger.getLogger(GrafikaView.class.getName()).log(Level.SEVERE, null, ex);
            } 

Wszystko fajnie błędu już nie ma, ale nadal nie wyświetla wybranego obrazka :/

0
     ImagePanel panel = new ImagePanel();
     jPanel2.add(panel,BorderLayout.CENTER);
     jPanel2.repaint(); 

Wtf?, przecież pisałem że to jPanel2 ma być typu ImagePanel.

0

O lol tak to jest jak się da klawiaturę idiocie bez cierpliwości. Poprawione, wszystko działa. Dziękuję za pomoc.

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