-
Java Applikation
Hey Leute... Ich bastel hier an nem Programm rum (ist eher so nach dem Steinbruch Prinzip als nach irgendeinem anderen [Schule]) und komme nicht wirklich weiter....
Ich hab mir 2 Frames erstellen lassen.. eines mit einem Canvas in dem ein Polygon nach den Mauskoordinaten Gezeichnet wird und ein zweiter von dem aus die farbe der Linie geregelt werde kann (sollte ;-) ) ...allerdings bekomme ich das mit dem Farbwechsel nicht hin, da die Variablen nicht über die Klassen hinaus genutzt werden können... Vielleicht hat ja jemand ne Idee oder kann mir sogar sagen wie es funktionieren könnte (nicht über die leere if schleife wundern... es funktionierte nicht und ich wollte es nicht ganz wegmachen ;-) )
Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.awt.event.*;
class Farben extends JFrame implements ActionListener{
public Farben(){
GridLayout myLayout = new GridLayout(4,1);
setLayout(myLayout);
setPreferredSize(new Dimension(100, 500)); //Bestimmt Größe
setLocation( 700, 200 ); // Hier wird die Position des JFrames festgelegt
Button bRot=new Button("Rot"); //erstellt einen Button
bRot.setBackground(Color.red); //Farbe des Buttons
add(bRot); //fügt dem JFrame den Button hinzu
bRot.addActionListener(this);
Button bBlau=new Button("Blau"); //erstellt einen Button
bBlau.setBackground(Color.blue); //Farbe des Buttons
add(bBlau); //fügt dem JFrame den Button hinzu
bBlau.addActionListener(this);
Button bGelb=new Button("Gelb"); //erstellt einen Button
bGelb.setBackground(Color.yellow); //Farbe des Buttons
add(bGelb); //fügt dem JFrame den Button hinzu
bGelb.addActionListener(this);
Button bGruen=new Button("Grün"); //erstellt einen Button
bGruen.setBackground(Color.green); //Farbe des Buttons
add(bGruen); //fügt dem JFrame den Button hinzu
bGruen.addActionListener(this);
pack();
setVisible(true); //Macht das Frame Sichtbar
}
public void actionPerformed(ActionEvent e){
if (e.getActionCommand() == "Rot")
{
}
if (e.getActionCommand() == "Blau")
{
}
}
}
public class ZeichenCanvas extends JPanel { //erstellt die Klasse ZeichenCanvas mit den Eigenschaften von JPanel
public ArrayList koordinaten; // erstellt Array
public ZeichenCanvas() { //erstellt die Zeichenfläche
super();
koordinaten = new ArrayList();
setSize(400, 400);
addMouseListener(new ZeichenListener(this)); //fügt den Mouse Listener hinzu
}
protected void paintComponent(Graphics g) { //Die Funktion des Zeichnens
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
if(koordinaten.isEmpty()){ //Beginnt die Funktion von vorne wenn der Array leer ist
return;
}
Point last = null;
for(Point p: koordinaten){ //Schleife
if(last==null) last = p; //Erstes Koordinatenpaar (last) wird dem Koordinaten von p zugeteilt
int x = (int) p.getX(); //x,y Koordinaten werden ermitttelt
int y = (int) p.getY();
g2.setColor(Color.blue); //Linienfarbe
g2.drawLine((int) last.getX(), (int) last.getY(),x,y); //Zeichnen einer Linie zwischen x,y und last.x, last.y
last = p; // Die letzten Koordinaten werden p zugewiesen
}
}
private class ZeichenListener implements MouseListener{ //Funktion zum löschen der Zeichenfläche
ZeichenCanvas dc;
public ZeichenListener(ZeichenCanvas dc) { //Canvas wird benannt (dc)
this.dc = dc;
}
public void mouseClicked(MouseEvent e) {
if(e.getButton()==MouseEvent.BUTTON2){ //Wenn die Maustaste 2 gedrückt wird:
dc.koordinaten.clear(); //- werden die Koordinaten aus dem Array gelöscht
dc.repaint(); // -wird die Zeichenfläche gelöscht
return;
}
dc.koordinaten.add(e.getPoint()); //andernfalls
dc.repaint(); //
}
public void mousePressed(MouseEvent e) {} //Stummelfuntionen ...
public void mouseReleased(MouseEvent e) {} // ...
public void mouseEntered(MouseEvent e) {} // ...
public void mouseExited(MouseEvent e) {} // ...
}
public static void main(String[] args) { //Main Funktion
ZeichenCanvas c = new ZeichenCanvas(); //Erstellt Canvas
JFrame m = new JFrame("ZeichenFenster"); //Erstellt JFrame
m.setPreferredSize(new Dimension(500, 500)); //Bestimmt Größe
m.setLocation( 200, 200 ); // Hier wird die Position des JFrames festgelegt
m.add(c); //Fügt den Canvas hinzu
m.pack();
m.setVisible(true); //Macht das Fenster sichtbar
Farben f= new Farben(); //Erstellt 2tes JFrame
}
}
Schonmal Danke im Vorraus
Till
-
AW: Java Applikation
Hab jetzt eine Möglichkeit entdeckt dies zu tun.. allerdings hilft es nichts, da er die Variable die übergeben werden soll als eine statische haben will... somit ist sie nciht mehr von den Buttons beeinflussbar ...
Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.awt.event.*;
class Farben extends JFrame implements ActionListener{
public Farben(){
GridLayout myLayout = new GridLayout(4,1);
setLayout(myLayout);
setPreferredSize(new Dimension(100, 500)); //Bestimmt Größe
setLocation( 700, 200 ); // Hier wird die Position des JFrames festgelegt
Button bRot=new Button("Rot"); //erstellt einen Button
bRot.setBackground(Color.red); //Farbe des Buttons
add(bRot); //fügt dem JFrame den Button hinzu
bRot.addActionListener(this);
Button bBlau=new Button("Blau"); //erstellt einen Button
bBlau.setBackground(Color.blue); //Farbe des Buttons
add(bBlau); //fügt dem JFrame den Button hinzu
bBlau.addActionListener(this);
Button bGelb=new Button("Gelb"); //erstellt einen Button
bGelb.setBackground(Color.yellow); //Farbe des Buttons
add(bGelb); //fügt dem JFrame den Button hinzu
bGelb.addActionListener(this);
Button bGruen=new Button("Grün"); //erstellt einen Button
bGruen.setBackground(Color.green); //Farbe des Buttons
add(bGruen); //fügt dem JFrame den Button hinzu
bGruen.addActionListener(this);
pack();
setVisible(true); //Macht das Frame Sichtbar
}
int x;
static int Farbe = 1; <----------HIER
public static int getFarbe() <-----------UND HIER
{
return Farbe;
}
public void actionPerformed(ActionEvent e){
if (e.getActionCommand() == "Rot")
{
Farbe = 2;
}
if (e.getActionCommand() == "Blau")
{
Farbe= 1;
}
}
}
public class ZeichenCanvas extends JPanel { //erstellt die Klasse ZeichenCanvas mit den Eigenschaften von JPanel
int i = Farben.getFarbe();
public ArrayList koordinaten; // erstellt Array
public ZeichenCanvas() { //erstellt die Zeichenfläche
super();
koordinaten = new ArrayList();
setSize(400, 400);
addMouseListener(new ZeichenListener(this)); //fügt den Mouse Listener hinzu
}
protected void paintComponent(Graphics g) { //Die Funktion des Zeichnens
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
if(koordinaten.isEmpty()){ //Beginnt die Funktion von vorne wenn der Array leer ist
return;
}
Point last = null;
for(Point p: koordinaten){ //Schleife
if(last==null) last = p; //Erstes Koordinatenpaar (last) wird dem Koordinaten von p zugeteilt
int x = (int) p.getX(); //x,y Koordinaten werden ermitttelt
int y = (int) p.getY();
if (i==1){ <--------HIER WIRD DIE VARIABLE GENUTZT
g2.setColor(Color.red);
}
if(i==2){
g2.setColor(Color.blue);
}
;
g2.drawLine((int) last.getX(), (int) last.getY(),x,y); //Zeichnen einer Linie zwischen x,y und last.x, last.y
last = p; // Die letzten Koordinaten werden p zugewiesen
}
}
private class ZeichenListener implements MouseListener{ //Funktion zum löschen der Zeichenfläche
ZeichenCanvas dc;
public ZeichenListener(ZeichenCanvas dc) { //Canvas wird benannt (dc)
this.dc = dc;
}
public void mouseClicked(MouseEvent e) {
if(e.getButton()==MouseEvent.BUTTON2){ //Wenn die Maustaste 2 gedrückt wird:
dc.koordinaten.clear(); //- werden die Koordinaten aus dem Array gelöscht
dc.repaint(); // -wird die Zeichenfläche gelöscht
return;
}
dc.koordinaten.add(e.getPoint()); //andernfalls
dc.repaint(); //
}
public void mousePressed(MouseEvent e) {} //Stummelfuntionen ...
public void mouseReleased(MouseEvent e) {} // ...
public void mouseEntered(MouseEvent e) {} // ...
public void mouseExited(MouseEvent e) {} // ...
}
public static void main(String[] args) { //Main Funktion
ZeichenCanvas c = new ZeichenCanvas(); //Erstellt Canvas
JFrame m = new JFrame("ZeichenFenster"); //Erstellt JFrame
m.setPreferredSize(new Dimension(500, 500)); //Bestimmt Größe
m.setLocation( 200, 200 ); // Hier wird die Position des JFrames festgelegt
m.add(c); //Fügt den Canvas hinzu
m.pack();
m.setVisible(true);
Farben f= new Farben(); //Macht das Fenster sichtbar }
}
So... entschuldigt mein Großschreiben im Code aber es soll nur verdeutlichen welchen Teile ich genau meine ... ich weiß ansonsten nicht wirklich weiter wie ich das sonst mach könnte...
Wäre nett wenn mir jemand helfen könnte...
-
AW: Java Applikation
Also das problem ist so alt wie die OOP selber. Das hat nichts wirklich mit Programieren zu tun, sondern mit design patterns. Also wenn dich das interresiert, kann ich dir das "handbuch dr javaprogrammierung" empfehlen, ist nen freeware ebook, dort gibt es mehr als 100 seiten und mehrere kapitel zu design patterns. Habe den code jetzt nicht zeile für zeile gelesen, aber letztendes geht es ja darum, dass du 2 instanzen von klassen hast (=objekte) und die miteinander interagieren müssen. Dieser statische weg, ist eine möglichkeit, jedoch sind die entsprechenden variablen und die methoden von der klasse dann losgelöst, das heißt, wenn du ein objekt instazierst, gehören die methoden nicht dazu ... die methoden gibt es halt immer unabhänig von der existenz oder quantität einer klasse.
Lösung für dein problem ist nur eine geschickte hierachie deiner klassen. letztendes müssen die zwei klassen entweder ein instanz von der anderen dabei haben, oder es muss eine dritte klasse "konfiguration" geben, welche du instazierst und den beiden klassen im konstruktor quasi übergibst. In diesem zusammenhang wird gerne UML genutzt um solche klassenabhänigkeiten aufzulösen. wenn dus nicht verstanden hast, was ich meine, geb ich dir mal nen kleines beispiel. aber ... wie gesagt zieh dir mal das buch rein, dass ist gut. hat zwar 1500 seiten, aber ich hatte das damals auch in 3 tagen gelesen, weil es wirklich super geschrieben ist.
-
AW: Java Applikation
Moin! Danke schonmal für die Antwort.. das Buch werd ich mir mal zu Herzen nehmen, ich würd mich natürlich auch über ein kleines beispiel freuen wie du 2 Klassen in einer "vereinst" (werden dabei die Variablen+ihre Werte mitübertragen?)
Till
-
AW: Java Applikation
Hallo, die OOP ist sehr komplex und bietet viele möglichkeiten, hier ein Ansatz der auch als Beans bezeichnet wird.
Du hast Klasse A und Klasse B. Klasse C sieht in etwa so aus:
Code:
class C {
TYP variablenname; // <--- hier deine variable, die du überall brauchst
C() {
}
void setVariablenname(TYP a) {
variablenname=a;
}
TYP getVariablenname() {
return variablenname;
}
}
Klasse A und B erweiterst du so hingehend:
Code:
class A {
C blabla = null; // hier ne instanz von C
setBlabla(C a) {
blabla =a;
}
}
Bei B machste das analog.
Im Hauptprogramm kannste die sachen dann wie folgt machen.
Code:
A a = new A();
B b = new B();
C c = new C();
a.setC(c);
b.setC(c);
und schon benützen beide ein und dieselbe Instanz von C, womit variablen ausgetauscht werden können.
HINWEIS: Softwaretechnikern streubt diese vorgehen die Haare, es ist aber einfach, simple, schnell und übersichtlich. Für private Zwecke also vollkommen ausreichend.