C
chriz_h
Gast
Servus miteinander,
ich sitze seit geraumer Zeit vor meinem Java Buch und habe mich bisher auch strikt an dieses gehalten. Nur leider stosse ich immer wieder auf Probleme, sobald ich eigene Klassen und Methoden in vorgegebene Programme einbauen will. So auch mit folgendem Zeichenprogramm.Okay, die Idee u. der Ansatz sind aus nem Buch, aber ich war schon fleissig und habe eins zwei Klassen selbst implementiert. Wenn ich nun Zeile 125 bis 133 + 141 einbaue bekomm ich ne Fehlermeldung vom Compiler, die mir nicht schluessig ist. Naja, jedenfalls soll diese Klasse den Canvas Inhalt loeschen, so dass man neu zeichnen kann. Kann mir jemand sagen, warum das so nicht funktioniert?
mfG
ChRizZ
ich sitze seit geraumer Zeit vor meinem Java Buch und habe mich bisher auch strikt an dieses gehalten. Nur leider stosse ich immer wieder auf Probleme, sobald ich eigene Klassen und Methoden in vorgegebene Programme einbauen will. So auch mit folgendem Zeichenprogramm.Okay, die Idee u. der Ansatz sind aus nem Buch, aber ich war schon fleissig und habe eins zwei Klassen selbst implementiert. Wenn ich nun Zeile 125 bis 133 + 141 einbaue bekomm ich ne Fehlermeldung vom Compiler, die mir nicht schluessig ist. Naja, jedenfalls soll diese Klasse den Canvas Inhalt loeschen, so dass man neu zeichnen kann. Kann mir jemand sagen, warum das so nicht funktioniert?
mfG
ChRizZ
Code:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class malprogramm extends JFrame{
meineCanvas m_malflaeche; //zum bemalen
ButtonGroup m_formauswahl; //aktuelle Form
int m_Xpos1, m_Ypos1; //aktuelle mausposition
int m_Xpos2, m_Ypos2;
public static void main(String[]args){
malprogramm Fenster = new malprogramm("ChRizZ-PAINT");
Fenster.pack();
Fenster.setSize(400,350);
Fenster.setResizable(true);
Fenster.show();
}
//Konstruktor fuer Malflaeche und radiobuttons
malprogramm(String titel){
super(titel);
//einen LayoutManager einrichten
getContentPane().setLayout(new FlowLayout());
m_malflaeche = new meineCanvas();
getContentPane().add(m_malflaeche);
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(5,1,20,20));
//Optionsfelder zur Formauswahl
m_formauswahl = new ButtonGroup();
//1. Optionsfelder erzeugen
JRadioButton opt1 = new JRadioButton("Kreis",false);
JRadioButton opt2 = new JRadioButton("Scheibe",false);
JRadioButton opt3 = new JRadioButton("Rechteck",false);
JRadioButton opt4 = new JRadioButton("Freihand",false);
JButton opt5 = new JButton("clean");
//2. Befehlsnamen fuer Optionfelder
opt1.setActionCommand("Kreis");
opt2.setActionCommand("Scheibe");
opt3.setActionCommand("Rechteck");
opt4.setActionCommand("Freihand");
//3. Optionfelder in ButtonGroup aufnehmen
m_formauswahl.add(opt1);
m_formauswahl.add(opt2);
m_formauswahl.add(opt3);
m_formauswahl.add(opt4);
//m_formauswahl.add(opt5);
//Optionsfelder in Panel aufnehmen
panel.add(opt1);
panel.add(opt2);
panel.add(opt3);
panel.add(opt4);
panel.add(opt5);
getContentPane().add(panel);
//Fensterschliesser als innere classe anlegen
class meinWindowAdapter extends WindowAdapter{
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
//schliesslich noch der WindowListener
addWindowListener(new meinWindowAdapter());
}
class meineCanvas extends Canvas{
class meinMouseAdapter extends MouseAdapter{
public void mousePressed(MouseEvent e){
//die aktuelle Pos. der Mouse merken
m_Xpos1=e.getX();
m_Ypos1=e.getY();
}
public void mouseReleased(MouseEvent e){
m_Xpos2=e.getX();
m_Ypos2=e.getY();
repaint();
}
}
public void update(Graphics g){
paint(g);
}
class meinMouseMotionAdapter extends MouseMotionAdapter{
public void mouseDragged(MouseEvent e){
ButtonModel aktuell;
String label;
//herausfinden welche box gerade aktiviert ist
aktuell = m_formauswahl.getSelection();
if (aktuell == null)
return;
label = aktuell.getActionCommand();
//wenn freihand gewaehlt, mousepos. merken
if(label.equals("Freihand")){
Graphics tmp = m_malflaeche.getGraphics();
m_Xpos1=e.getX();
m_Ypos1=e.getY();
tmp.drawOval(m_Xpos1,m_Ypos1,2,2);
}
}
}
class meinActionLauscher implements ActionListener{
public void actionPerformed(ActionEvent e){
String label;
label = e.getActionCommand();
if(label.equals("clean"))
m_malflaeche.repaint();
}
}
//meineCanvas Konstruktor setzt Farben & implementiert das Mousehandling
meineCanvas(){
addMouseListener(new meinMouseAdapter());
addMouseMotionListener(new meinMouseMotionAdapter());
addActionListener(new meinActionLauscher());
setBackground(Color.black);
setForeground(Color.yellow);
}
//in dieser Methode wird gezeichnet
public void paint(Graphics g){
String label;
ButtonModel aktuell = null;
//Stellt die angeklickte Form fest
aktuell = m_formauswahl.getSelection();
//entsprechend handeln
if(aktuell == null)
return;
//int w = (int) (Math.random()*300);
//int h = (int) (Math.random()*300);
label = aktuell.getActionCommand();
if(label.equals("Kreis")){
Graphics tmp = m_malflaeche.getGraphics();
g.drawOval(m_Xpos1,m_Ypos1,(m_Xpos2-m_Xpos1)*2,(m_Xpos2-m_Xpos1)*2);
}
if(label.equals("Scheibe"))
g.fillOval(m_Xpos1,m_Ypos1,(m_Xpos2-m_Xpos1)*2,(m_Ypos2-m_Ypos1)*2);
if(label.equals("Rechteck"))
g.drawRect(m_Xpos1,m_Ypos1,(m_Xpos2-m_Xpos1)*2,(m_Ypos2-m_Ypos1)*2);
}
//Diese Methode liefert die minimale Groesse der Canvas
public Dimension getMinimumSize(){
return new Dimension(300,300);
}
//Lieblingsgroesse auf Minimalgroesse setzen
public Dimension getPreferredSize(){
return getMinimumSize();
}
}
}