Hallo,
ich habe ein kleines Zeichenprogramm für die Schule programmiert und möchte die Funktion des „Speicherns“ immitieren.
Dafür soll eine .png-Datei als Screenshot des Graphikfensters erstellt werden.
Ich komme allerdings nicht weiter und hoffe, das ihr mir sagt, wo der Fehler liegt, bzw. was ich tun muss, damit mein Vorhaben funktioniert.
Hier der Quellcode:
import java.awt.*;
import java.awt.event.*;
import java.awt.Point.*;
import java.applet.*;
import javax.imageio.ImageIO;
import java.awt.Component;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class Paint extends Frame {
MenuBar menuBar1;
Menu menu1, menu2, menu3, menu4, menu5, menu6, menu7;
MenuItem mi11, mi12, mi13, mi21, mi51, mi52, mi53, mi54, mi71, mi72, mi73, mi74, mi31, mi32, mi33, mi34, mi35, mi36, mi37, mi38, mi39, mi391, mi392, mi393, mi394, mi395;
MenuShortcut ms11, ms12, ms13, ms21, ms51, ms52, ms53, ms54, ms71, ms72, ms73, ms74, ms31, ms32, ms33, ms34, ms35, ms36;
Color color = Color.white;
PaintCanvas pc;
int a = 0;
int b = 0;
int object = 0;
public Paint(){
setLayout(new BorderLayout());
setSize(800,600);
setTitle(„Paint“);
pc = new PaintCanvas();
add(„Center“, pc);
menuBar1 = new MenuBar();
menu1 = new Menu(„File“);
ms11 = new MenuShortcut(KeyEvent.VK_N);
mi11 = new MenuItem(„New“, ms11);
menu1.add(mi11);
ms12 = new MenuShortcut(KeyEvent.VK_S);
mi12 = new MenuItem(„Save“, ms12);
menu1.add(mi12);
menu1.addSeparator();
ms13 = new MenuShortcut(KeyEvent.VK_Q);
mi13 = new MenuItem(„Quit“, ms13);
menu1.add(mi13);
menu2 = new Menu(„Object“);
mi21 = new MenuItem(„Background“);
menu2.add(mi21);
menu4 = new Menu(„Rectangle“);
menu2.add(menu4);
menu5 = new Menu(„Size“);
mi51 = new MenuItem(„5*5“);
menu5.add(mi51);
mi52 = new MenuItem(„10*10“);
menu5.add(mi52);
mi53 = new MenuItem(„15*15“);
menu5.add(mi53);
mi54 = new MenuItem(„FREE“);
menu5.add(mi54);
menu6 = new Menu(„Circle“);
menu2.add(menu6);
menu7 = new Menu(„Size“);
mi71 = new MenuItem(„5*5“);
menu7.add(mi71);
mi72 = new MenuItem(„10*10“);
menu7.add(mi72);
mi73 = new MenuItem(„15*15“);
menu7.add(mi73);
mi74 = new MenuItem(„FREE“);
menu7.add(mi74);
menu3 = new Menu(„Color“);
mi31 = new MenuItem(„black“);
menu3.add(mi31);
mi32 = new MenuItem(„blue“);
menu3.add(mi32);
mi33 = new MenuItem(„cyan“);
menu3.add(mi33);
menu3.addSeparator();
mi34 = new MenuItem(„dark gray“);
menu3.add(mi34);
mi35 = new MenuItem(„gray“);
menu3.add(mi35);
mi36 = new MenuItem(„light gray“);
menu3.add(mi36);
menu3.addSeparator();
mi37 = new MenuItem(„green“);
menu3.add(mi37);
mi38 = new MenuItem(„magenta“);
menu3.add(mi38);
mi39 = new MenuItem(„orange“);
menu3.add(mi39);
mi391 = new MenuItem(„pink“);
menu3.add(mi391);
mi392 = new MenuItem(„red“);
menu3.add(mi392);
mi393 = new MenuItem(„yellow“);
menu3.add(mi393);
menu3.addSeparator();
mi394 = new MenuItem(„ERASER (white)“);
menu3.add(mi394);
mi395 = new MenuItem(„ERASER (color of the background)“);
menu3.add(mi395);
menu4.add(menu5);
menu6.add(menu7);
menuBar1.add(menu1);
menuBar1.add(menu2);
menuBar1.add(menu3);
setMenuBar(menuBar1);
Waechter_Frame wFrame = new Waechter_Frame();
this.addWindowListener(wFrame);
Waechter_Menu wMenu = new Waechter_Menu();
mi11.addActionListener(wMenu);
mi12.addActionListener(wMenu);
mi13.addActionListener(wMenu);
mi21.addActionListener(wMenu);
mi51.addActionListener(wMenu);
mi52.addActionListener(wMenu);
mi53.addActionListener(wMenu);
mi54.addActionListener(wMenu);
mi71.addActionListener(wMenu);
mi72.addActionListener(wMenu);
mi73.addActionListener(wMenu);
mi74.addActionListener(wMenu);
mi31.addActionListener(wMenu);
mi32.addActionListener(wMenu);
mi33.addActionListener(wMenu);
mi34.addActionListener(wMenu);
mi35.addActionListener(wMenu);
mi36.addActionListener(wMenu);
mi37.addActionListener(wMenu);
mi38.addActionListener(wMenu);
mi39.addActionListener(wMenu);
mi391.addActionListener(wMenu);
mi392.addActionListener(wMenu);
mi393.addActionListener(wMenu);
mi394.addActionListener(wMenu);
mi395.addActionListener(wMenu);
}
public void setVisible(boolean v) {
if (v) { setLocation(50,200); }
super.setVisible(v);
}
class Waechter_Frame extends WindowAdapter {
public void windowClosing(WindowEvent event) {
dispose();
}
}
class Waechter_Menu implements ActionListener {
public void actionPerformed(ActionEvent e) {
Object obj = e.getSource();
if (obj == mi11) { //NEW
pc.setBackground(Color.white);
pc.repaint();
}
if (obj == mi12) { //SAVE
object = 3;
}
if (obj == mi13) { //QUIT
dispose();
}
if (obj == mi21) { //BACKGROUND
pc.setBackground(color);
}
if (obj == mi51) { //RECTANGLE 5*5
a = 5;
b = 5;
object = 1;
}
if (obj == mi52) { //RECTANGLE 10*10
a = 10;
b = 10;
object = 1;
}
if (obj == mi53) { //RECTANGLE 15*15
a = 15;
b = 15;
object = 1;
}
if (obj == mi71) { //CIRCLE 5*5
a = 5;
b = 5;
object = 2;
}
if (obj == mi72) { //CIRCLE 10*10
a = 10;
b = 10;
object = 2;
}
if (obj == mi73) { //CIRCLE 15*15
a = 15;
b = 15;
object = 2;
}
if (obj == mi31) { //BLACK
color = Color.black;
}
if (obj == mi32) { //BLUE
color = Color.blue;
}
if (obj == mi33) { //CYAN
color = Color.cyan;
}
if (obj == mi34) { //DARK GRAY
color = Color.darkGray;
}
if (obj == mi35) { //GRAY
color = Color.gray;
}
if (obj == mi36) { //LIGHT GRAY
color = Color.lightGray;
}
if (obj == mi37) { //GREEN
color = Color.green;
}
if (obj == mi38) { //MAGENTA
color = Color.magenta;
}
if (obj == mi39) { //ORANGE
color = Color.orange;
}
if (obj == mi391) { //PINK
color = Color.pink;
}
if (obj == mi392) { //RED
color = Color.red;
}
if (obj == mi393) { //YELLOW
color = Color.yellow;
}
if (obj == mi394) { //ERASER (WHITE)
color = Color.white;
}
if (obj == mi395) { //ERASER (COLOR OF THE BACKGROUND)
color = color;
}
}
}
class PaintCanvas extends Canvas {
public void paint(Graphics g){
Dimension d = getSize();
int w = d.width;
int h = d.height;
return img;
}
class Waechter_Maus extends MouseAdapter{
public void mouseClicked(MouseEvent e){
Graphics g = getGraphics();
int xPos=e.getX();
int yPos=e.getY();
g.setColor(color);
if (object == 1){
g.fillRect((xPos-(a/2)),(yPos-(b/2)),a,b);
}
if (object == 2) {
g.fillOval((xPos-(a/2)),(yPos-(b/2)),a,b);
}
if (object == 3) {
savePicture(paintComponent(), „screen.png“);public void savePicture(BufferedImage img, String file) {
ImageIO.write(img, „png“, new File(file));
}catch (IOException e) {
e.printStackTrace();
}
}}
}
}
}
class Waechter_MausBewegung extends MouseMotionAdapter{
public void mouseDragged(MouseEvent e) {
Graphics g = getGraphics();
int xPos=e.getX();
int yPos=e.getY();
g.setColor(color);
g.fillOval((xPos-(a/2)),(yPos-(b/2)),a,b);
}
}
public PaintCanvas(){
Waechter_Maus wmaus = new Waechter_Maus();
this.addMouseListener(wmaus);
Waechter_MausBewegung wmotionmaus = new Waechter_MausBewegung();
this.addMouseMotionListener(wmotionmaus);
}
}
public static void main(String[] args) {
(new Paint()).setVisible(true);
}
}