Hallo .
Ich möchte ein Bild mittels Graphics2D darstellen.
Das Bild hole ich aus einer Jlist.
die Methode aus einer anderen classe.
zunächst habe ich das bild mitteld Jlabel(Imageicon) angezeigt da ich aber auf dem Bild malen will. versuche ich nun zu
Graphics2D zu wechseln.
Die Erste classe.
und die Classe mit der Methode.
Wenn ich nun das bild anzeigen will bekomme ich eine Nullpointer.
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at DrawStuff.zeigebild(DrawStuff.java:33)
at Viewit$1.valueChanged(Viewit.java:62)
Ich weiss nicht wo hier der Fehler ist??? :cry:
Kann mir bitte jemand helfen. (setz Hundeblick auf!) :cry:
Ich möchte ein Bild mittels Graphics2D darstellen.
Das Bild hole ich aus einer Jlist.
die Methode aus einer anderen classe.
zunächst habe ich das bild mitteld Jlabel(Imageicon) angezeigt da ich aber auf dem Bild malen will. versuche ich nun zu
Graphics2D zu wechseln.
Die Erste classe.
Code:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class Viewit extends JFrame {
private DefaultListModel listdata = new DefaultListModel(); ;
private JList liste = new JList(listdata);
private JLabel bildlabel = new JLabel();
double theta;
int a;
int b;
double x;
double y;
DrawStuff graf = new DrawStuff();
Viewit(){
JMenuBar menubar = new JMenuBar();
setJMenuBar(menubar);
JMenu m = new JMenu("File");
menubar.add(m);
JMenuItem datei = new JMenuItem("Open..");
m.add(datei);
JScrollPane scroll = new JScrollPane(liste);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
JPanel bildpanel = new JPanel(new BorderLayout(4,4));
JPanel textpanel = new JPanel(new BorderLayout(1,1));
JPanel listpanel = new JPanel(new BorderLayout(5,5));
liste.setPreferredSize(new Dimension(80,500));
liste.addListSelectionListener(new ListSelectionListener(){
public void valueChanged(ListSelectionEvent e){
JList source = (JList)e.getSource();
if (source.getValueIsAdjusting())
return;
Object dat = source.getSelectedValue();
String path = dat.toString();
ImageIcon icon = new ImageIcon(path);
Image img = icon.getImage();
// bildlabel.setIcon(icon);
graf.zeigebild(img); //at Viewit$1.valueChanged(Viewit.java:62)
}
});
datei.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
chooser.showOpenDialog(null);
String text = chooser.getSelectedFile().getAbsolutePath();
File file =new File(text);
listdata.removeAllElements();
File[] files = file.listFiles();
for(int i =0;i<files.length;i++)
listdata.addElement(files[i]);
liste.setSelectedIndex(0);
}
});
//bildpanel.add(bildlabel);
listpanel.add(scroll);
getContentPane().add(bildpanel, BorderLayout.CENTER);
getContentPane().add(listpanel, BorderLayout.EAST);
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
setSize(800, 600);
setLocation(100, 100);
}
public static void main(String[] args){
Viewit f = new Viewit();
f.setVisible(true);
}
}
und die Classe mit der Methode.
Code:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.geom.*;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
public class DrawStuff extends JPanel{
Graphics graphics;
Graphics2D g2d = (Graphics2D) graphics;
double theta;
double x;
double y;
int a;
int b;
public BufferedImage buffimg;
public void zeigebild(Image img ){
JFrame f = new JFrame();
buffimg = (BufferedImage)f.createImage(img.getWidth(f),img.getHeight(f));
g2d = buffimg.createGraphics(); //at DrawStuff.zeigebild(DrawStuff.java:33)
g2d.drawImage(img, 0, 0, f);
}
public void machRect2D(double x, double y){
g2d.setColor(Color.BLACK);
g2d.draw(new Rectangle2D.Double(x, y, 100, 80));
}
public void drawPunkt(int a, int b){
g2d.setColor(Color.RED);
g2d.fillOval(a, b, 4, 4);
}
public void drehRect(double theta, double x, double y){
AffineTransform aft = new AffineTransform();
aft.rotate(theta ,x ,y);
g2d.setTransform(aft);
}
public Dimension getPreferredSize(){
return new Dimension(300, 200);
}
}
Wenn ich nun das bild anzeigen will bekomme ich eine Nullpointer.
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at DrawStuff.zeigebild(DrawStuff.java:33)
at Viewit$1.valueChanged(Viewit.java:62)
Ich weiss nicht wo hier der Fehler ist??? :cry:
Kann mir bitte jemand helfen. (setz Hundeblick auf!) :cry: