PDA

View Full Version : Problema di compilazione (Java)


mariade
15-03-2007, 10:40
Ciao ragazzi, volevo un vostro aiuto a capire dov'e' l'errore. Qui c'e' il codice, quando do' il comando javac da dos mi appare questo errore:
"C:\java>javac ShapeDrawJPanel.java
ShapeDrawJPanel.java:56: cannot find symbol
symbol : method getContentPane()
location: class ShapeDrawJPanel
getContentPane().setBackground(new Color(255,255,255));
^"

Volevo capire appunto cosa e' che sbaglio. Grazie mille!

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

public class ShapeDrawJPanel extends JPanel {

private final int SHAPETYPES=3;
private int shapeType=0;
private String shapeTypes[]= {"Line","Oval", "Rectangle"};
private int numShapes=0; private int XYValues[] = new int[4];
private Shape[] shapes = new Shape[100];
private JLabel label;
private JComboBox shapesComboBox;
private JCheckBox filled;
private Container container;
private JPanel lowerRow;

public ShapeDrawJPanel() {


addMouseListener( new MouseClickHandler());


lowerRow = new JPanel();
label = new JLabel("You have to select the type of shape to draw");
lowerRow.add(label);

shapesComboBox = new JComboBox(shapeTypes);
shapesComboBox.setSelectedIndex(0);
lowerRow.add(shapesComboBox);
container.add(lowerRow, BorderLayout.SOUTH); setSize(600,600); setVisible( true );
}

public void paint( Graphics g) {
super.paint(g);
for (int sp=0;sp< shapes.length ; sp++) {
if(shapes[sp]!=null) {
shapes[sp].draw(g);
}}}

public void createShape(int index) {

numShapes++;
switch (index) {
case 0: shapes[numShapes] = new Line(XYValues); break;
case 1: shapes[numShapes] = new Oval(XYValues); break;
case 2: shapes[numShapes] = new Rectangle(XYValues); break;
}}

private class MouseClickHandler extends MouseAdapter {
public void mousePressed (MouseEvent event) {
XYValues[0] = event.getX();
XYValues[1] = event.getY(); }
}
public void mouseReleased (MouseEvent event) {
getContentPane().setBackground(new Color(255,255,255));
XYValues[2] = event.getX();
XYValues[3] = event.getY();
createShape(shapesComboBox.getSelectedIndex());
repaint();
}}

spv42
15-03-2007, 11:00
Mi sembra che getContentPane() non sia un metodo visibile da JPanel!!!

Ecco perchè ti dà errore.

mariade
15-03-2007, 11:53
Mi sembra che getContentPane() non sia un metodo visibile da JPanel!!!

Ecco perchè ti dà errore.

Grazie, ora si compila. ma c'e' un altro errore quando eseguo il comando java:

java ShapeDraw per l'esattezza, che sarebbe il test class per ShapeDrawJFrame( l'ho cambiato). L'errore e':
"
C:\java>java ShapeDraw
Exception in thread "main" java.lang.NullPointerException
at ShapeDrawJFrame.<init>(ShapeDrawJFrame.java:37)
at ShapeDraw.main(ShapeDraw.java:10)"

Non capisco cosa devo fare.

Vi riporto i due codici corretti:

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

public class ShapeDrawJFrame extends JFrame {

private final int SHAPETYPES=3;
private int shapeType=0;
private String shapeTypes[]= {"Line","Oval", "Rectangle"};
private int numShapes=0;
private int XYValues[] = new int[4];
private Shape[] shapes = new Shape[100];
private JLabel label;
private JComboBox shapesComboBox;
private JCheckBox filled;
private Container container;
private JPanel lowerRow;
private JButton button;

public ShapeDrawJFrame() {


addMouseListener( new MouseClickHandler());
getContentPane().setBackground(new Color(255,255,255));

lowerRow = new JPanel();
label = new JLabel("You have to select the type of shape to draw");
lowerRow.add(label);
button = new JButton("UNDO");
lowerRow.add(button);



shapesComboBox = new JComboBox(shapeTypes);
shapesComboBox.setSelectedIndex(0);
lowerRow.add(shapesComboBox);
container.add(lowerRow, BorderLayout.SOUTH); setSize(600,600); setVisible( true );
}

public void paint( Graphics g) {
super.paint(g);
for (int sp=0;sp< shapes.length ; sp++) {
if(shapes[sp]!=null) {
shapes[sp].draw(g);
}}}

public void createShape(int index) {

numShapes++;
switch (index) {
case 0: shapes[numShapes] = new Line(XYValues); break;
case 1: shapes[numShapes] = new Oval(XYValues); break;
case 2: shapes[numShapes] = new Rectangle(XYValues); break;
}}

private class MouseClickHandler extends MouseAdapter {
public void mousePressed (MouseEvent event) {
XYValues[0] = event.getX();
XYValues[1] = event.getY(); }
}
public void mouseReleased (MouseEvent event) {
XYValues[2] = event.getX();
XYValues[3] = event.getY();
createShape(shapesComboBox.getSelectedIndex());
repaint();
}


}

**********

import javax.swing.JFrame;

public class ShapeDraw

{

//execute application
public static void main(String args[]) {

ShapeDrawJFrame shapeDrawJFrame = new ShapeDrawJFrame();
shapeDrawJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

shapeDrawJFrame.setVisible( true );
}}


Grazie tante in anticipo!:)

spv42
15-03-2007, 12:20
L'errore è su questa linea:

container.add(lowerRow, BorderLayout.SOUTH);

ma il container non è stato inizializzato è null.

Prova a fare :

container = getContentPane() prima di quell'istruzione

P.S Quando posti il codice, includilo nei tag "" e "chiudi [code]"

esempio:
[code]
public ShapeDrawJFrame() {


addMouseListener( new MouseClickHandler());
getContentPane().setBackground(new Color(255,255,255));

mariade
15-03-2007, 12:52
L'errore è su questa linea:

container.add(lowerRow, BorderLayout.SOUTH);

ma il container non è stato inizializzato è null.

Prova a fare :

container = getContentPane() prima di quell'istruzione

P.S Quando posti il codice, includilo nei tag "" e "chiudi [code]"

esempio:
[code]
public ShapeDrawJFrame() {


addMouseListener( new MouseClickHandler());
getContentPane().setBackground(new Color(255,255,255));



Ho corretto cosi':

addMouseListener( new MouseClickHandler());
container = getContentPane()
container.setBackground(new Color(255,255,255));

ma l'errore non va via...:confused:

spv42
15-03-2007, 13:29
Ho corretto cosi':

addMouseListener( new MouseClickHandler());
container = getContentPane()
container.setBackground(new Color(255,255,255));

ma l'errore non va via...:confused:

lo stesso errore?

prova a mettere un punto e virgola container = getContentPane();

mariade
15-03-2007, 13:43
lo stesso errore?

prova a mettere un punto e virgola container = getContentPane();

nulla...uguale.
Grazie tante cmq!;)

spv42
15-03-2007, 14:14
A me quelle due classi non le compila neanche.

Ma ci mancano altri pezzi?

mariade
15-03-2007, 14:18
si, ci mancano:
1.


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

public abstract class Shape {

private int x1, x2, y1, y2; private boolean isFilled = false;
public Shape () {setX1(0); setY1(0); setX2(0); setY2(0);}
public Shape (int val1, int val2, int val3, int val4) { setX1(val1); setY1(val2); setX2(val3); setY2(val4);}
public Shape (int val1,int val2,int val3,int val4,boolean fill) {setX1(val1); setY1(val2);setX2(val3);setY2(val4); isFilled = fill;}
public Shape (int vals[]) {setX1(vals[0]); setY1(vals[1]); setX2(vals[2]); setY2(vals[3]); }
public Shape (int vals[], boolean fill) {setX1(vals[0]); setY1(vals[1]); setX2(vals[2]); setY2(vals[3]); isFilled = fill; }
public void setX1(int val) {x1 = ( val >= 0 ? val : 0 );} public void setX2(int val) {x2 = ( val >= 0 ? val : 0 );}
public void setY1(int val) {y1 = ( val >= 0 ? val : 0 );} public void setY2(int val) {y2 = ( val >= 0 ? val : 0 );}
public void setFilled(boolean fill) {isFilled=fill;}
public int getX1() {return x1;} public int getX2() {return x2;}
public int getY1() {return y1;} public int getY2() {return y2;}
public boolean getFilled() {return isFilled;}
public abstract void draw (Graphics g);

}

2.

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

public abstract class BoundedShape extends Shape {
public BoundedShape () {super();}
public BoundedShape (int val1, int val2, int val3, int val4) {super(val1,val2,val3,val4);}
public BoundedShape (int val1, int val2, int val3, int val4, boolean fill) {super(val1,val2,val3,val4, fill);}
public BoundedShape (int val[]) {super(val); }
public BoundedShape (int val[], boolean fill) {super(val, fill); }
public int getUpperLeftX() { return Math.min(getX1(), getX2()); }
public int getUpperLeftY() { return Math.min(getY1(), getY2()); }
public int getWidth() {return Math.abs(getX1() - getX2());}
public int getHeight() {return Math.abs(getY1() - getY2());}
}

3.

import java.awt.*; import javax.swing.*;
public class Line extends Shape {
public Line () {super();}
public Line (int val1, int val2, int val3, int val4) {super(val1,val2,val3,val4); }
public Line (int val[]) {super(val);}
public void draw (Graphics g) {g.drawLine(getX1(),getY1(),getX2(), getY2()); }
}

4.

import java.awt.*; import javax.swing.*;
public class Oval extends BoundedShape {
public Oval () {super();}
public Oval (int val1, int val2, int val3, int val4) {super(val1,val2,val3,val4);}
public Oval (int val1, int val2, int val3, int val4, boolean fill) {super(val1,val2,val3,val4, fill);}
public Oval (int val[]) {super(val);}
public Oval (int val[], boolean fill) {super(val, fill);}
public void draw (Graphics g) {
if(getFilled())
g.drawOval(getUpperLeftX(),getUpperLeftY(),getWidth(),getHeight());
else
g.fillOval(getUpperLeftX(),getUpperLeftY(),getWidth(),getHeight());
}
}

5.

import java.awt.*; import javax.swing.*;
public class Rectangle extends BoundedShape {
public Rectangle () {super();}
public Rectangle (int val1, int val2, int val3, int val4) {super(val1,val2,val3,val4);}
public Rectangle (int val1, int val2, int val3, int val4, boolean fill) {super(val1,val2,val3,val4, fill);}
public Rectangle (int val[]) {super(val);}
public Rectangle (int val[], boolean fill) {super(val, fill);}
public void draw (Graphics g) {
if(getFilled())
g.drawRect(getUpperLeftX(),getUpperLeftY(),getWidth(),getHeight());
else
g.fillRect(getUpperLeftX(),getUpperLeftY(),getWidth(),getHeight());
}
}

spv42
15-03-2007, 14:47
si, ci mancano:
1.


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

public abstract class Shape {

private int x1, x2, y1, y2; private boolean isFilled = false;
public Shape () {setX1(0); setY1(0); setX2(0); setY2(0);}
public Shape (int val1, int val2, int val3, int val4) { setX1(val1); setY1(val2); setX2(val3); setY2(val4);}
public Shape (int val1,int val2,int val3,int val4,boolean fill) {setX1(val1); setY1(val2);setX2(val3);setY2(val4); isFilled = fill;}
public Shape (int vals[]) {setX1(vals[0]); setY1(vals[1]); setX2(vals[2]); setY2(vals[3]); }
public Shape (int vals[], boolean fill) {setX1(vals[0]); setY1(vals[1]); setX2(vals[2]); setY2(vals[3]); isFilled = fill; }
public void setX1(int val) {x1 = ( val >= 0 ? val : 0 );} public void setX2(int val) {x2 = ( val >= 0 ? val : 0 );}
public void setY1(int val) {y1 = ( val >= 0 ? val : 0 );} public void setY2(int val) {y2 = ( val >= 0 ? val : 0 );}
public void setFilled(boolean fill) {isFilled=fill;}
public int getX1() {return x1;} public int getX2() {return x2;}
public int getY1() {return y1;} public int getY2() {return y2;}
public boolean getFilled() {return isFilled;}
public abstract void draw (Graphics g);

}

2.

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

public abstract class BoundedShape extends Shape {
public BoundedShape () {super();}
public BoundedShape (int val1, int val2, int val3, int val4) {super(val1,val2,val3,val4);}
public BoundedShape (int val1, int val2, int val3, int val4, boolean fill) {super(val1,val2,val3,val4, fill);}
public BoundedShape (int val[]) {super(val); }
public BoundedShape (int val[], boolean fill) {super(val, fill); }
public int getUpperLeftX() { return Math.min(getX1(), getX2()); }
public int getUpperLeftY() { return Math.min(getY1(), getY2()); }
public int getWidth() {return Math.abs(getX1() - getX2());}
public int getHeight() {return Math.abs(getY1() - getY2());}
}

3.

import java.awt.*; import javax.swing.*;
public class Line extends Shape {
public Line () {super();}
public Line (int val1, int val2, int val3, int val4) {super(val1,val2,val3,val4); }
public Line (int val[]) {super(val);}
public void draw (Graphics g) {g.drawLine(getX1(),getY1(),getX2(), getY2()); }
}

4.

import java.awt.*; import javax.swing.*;
public class Oval extends BoundedShape {
public Oval () {super();}
public Oval (int val1, int val2, int val3, int val4) {super(val1,val2,val3,val4);}
public Oval (int val1, int val2, int val3, int val4, boolean fill) {super(val1,val2,val3,val4, fill);}
public Oval (int val[]) {super(val);}
public Oval (int val[], boolean fill) {super(val, fill);}
public void draw (Graphics g) {
if(getFilled())
g.drawOval(getUpperLeftX(),getUpperLeftY(),getWidth(),getHeight());
else
g.fillOval(getUpperLeftX(),getUpperLeftY(),getWidth(),getHeight());
}
}

5.

import java.awt.*; import javax.swing.*;
public class Rectangle extends BoundedShape {
public Rectangle () {super();}
public Rectangle (int val1, int val2, int val3, int val4) {super(val1,val2,val3,val4);}
public Rectangle (int val1, int val2, int val3, int val4, boolean fill) {super(val1,val2,val3,val4, fill);}
public Rectangle (int val[]) {super(val);}
public Rectangle (int val[], boolean fill) {super(val, fill);}
public void draw (Graphics g) {
if(getFilled())
g.drawRect(getUpperLeftX(),getUpperLeftY(),getWidth(),getHeight());
else
g.fillRect(getUpperLeftX(),getUpperLeftY(),getWidth(),getHeight());
}
}

:mbe: azz

spv42
15-03-2007, 14:55
Cosi a me Funziona :sofico:


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

public class ShapeDrawJFrame extends JFrame {

private final int SHAPETYPES=3;
private int shapeType=0;
private String shapeTypes[]= {"Line","Oval", "Rectangle"};
private int numShapes=0;
private int XYValues[] = new int[4];
private Shape[] shapes = new Shape[100];
private JLabel label;
private JComboBox shapesComboBox;
private JCheckBox filled;
private Container container;
private JPanel lowerRow;
private JButton button;

public ShapeDrawJFrame() {


addMouseListener( new MouseClickHandler());
container = getContentPane();
container.setBackground(new Color(255,255,255));

lowerRow = new JPanel();
label = new JLabel("You have to select the type of shape to draw");
lowerRow.add(label);
button = new JButton("UNDO");
lowerRow.add(button);
shapesComboBox = new JComboBox(shapeTypes);
shapesComboBox.setSelectedIndex(0);
lowerRow.add(shapesComboBox);
container.add(lowerRow, BorderLayout.SOUTH);
setSize(600,600);
setVisible( true );
}

public void paint( Graphics g) {
super.paint(g);
for (int sp=0;sp< shapes.length ; sp++) {
if(shapes[sp]!=null) {
shapes[sp].draw(g);
}
}
}

public void createShape(int index) {

numShapes++;
switch (index) {
case 0: shapes[numShapes] = new Line(XYValues); break;
case 1: shapes[numShapes] = new Oval(XYValues); break;
case 2: shapes[numShapes] = new Rectangle(XYValues); break;
}
}

private class MouseClickHandler extends MouseAdapter {
public void mousePressed (MouseEvent event) {
XYValues[0] = event.getX();
XYValues[1] = event.getY();
}
public void mouseReleased (MouseEvent event) {
XYValues[2] = event.getX();
XYValues[3] = event.getY();
createShape(shapesComboBox.getSelectedIndex());
repaint();
}
}



}


prova con questa, al posto della tua.

mariade
15-03-2007, 15:02
GRAZIE MILLE!!! ANCHE A ME FUNZIONA ORA CON LE TUE CORREZIONI.

ORA PERO' , DATO CHE SI TRATTA DI UN PROGETTO SCOLASTICO, DEVO FINIRE DI COMPLETARLO, NEL CASO AVESSI PROBLEMI...TI FACCIO SAPERE:D

cIAO:mano:

spv42
15-03-2007, 15:09
Di Nulla.

Siamo qui apposta :D

Ok, Fammi sapere.

mariade
15-03-2007, 16:09
Ciao,

come detto prima, sto cercando di completare l'applicazione:

1. devo aggiungere piu' forme (Arcs, polygons and polylines).
2. devo aggiungere un ComboBox per scegliere i colori.
3. devo aggiungere un CheckBox per selezionare se la figura la voglio piena o no.
ti ggiungo quello che ho fatto fino ad adesso, volevo piu' o meno un aiuto, una guida per aggiungere queste ultime cose.

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

public class ShapeDrawJFrame extends JFrame {

private final int SHAPETYPES=3;
private int shapeType=0;
private String shapeTypes[]= {"Line","Oval", "Rectangle", "Arcs", "Polygons",};
private int numShapes=0;
private int XYValues[] = new int[4];
private MyShape[] shapes = new Shape[100];
private JCheckBox filled;
private boolean isFilled;
private JComboBox shapesComboBox;
private JComboBox ColorChoice;
private Container container;
private JPanel lowerRow;
private JButton button;

public ShapeDrawJFrame() {


addMouseListener( new MouseClickHandler());
container = getContentPane();
container.setBackground(new Color(255,255,255));


lowerRow = new JPanel();
shapesComboBox = new JComboBox(shapeTypes);
shapesComboBox.setSelectedIndex(0);
lowerRow.add(shapesComboBox);
colorChoice = new JComboBox();
colorChoice.setSelectedIndex(0);
colorChoice.addItem("Black");
colorChoice.addItem("Red");
colorChoice.addItem("Green");
colorChoice.addItem("Blue");
colorChoice.addItem("Cyan");
colorChoice.addItem("Magenta");
colorChoice.addItem("Yellow");
colorChoice.addItem("White");
colorChoice.setBackground(Color.white);
lowerRow.add(colorChoice);

filled = new JCheckBox(boolean.isFilled);
lowerRow.add(filled);

button = new JButton("UNDO");
lowerRow.add(button);

container.add(lowerRow, BorderLayout.SOUTH);
setSize(600,600);
setVisible( true );
}

public void paint( Graphics g) {
super.paint(g);
for (int sp=0;sp< shapes.length ; sp++) {
if(shapes[sp]!=null) {
shapes[sp].draw(g);
}
}
}

public void createShape(int index) {

numShapes++;
switch (index) {
case 0: shapes[numShapes] = new Line(XYValues); break;
case 1: shapes[numShapes] = new Oval(XYValues); break;
case 2: shapes[numShapes] = new Rectangle(XYValues); break;
case 3: shapes[numShapes] = new Arcs(XYValues); break;
case 4: shapes[numShapes] = new Polygons(XYValues); break;
}
}

private class MouseClickHandler extends MouseAdapter {
public void mousePressed (MouseEvent event) {
XYValues[0] = event.getX();
XYValues[1] = event.getY();
}
public void mouseReleased (MouseEvent event) {
XYValues[2] = event.getX();
XYValues[3] = event.getY();
createShape(shapesComboBox.getSelectedIndex());
repaint();
}
}



}

spv42
15-03-2007, 16:30
Ok, stai andando avanti bene.

Però l'applicazione devi farla tu, così avrai più soddisfazione quando avrai finito.

P.P.S Quando posti il codice, includilo nei tag "[code]" e "chiudi [code]"

mariade
16-03-2007, 15:20
Ok, stai andando avanti bene.

Però l'applicazione devi farla tu, così avrai più soddisfazione quando avrai finito.

P.P.S Quando posti il codice, includilo nei tag "[code]" e "chiudi [code]"

Ciao,

sto andando avanti nel progetto. Ho creato cosi' il codice per disegnare l'arco. Non so se e' giusto, soprattutto nella parte del startAngle e del arcAngle, ma nel momento in cui lo compilo mi vien fuori questo errore:

C:\java\project>javac Arc.java
Error occurred during initialization of VM
java.lang.OutOfMemoryError: unable to create new native thread

Non capisco che significa. Aggiungo che ho cambiato la superclass da Shape in MyShape come il professore mi chiedeva.




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

public abstract class Arc extends MyShape {
public Arc () {super();}
public Arc (int val1, int val2, int val3, int val4, int val5, int val6) {super(val1,val2,val3,val4,val5,val6);}
public Arc (int val1, int val2, int val3, int val4, int val5, int val6, boolean fill) {

super(val1,val2,val3,val4,val5,val6,fill);}


public Arc (int val[]) {super(val); }
public Arc (int val[], boolean fill) {super(val, fill); }
public int getUpperLeftX() { return Math.min(getX1(), getX2()); }
public int getUpperLeftY() { return Math.min(getY1(), getY2()); }
public int getWidth() {return Math.abs(getX1() - getX2());}
public int getHeight() {return Math.abs(getY1() - getY2());}
public int getStartAngle() {return Math.min(getX3, getY3);
public int getArcAngle() {return Math.min(getX4, getY4);

public void draw (Graphics g) {
if(getFilled())
g.drawArc(getUpperLeftX(),getUpperLeftY(),getWidth(),getHeight(),getStartAngle(),getArcAngle());
else
g.fillRect(getUpperLeftX(),getUpperLeftY(),getWidth(),getHeight(),getStartAngle(),getArcAngle());
}
}

spv42
16-03-2007, 15:29
Ti sei dimenticato qualche parentesi graffa.

prova con questa:


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

public abstract class Arc extends MyShape {
public Arc () {super();}
public Arc (int val1, int val2, int val3, int val4, int val5, int val6) {super(val1,val2,val3,val4,val5,val6);}
public Arc (int val1, int val2, int val3, int val4, int val5, int val6, boolean fill) {

super(val1,val2,val3,val4,val5,val6,fill);}


public Arc (int val[]) {super(val); }
public Arc (int val[], boolean fill) {super(val, fill); }
public int getUpperLeftX() { return Math.min(getX1(), getX2()); }
public int getUpperLeftY() { return Math.min(getY1(), getY2()); }
public int getWidth() {return Math.abs(getX1() - getX2());}
public int getHeight() {return Math.abs(getY1() - getY2());}
public int getStartAngle() {return Math.min(getX3, getY3);}
public int getArcAngle() {return Math.min(getX4, getY4);}

public void draw (Graphics g) {
if(getFilled())
g.drawArc(getUpperLeftX(),getUpperLeftY(),getWidth(),getHeight(),getStartAngle(),getArcAngle());
else
g.fillRect(getUpperLeftX(),getUpperLeftY(),getWidth(),getHeight(),getStartAngle(),getArcAngle());
}
}

mariade
16-03-2007, 15:38
ora esce un altro errore:

C:\java\project>javac Arc.java
Error occurred during initialization of VM
Could not reserve enough space for object heap

sai cosa significa?:confused:

spv42
16-03-2007, 15:56
Che la JVM non riesce ad allocare la quantità richiesta di Memoria Heap.

Ma è strano che te lo dia in fase di compilazione.

mariade
16-03-2007, 16:04
Che la JVM non riesce ad allocare la quantità richiesta di Memoria Heap.

Ma è strano che te lo dia in fase di compilazione.

Ora sono a lavoro, dopo provo a casa e vediamo un po' se mi da lo stesso errore.
Grazie tante. Una curiosita', la parte di codice di Arc per acquisire lo startAngle e arcAngle e' corretta, secondo te?

spv42
16-03-2007, 16:10
Su quale SO sei?

mariade
16-03-2007, 16:23
Su quale SO sei?


windows 200 a lavoro
windows 2003 a casa

spv42
16-03-2007, 16:32
Assicurati che nel path ci sia la versione giusta di jdk.

da prompt digita: "echo %PATH%"

e Verifica.

mariade
20-03-2007, 11:12
Ciao, son qui a postare dopo un po' di giorni.

Allora ho creato il codice per costruire l'arco.


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

public class Arc extends BoundedShape {
public Arc () {super();}
public Arc (int val1, int val2, int val3, int val4, int val5, int val6) {super(val1,val2,val3,val4,val5,val6);}
public Arc (int val1, int val2, int val3, int val4, int val5, int val6, boolean fill) {super(val1,val2,val3,val4,val5,val6,fill);}
public Arc (int val[]) {super(val);}
public Arc (int val[], boolean fill) {super(val, fill);}

public void draw (Graphics g) {
if(getFilled())
g.drawArc(getUpperLeftX(),getUpperLeftY(),getWidth(),getHeight(),getStartAngle(),getArcAngle());
else
g.fillArc(getUpperLeftX(),getUpperLeftY(),getWidth(),getHeight(),getStartAngle(),getArcAngle());
}
}


La classe che estende e' BoundedShape:



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

public abstract class BoundedShape extends MyShape {
public BoundedShape () {super();}
public BoundedShape (int val1, int val2, int val3, int val4, int val5, int val6) {super(val1,val2,val3,val4, val5,val6);}
public BoundedShape (int val1, int val2, int val3, int val4, int val5, int val6, boolean fill) {

super(val1,val2,val3,val4,val5,val6, fill);}

public BoundedShape (int val[]) {super(val); }
public BoundedShape (int val[], boolean fill) {super(val, fill); }
public int getUpperLeftX() { return Math.min(getX1(), getX2()); }
public int getUpperLeftY() { return Math.min(getY1(), getY2()); }
public int getWidth() {return Math.abs(getX1() - getX2());}
public int getHeight() {return Math.abs(getY1() - getY2());}
public int getStartAngle() {return Math.abs(getArc1());}
public int getArcAngle() {return Math.abs(getArc2() - getArc1());}

}


Che a sua volta e' sottoclasse di MyShape:

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

public abstract class MyShape {

private int x1, x2, y1, y2, arc1, arc2; private boolean isFilled = false;
public MyShape () {setX1(0); setY1(0); setX2(0); setY2(0);setArc1(0);setArc2(0); }

public MyShape (int val1, int val2, int val3, int val4, int val5, int val6) {
setX1(val1); setY1(val2); setX2(val3); setY2(val4);setArc1(val5);setArc2(val6);}
public MyShape (int val1,int val2,int val3,int val4,int val5, int val6, boolean fill) {

setX1(val1); setY1(val2);setX2(val3);setY2(val4);setArc1(val5);setArc2(val6); isFilled = fill;}

public MyShape (int vals[]) {setX1(vals[0]); setY1(vals[1]); setX2(vals[2]); setY2(vals[3]); setArc1(vals[4]); setArc2(vals[5]); }

public MyShape (int vals[], boolean fill) {

setX1(vals[0]); setY1(vals[1]); setX2(vals[2]); setY2(vals[3]); setArc1(vals[4]); setArc2(vals[5]); isFilled = fill; }

public void setX1(int val) {x1 = ( val >= 0 ? val : 0 );} public void setX2(int val) {x2 = ( val >= 0 ? val : 0 );}
public void setY1(int val) {y1 = ( val >= 0 ? val : 0 );} public void setY2(int val) {y2 = ( val >= 0 ? val : 0 );}
public void setArc1(int val) {arc1 = ( val >= 0 ? val : 0);}
public void setArc2(int val) {arc2 = ( val >= 0 ? val : 0);}

public void setFilled(boolean fill) {isFilled=fill;}
public int getX1() {return x1;} public int getX2() {return x2;}
public int getY1() {return y1;} public int getY2() {return y2;}
public int getArc1() {return arc1;} public int getArc2() {return arc2;}
public boolean getFilled() {return isFilled;}
public abstract void draw (Graphics g);

}


Poi c'e' quest'altro:



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

public class ShapeDrawJFrame extends JFrame {

private final int SHAPETYPES=6;
private int shapeType=0;
private String shapeTypes[]= {"Line","Oval", "Rectangle", "Arc", "Polygon", "Polyline"};
private int numShapes=0;
private int XYValues[] = new int[4];
private int arcValues[] = new int[2];
private int XYPoints;
private int nPoints;
private MyShape[] shapes = new MyShape[100];
private JCheckBox filled;
private JCheckBox empty;
private JComboBox shapesComboBox;
private JComboBox colorChoice;
private Container container;
private JPanel lowerRow;
private JButton button;

public ShapeDrawJFrame() {


addMouseListener( new MouseClickHandler());
container = getContentPane();
container.setBackground(new Color(255,255,255));


lowerRow = new JPanel();
shapesComboBox = new JComboBox(shapeTypes);
shapesComboBox.setSelectedIndex(0);
lowerRow.add(shapesComboBox);

colorChoice = new JComboBox();
colorChoice.setSelectedIndex(0);
colorChoice.addItem("Black");
colorChoice.addItem("Red");
colorChoice.addItem("Green");
colorChoice.addItem("Blue");
colorChoice.addItem("Cyan");
colorChoice.addItem("Magenta");
colorChoice.addItem("Yellow");
colorChoice.addItem("White");
colorChoice.setBackground(Color.white);
lowerRow.add(colorChoice);

filled = new JCheckBox("Filled");
empty = new JCheckBox("Empty");
lowerRow.add(filled);
lowerRow.add(empty);

button = new JButton("UNDO");
lowerRow.add(button);

container.add(lowerRow, BorderLayout.SOUTH);
setSize(600,600);
setVisible( true );
}

public void paint( Graphics g) {
super.paint(g);
for (int sp=0;sp< shapes.length ; sp++) {
if(shapes[sp]!=null) {
shapes[sp].draw(g);
}
}
}

public void createShape(int index) {

numShapes++;
switch (index) {
case 0: shapes[numShapes] = new Line(XYValues); break;
case 1: shapes[numShapes] = new Oval(XYValues); break;
case 2: shapes[numShapes] = new Rectangle(XYValues); break;
case 3: shapes[numShapes] = new Arc(XYValues, arcValues); break;
case 4: shapes[numShapes] = new Polygon(XYValues); break;
case 5: shapes[numShapes] = new Polyline(XYValues); break;
}
}

private class MouseClickHandler extends MouseAdapter {
public void mousePressed (MouseEvent event) {
XYValues[0] = event.getX();
XYValues[1] = event.getY();
arcValues[4] = event.getArc();
}
public void mouseReleased (MouseEvent event) {
XYValues[2] = event.getX();
XYValues[3] = event.getY();
arcValues[5] = event.getArc();
createShape(shapesComboBox.getSelectedIndex());
repaint();
}
}



}


Ora nel momento in cui lo faccio girare, dopo aver compilato tutti i file, mi appare questa serie di errori che vorrei capire cosa significano:

[img=http://img256.imageshack.us/img256/5327/dosjq1.th.png] (http://img256.imageshack.us/my.php?image=dosjq1.png)


Allora il secondo e il terzo errore e' normale anche perche' non ho creato il codice, e poi tutti gli altri mi interesserebbe capire.
Il codice della sottoclasse Rectangle e Line e' uguale a quello che ho postato all'inizio del thread cambiando la superclasse da Shape a My Shape come il professore voleva.Quindi vorrei capire perche' ora mi da errore.
grazie per l'aiuto!;)

spv42
20-03-2007, 11:24
L'immagine non riesco a visualizzarla.

P.S. per chiudere il campo code usa "/".

mariade
20-03-2007, 12:33
L'immagine non riesco a visualizzarla.

P.S. per chiudere il campo code usa "/".

Riprova adesso, ho corretto piu' volte il link.

spv42
20-03-2007, 12:52
Controlla le firme dei costruttori!

mariade
21-03-2007, 14:12
Ciao,
scusami se son scocciante, il punto e' che, come avrai ben capito, sono alle prime armi con Java. Cosi', dato che ieri mi stavo incasinando perche' non capivo il problema, ho deciso di ricominciare. Partendo dal codice che grazie a te funzionava, ho deciso di occuparmi prima dell'interfaccia grafica, inserendo il combobox per la scelta dei colori, il checkbox per decidere se voglio la figura piena o vuota e il tasto di cancellazione della figura. cosi' ho cominciato col combox dei colori. Il mio problema e' che se cambio colore, le altre figure che avevo precedentemente disegnato, assumono come colore quello nuovo. Volevo sapere cosa mancava nel mio codice. ho gia' fatto molte prove da stamattina, ma non ne vengo a capo, potresti aiutarmi?


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

public class ShapeDrawJFrame extends JFrame {

private final int SHAPETYPES=3;
private int shapeType=0;
private String shapeTypes[]= {"Line","Oval", "Rectangle"};
private int numShapes=0;
private int XYValues[] = new int[4];
private MyShape[] shapes = new MyShape[100];
private JCheckBox filled;
private JComboBox shapesComboBox;
private JComboBox colorChoice;
private Container container;
private JPanel lowerRow;
private JButton button;
private Graphics dragGraphics;
private Color dragColor;
private final static int
BLACK = 0,
RED = 1, // Some constants to make
GREEN = 2, // the code more readable.
BLUE = 3, // These numbers code for
CYAN = 4, // the different drawing colors.
MAGENTA = 5,
YELLOW = 6,
WHITE = 7;

public ShapeDrawJFrame() {


addMouseListener( new MouseClickHandler());
container = getContentPane();
container.setBackground(new Color(255,255,255));


lowerRow = new JPanel();
shapesComboBox = new JComboBox(shapeTypes);
shapesComboBox.setSelectedIndex(0);
lowerRow.add(shapesComboBox);

colorChoice = new JComboBox();

colorChoice.addItem("Black");
colorChoice.addItem("Red");
colorChoice.addItem("Green");
colorChoice.addItem("Blue");
colorChoice.addItem("Cyan");
colorChoice.addItem("Magenta");
colorChoice.addItem("Yellow");
colorChoice.addItem("White");
colorChoice.setBackground(Color.white);
lowerRow.add(colorChoice);

filled = new JCheckBox("Filled");
lowerRow.add(filled);

button = new JButton("UNDO");
lowerRow.add(button);


container.add(lowerRow, BorderLayout.SOUTH);
setSize(600,600);
setVisible( true );
}

public void paint( Graphics g) {
super.paint(g);
for (int sp=0;sp< shapes.length ; sp++) {
if(shapes[sp]!=null) {
g.setColor(dragColor);
shapes[sp].draw(g);
}
}
}

public void createShape(int index) {

numShapes++;
switch (index) {
case 0: shapes[numShapes] = new Line(XYValues); break;
case 1: shapes[numShapes] = new Oval(XYValues); break;
case 2: shapes[numShapes] = new Rectangle(XYValues); break;

}
}

private Color getCurrentColor() {
// Check the colorChoice menu to find the currently
// selected color, and return the appropriate color
// object.
int currentColor = colorChoice.getSelectedIndex();
switch (currentColor) {

case BLACK:
return Color.black;


case RED:
return Color.red;


case GREEN:
return Color.green;


case BLUE:
return Color.blue;


case CYAN:
return Color.cyan;


case MAGENTA:
return Color.magenta;


case YELLOW:
return Color.yellow;


default:
return Color.white;

}
}


private class MouseClickHandler extends MouseAdapter {
public void mousePressed (MouseEvent event) {


XYValues[0] = event.getX();
XYValues[1] = event.getY();

dragGraphics = container.getGraphics();
dragColor = getCurrentColor();
dragGraphics.setColor(dragColor);

}
public void mouseReleased (MouseEvent event) {

XYValues[2] = event.getX();
XYValues[3] = event.getY();

createShape(shapesComboBox.getSelectedIndex());
int currentColor = colorChoice.getSelectedIndex();;

repaint();

}
}
}



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

public abstract class MyShape {

private int x1, x2, y1, y2; private boolean isFilled = false;
public MyShape () {setX1(0); setY1(0); setX2(0); setY2(0);}
public MyShape (int val1, int val2, int val3, int val4) { setX1(val1); setY1(val2); setX2(val3); setY2(val4);}
public MyShape (int val1,int val2,int val3,int val4,boolean fill) {setX1(val1); setY1(val2);setX2(val3);setY2(val4); isFilled = fill;}
public MyShape (int vals[]) {setX1(vals[0]); setY1(vals[1]); setX2(vals[2]); setY2(vals[3]); }
public MyShape (int vals[], boolean fill) {setX1(vals[0]); setY1(vals[1]); setX2(vals[2]); setY2(vals[3]); isFilled = fill; }
public void setX1(int val) {x1 = ( val >= 0 ? val : 0 );} public void setX2(int val) {x2 = ( val >= 0 ? val : 0 );}
public void setY1(int val) {y1 = ( val >= 0 ? val : 0 );} public void setY2(int val) {y2 = ( val >= 0 ? val : 0 );}
public void setFilled(boolean fill) {isFilled=fill;}
public int getX1() {return x1;} public int getX2() {return x2;}
public int getY1() {return y1;} public int getY2() {return y2;}
public boolean getFilled() {return isFilled;}
public abstract void draw (Graphics g);

}


import javax.swing.JFrame;

public class ShapeDraw

{

//execute application
public static void main(String args[]) {

ShapeDrawJFrame shapeDrawJFrame = new ShapeDrawJFrame();
shapeDrawJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

shapeDrawJFrame.setVisible( true );
}}


import java.awt.*; import javax.swing.*;
public class Line extends MyShape {
public Line () {super();}
public Line (int val1, int val2, int val3, int val4) {super(val1,val2,val3,val4); }
public Line (int val[]) {super(val);}
public void draw (Graphics g) {g.drawLine(getX1(),getY1(),getX2(), getY2()); }
}


import java.awt.*; import javax.swing.*;
public class Oval extends BoundedShape {
public Oval () {super();}
public Oval (int val1, int val2, int val3, int val4) {super(val1,val2,val3,val4);}
public Oval (int val1, int val2, int val3, int val4, boolean fill) {super(val1,val2,val3,val4, fill);}
public Oval (int val[]) {super(val);}
public Oval (int val[], boolean fill) {super(val, fill);}
public void draw (Graphics g) {
if(getFilled())
g.drawOval(getUpperLeftX(),getUpperLeftY(),getWidth(),getHeight());
else
g.fillOval(getUpperLeftX(),getUpperLeftY(),getWidth(),getHeight());
}
}


import java.awt.*; import javax.swing.*;
public class Rectangle extends BoundedShape {
public Rectangle () {super();}
public Rectangle (int val1, int val2, int val3, int val4) {super(val1,val2,val3,val4);}
public Rectangle (int val1, int val2, int val3, int val4, boolean fill) {super(val1,val2,val3,val4, fill);}
public Rectangle (int val[]) {super(val);}
public Rectangle (int val[], boolean fill) {super(val, fill);}
public void draw (Graphics g) {
if(getFilled())
g.drawRect(getUpperLeftX(),getUpperLeftY(),getWidth(),getHeight());
else
g.fillRect(getUpperLeftX(),getUpperLeftY(),getWidth(),getHeight());
}
}


Grazie mille!:)

spv42
22-03-2007, 09:06
Devi riscrivere il metodo repaint che invochi nel metodo:

public void mouseReleased (MouseEvent event) {

XYValues[2] = event.getX();
XYValues[3] = event.getY();

createShape(shapesComboBox.getSelectedIndex());
int currentColor = colorChoice.getSelectedIndex();;

repaint();

}


Questo repaint, fà il "repaint" di tutto il Frame! Quindi anche delle figure già disegnate, devi riscriverlo imponendo di cambiare colore solo alla figura nuova.

P.S. Scusa per il ritardo, ma ero incasinato al lavoro. :D

mariade
22-03-2007, 09:16
Devi riscrivere il metodo repaint che invochi nel metodo:

public void mouseReleased (MouseEvent event) {

XYValues[2] = event.getX();
XYValues[3] = event.getY();

createShape(shapesComboBox.getSelectedIndex());
int currentColor = colorChoice.getSelectedIndex();;

repaint();

}


Questo repaint, fà il "repaint" di tutto il Frame! Quindi anche delle figure già disegnate, devi riscriverlo imponendo di cambiare colore solo alla figura nuova.

P.S. Scusa per il ritardo, ma ero incasinato al lavoro. :D

Stai scherzando, grazie mille per tutto. Meno male che ci sei tu a darmi le dritte! Grazie!

mariade
22-03-2007, 11:12
scusami, non riesco proprio a capire come devo fare. Mica potresti scrivermi tu quella parte di codice? Grazie.:mc:

spv42
22-03-2007, 12:17
Prova un pò con questo questo! :)



public void mouseReleased (MouseEvent event) {

XYValues[2] = event.getX();
XYValues[3] = event.getY();

createShape(shapesComboBox.getSelectedIndex());
int currentColor = colorChoice.getSelectedIndex();;
repaint(XYValues[0], XYValues[1], XYValues[2] - XYValues[0], XYValues[3] - XYValues[1]);

}

mariade
22-03-2007, 13:27
Praticamente, ho copiato la linea di codice che hai scritto tu e l'ovale non esce completo, il rettangolo solo i due lati in alto, se sovrapponi un'altra figura, puoi vedere la parte che non si vedeva della figura sotto del colore della nuova. es:

http://img139.imageshack.us/img139/5439/doswc5.th.png (http://img139.imageshack.us/my.php?image=doswc5.png)

http://img363.imageshack.us/img363/5880/dos2dw9.th.png (http://img363.imageshack.us/my.php?image=dos2dw9.png)


Lo stesso e' diventato cosi', una volta che ho fatto il printscreen e l'ho copiato su Paint, chiuso paint ecco il risultato:

http://img360.imageshack.us/img360/7305/dos3bm2.th.png (http://img360.imageshack.us/my.php?image=dos3bm2.png)

spv42
22-03-2007, 14:37
Io ti ho dato lo spunto!