Jak narysować rysunek ?

0

Napisałem kawałek interfejsu. Niestety nie mogę sobie poradzić, z narysowaniem rysunku, po wyborze odpowiedniego pliku.

private void wybor(java.awt.event.ActionEvent evt) {
    	try {
    		wybor_pliku = new JFileChooser("C:/");
    		wybor_pliku.showOpenDialog(null);
    		wybrany_plik = wybor_pliku.getSelectedFile();
    		
    		Toolkit toolkit = Toolkit.getDefaultToolkit();
    		obraz = toolkit.getImage(wybrany_plik.getPath());
    		
    		System.out.println("Wybrano plik: " + wybrany_plik.getName());
    		System.out.println("Sciezka: " + wybrany_plik.getPath());
        
    		int szerokosc = obraz.getWidth(null);
    		int wysokosc = obraz.getHeight(null);
        
    		System.out.println("Wysokość " + wysokosc);
    		System.out.println("Szerokość " + szerokosc);
        	
    	}
    	catch(NullPointerException exp) {
        }
    }

Po prostu w tym momencie zarowno wysokosc jak szerokosc daja wynik -1 wiec cos jest nie tak, no i nie mam pojecia jak narysowac :(
A oto caly program:

import javax.swing.*;
import java.io.*;
import java.awt.*;

public class Propagacja extends javax.swing.JFrame {

    public Propagacja() {
        initComponents();
    }

    private void initComponents() {
        glownyJPanel = new JPanel();
        gornyJPanel = new JPanel();
        wczytanieJPanel = new JPanel();
        wynikJPanel = new JPanel();
        roznicaJPanel = new JPanel();
        dolnyJPanel = new JPanel();
        wyborJButton = new JButton();
        startJButton = new JButton();
        roznicaJButton = new JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Propagacja wsteczna");
        setResizable(false);
        glownyJPanel.setLayout(new java.awt.BorderLayout());

        glownyJPanel.setBackground(new java.awt.Color(0, 204, 204));
        glownyJPanel.setBorder(new javax.swing.border.MatteBorder(null));
        glownyJPanel.setMaximumSize(new java.awt.Dimension(1000, 1000));
        glownyJPanel.setPreferredSize(new java.awt.Dimension(1200, 510));
        gornyJPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 3, 1));

        gornyJPanel.setBackground(new java.awt.Color(226, 250, 250));
        gornyJPanel.setPreferredSize(new java.awt.Dimension(1200, 410));
        wczytanieJPanel.setBackground(new java.awt.Color(255, 255, 255));
        wczytanieJPanel.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(153, 0, 51), 1, true));
        wczytanieJPanel.setPreferredSize(new java.awt.Dimension(396, 400));
        org.jdesktop.layout.GroupLayout wczytanieJPanelLayout = new org.jdesktop.layout.GroupLayout(wczytanieJPanel);
        wczytanieJPanel.setLayout(wczytanieJPanelLayout);
        wczytanieJPanelLayout.setHorizontalGroup(
            wczytanieJPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 394, Short.MAX_VALUE)
        );
        wczytanieJPanelLayout.setVerticalGroup(
            wczytanieJPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 398, Short.MAX_VALUE)
        );
        gornyJPanel.add(wczytanieJPanel);

        wynikJPanel.setBackground(new java.awt.Color(255, 255, 255));
        wynikJPanel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 102)));
        wynikJPanel.setPreferredSize(new java.awt.Dimension(396, 400));
        org.jdesktop.layout.GroupLayout wynikJPanelLayout = new org.jdesktop.layout.GroupLayout(wynikJPanel);
        wynikJPanel.setLayout(wynikJPanelLayout);
        wynikJPanelLayout.setHorizontalGroup(
            wynikJPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 394, Short.MAX_VALUE)
        );
        wynikJPanelLayout.setVerticalGroup(
            wynikJPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 398, Short.MAX_VALUE)
        );
        gornyJPanel.add(wynikJPanel);

        roznicaJPanel.setBackground(new java.awt.Color(255, 255, 255));
        roznicaJPanel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 204, 0)));
        roznicaJPanel.setPreferredSize(new java.awt.Dimension(396, 400));
        org.jdesktop.layout.GroupLayout roznicaJPanelLayout = new org.jdesktop.layout.GroupLayout(roznicaJPanel);
        roznicaJPanel.setLayout(roznicaJPanelLayout);
        roznicaJPanelLayout.setHorizontalGroup(
            roznicaJPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 394, Short.MAX_VALUE)
        );
        roznicaJPanelLayout.setVerticalGroup(
            roznicaJPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 398, Short.MAX_VALUE)
        );
        gornyJPanel.add(roznicaJPanel);

        glownyJPanel.add(gornyJPanel, java.awt.BorderLayout.NORTH);

        dolnyJPanel.setBackground(new java.awt.Color(226, 250, 250));
        dolnyJPanel.setPreferredSize(new java.awt.Dimension(1200, 100));
        wyborJButton.setBackground(new java.awt.Color(0, 51, 153));
        wyborJButton.setForeground(new java.awt.Color(255, 255, 255));
        wyborJButton.setText("Wczytaj rysunek");
        wyborJButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                wybor(evt);
            }
        });

        dolnyJPanel.add(wyborJButton);

        startJButton.setBackground(new java.awt.Color(0, 51, 153));
        startJButton.setForeground(new java.awt.Color(255, 255, 255));
        startJButton.setText("START");
        dolnyJPanel.add(startJButton);

        roznicaJButton.setBackground(new java.awt.Color(0, 51, 153));
        roznicaJButton.setForeground(new java.awt.Color(255, 255, 255));
        roznicaJButton.setText("R\u00f3\u017cnica");
        dolnyJPanel.add(roznicaJButton);

        glownyJPanel.add(dolnyJPanel, java.awt.BorderLayout.SOUTH);

        getContentPane().add(glownyJPanel, java.awt.BorderLayout.CENTER);

        pack();
    }
    
    private void wybor(java.awt.event.ActionEvent evt) {
    	try {
    		wybor_pliku = new JFileChooser("C:/");
    		wybor_pliku.showOpenDialog(null);
    		wybrany_plik = wybor_pliku.getSelectedFile();
    		
    		Toolkit toolkit = Toolkit.getDefaultToolkit();
    		obraz = toolkit.getImage(wybrany_plik.getPath());
    		
    		System.out.println("Wybrano plik: " + wybrany_plik.getName());
    		System.out.println("Sciezka: " + wybrany_plik.getPath());
        
    		int szerokosc = obraz.getWidth(null);
    		int wysokosc = obraz.getHeight(null);
        
    		System.out.println("Wysokość " + wysokosc);
    		System.out.println("Szerokość " + szerokosc);
        	
    	}
    	catch(NullPointerException exp) {
        }
    }
    
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Propagacja().setVisible(true);
            }
        });
    }
    
    private JPanel dolnyJPanel;
    private JPanel glownyJPanel;
    private JPanel gornyJPanel;
    private JButton roznicaJButton;
    private JPanel roznicaJPanel;
    private JButton startJButton;
    private JPanel wczytanieJPanel;
    private JButton wyborJButton;
    private JPanel wynikJPanel;    
    private JFileChooser wybor_pliku;
    private File wybrany_plik;
    Image obraz = null;
}

0

Inaczej odczytuj rysunek

Image image=new ImageIcon(wybrany_plik.getPath()).getImage();

A jak już odczytasz, to umiesz narysować ?

0
Image image=new ImageIcon(wybrany_plik.getPath()).getImage();

Dziekuje bardzo :) Udalo sie narysowac bez problemu :) predzej juz czytalem o tym ImageIcon :) ale jakos nie chcialo mi sie wierzyc ze to zadziala :)

0
private void wybor(java.awt.event.ActionEvent evt) {
    	try {
    		wybor_pliku = new JFileChooser("C:/");
    		wybor_pliku.showOpenDialog(null);
    		wybrany_plik = wybor_pliku.getSelectedFile();
    		
    		obraz = new ImageIcon(wybrany_plik.getPath()).getImage();
    		
    		Graphics g = wczytanieJPanel.getGraphics();
    		g.drawImage(obraz,5,5,385,390,this);
    		
    		System.out.println("Wybrano plik: " + wybrany_plik.getName());
    		System.out.println("Sciezka: " + wybrany_plik.getPath());
        
    		int szerokosc = obraz.getWidth(null);
    		int wysokosc = obraz.getHeight(null);
        
    		System.out.println("Wysokość " + wysokosc);
    		System.out.println("Szerokość " + szerokosc);        	
    	}
    	catch(NullPointerException exp) {
        }
    }

Hm... jednak jak wczytuje dwa rysunki, po kolei, to pozostaje maly fragment, i nie wiem jak to zmienic :/

import javax.swing.*;
import java.io.*;
import java.awt.*;

public class Propagacja extends javax.swing.JFrame {

    public Propagacja() {
        initComponents();
    }

    private void initComponents() {
        glownyJPanel = new JPanel();
        gornyJPanel = new JPanel();
        wczytanieJPanel = new JPanel();
        wynikJPanel = new JPanel();
        roznicaJPanel = new JPanel();
        dolnyJPanel = new JPanel();
        wyborJButton = new JButton();
        startJButton = new JButton();
        roznicaJButton = new JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Propagacja wsteczna");
        setResizable(false);
        glownyJPanel.setLayout(new java.awt.BorderLayout());

        glownyJPanel.setBackground(new java.awt.Color(0, 204, 204));
        glownyJPanel.setBorder(new javax.swing.border.MatteBorder(null));
        glownyJPanel.setMaximumSize(new java.awt.Dimension(1000, 1000));
        glownyJPanel.setPreferredSize(new java.awt.Dimension(1200, 510));
        gornyJPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 3, 1));

        gornyJPanel.setBackground(new java.awt.Color(226, 250, 250));
        gornyJPanel.setPreferredSize(new java.awt.Dimension(1200, 410));
        wczytanieJPanel.setBackground(new java.awt.Color(255, 255, 255));
        wczytanieJPanel.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(153, 0, 51), 1, true));
        wczytanieJPanel.setPreferredSize(new java.awt.Dimension(396, 400));
        org.jdesktop.layout.GroupLayout wczytanieJPanelLayout = new org.jdesktop.layout.GroupLayout(wczytanieJPanel);
        wczytanieJPanel.setLayout(wczytanieJPanelLayout);
        wczytanieJPanelLayout.setHorizontalGroup(
            wczytanieJPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 394, Short.MAX_VALUE)
        );
        wczytanieJPanelLayout.setVerticalGroup(
            wczytanieJPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 398, Short.MAX_VALUE)
        );
        gornyJPanel.add(wczytanieJPanel);

        wynikJPanel.setBackground(new java.awt.Color(255, 255, 255));
        wynikJPanel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 102)));
        wynikJPanel.setPreferredSize(new java.awt.Dimension(396, 400));
        org.jdesktop.layout.GroupLayout wynikJPanelLayout = new org.jdesktop.layout.GroupLayout(wynikJPanel);
        wynikJPanel.setLayout(wynikJPanelLayout);
        wynikJPanelLayout.setHorizontalGroup(
            wynikJPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 394, Short.MAX_VALUE)
        );
        wynikJPanelLayout.setVerticalGroup(
            wynikJPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 398, Short.MAX_VALUE)
        );
        gornyJPanel.add(wynikJPanel);

        roznicaJPanel.setBackground(new java.awt.Color(255, 255, 255));
        roznicaJPanel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 204, 0)));
        roznicaJPanel.setPreferredSize(new java.awt.Dimension(396, 400));
        org.jdesktop.layout.GroupLayout roznicaJPanelLayout = new org.jdesktop.layout.GroupLayout(roznicaJPanel);
        roznicaJPanel.setLayout(roznicaJPanelLayout);
        roznicaJPanelLayout.setHorizontalGroup(
            roznicaJPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 394, Short.MAX_VALUE)
        );
        roznicaJPanelLayout.setVerticalGroup(
            roznicaJPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 398, Short.MAX_VALUE)
        );
        gornyJPanel.add(roznicaJPanel);

        glownyJPanel.add(gornyJPanel, java.awt.BorderLayout.NORTH);

        dolnyJPanel.setBackground(new java.awt.Color(226, 250, 250));
        dolnyJPanel.setPreferredSize(new java.awt.Dimension(1200, 100));
        wyborJButton.setBackground(new java.awt.Color(0, 51, 153));
        wyborJButton.setForeground(new java.awt.Color(255, 255, 255));
        wyborJButton.setText("Wczytaj rysunek");
        wyborJButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                wybor(evt);
            }
        });
        dolnyJPanel.add(wyborJButton);

        startJButton.setBackground(new java.awt.Color(0, 51, 153));
        startJButton.setForeground(new java.awt.Color(255, 255, 255));
        startJButton.setText("START");
        startJButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                start(evt);
            }
        });
        dolnyJPanel.add(startJButton);

        roznicaJButton.setBackground(new java.awt.Color(0, 51, 153));
        roznicaJButton.setForeground(new java.awt.Color(255, 255, 255));
        roznicaJButton.setText("Różnica");
        roznicaJButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                roznica(evt);
            }
        });
        dolnyJPanel.add(roznicaJButton);

        glownyJPanel.add(dolnyJPanel, java.awt.BorderLayout.SOUTH);

        getContentPane().add(glownyJPanel, java.awt.BorderLayout.CENTER);

        pack();
    }
    
    private void wybor(java.awt.event.ActionEvent evt) {
    	try {
    		wybor_pliku = new JFileChooser("C:/");
    		wybor_pliku.showOpenDialog(null);
    		wybrany_plik = wybor_pliku.getSelectedFile();
    		
    		obraz = new ImageIcon(wybrany_plik.getPath()).getImage();
    		
    		Graphics g = wczytanieJPanel.getGraphics();
    		g.drawImage(obraz,5,5,385,390,this);
    		
    		System.out.println("Wybrano plik: " + wybrany_plik.getName());
    		System.out.println("Sciezka: " + wybrany_plik.getPath());
        
    		int szerokosc = obraz.getWidth(null);
    		int wysokosc = obraz.getHeight(null);
        
    		System.out.println("Wysokość " + wysokosc);
    		System.out.println("Szerokość " + szerokosc);        	
    	}
    	catch(NullPointerException exp) {
        }
    }
    
    private void start(java.awt.event.ActionEvent evt) {
    	
    }
    
    private void roznica(java.awt.event.ActionEvent evt) {
    	
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Propagacja().setVisible(true);
            }
        });
    }
    
    private JPanel dolnyJPanel;
    private JPanel glownyJPanel;
    private JPanel gornyJPanel;
    private JButton roznicaJButton;
    private JPanel roznicaJPanel;
    private JButton startJButton;
    private JPanel wczytanieJPanel;
    private JButton wyborJButton;
    private JPanel wynikJPanel;    
    private JFileChooser wybor_pliku;
    private File wybrany_plik;
    Image obraz = null;
}

0

Jeżeli chodzi o to żeby obrazki się nie nakładały wystarczy jpanel.update(g); więcej opisałem w cześci w moim temacie.

0

do wczytywania sluzy klasa ImageIO

pozdrawiam

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