Polski Serwis Naukowy - OnLine od 1999 roku
RSS
Piątek, 1 czerwca 2012
Konrad, Magdalena, Świętopełk, Alfons
 W 1980 telewizja informacyjna CNN rozpoczęła emisję
 Międzynarodowy Dzień Dziecka
 W 1915 urodził się Jan Twardowski
Nowe publikacje
Post dodany: |30 Lis 2006|, 2006 20:43
Data rejestracji: 29 Lis 2005 postów: 5
To jest program który ma coś tam robić => grafika wektorowa
Dokładny opis w pliku PDF pod tym linkiem:
http://sprocket.ict.pwr.w...atorium%204.pdf
Do dyspozycji mam darmowy JCreator 3,5.
Jak kompilować plik do jar a nie domyślnie do class?
Pod Zadanie nr1
Mimo moich wysiłków nie udało się tego do końca napisać.
Oto mój kod:
| Cytat | import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.applet.*;
abstract class Figura
{ private boolean zaznaczona = false;
public boolean jestZaznaczona(){ return zaznaczona; }
public void zaznacz(){ zaznaczona = true; };
public void zaznacz(boolean z){ zaznaczona = z; }
public void odznacz(){ zaznaczona = false; }
public void zaznaczOdwrotnie(){ zaznaczona = !zaznaczona; }
public abstract boolean jestWewnatrz(float px, float py);
public boolean jestWewnatrz(int px, int py)
{ return jestWewnatrz((float)px, (float)py); }
public abstract float pole();
public abstract float obwod();
public abstract void przesun(float dx, float dy);
public abstract void skaluj(float s);
protected void ustawKolor(Graphics g)
{ if (zaznaczona) g.setColor(Color.RED);
else g.setColor(Color.BLACK);
};
public abstract void rysuj(Graphics g);
protected String wlasciwosci()
{ String s = Pole: + pole() + Obwod: + obwod();
if (jestZaznaczona()) s = s + [ZAZNACZONA];
return s;
}
}
class Punkt extends Figura
{ protected float x, y;
public Punkt(float px, float py){ x=px; y=py; }
public boolean jestWewnatrz(float px, float py)
{ // by umozliwic zaznaczanie punktu myszka
// miejsca odlegle nie wiecej niz 3 leza wewnatrz
return (Math.sqrt((x-px)*(x-px) + (y-py)*(y-py))<=6);
}
public float pole(){ return 0; };
public float obwod(){ return 0; };
public void przesun(float dx, float dy){ x+=dx; y+=dy; }
public void skaluj(float s){ };
protected String toStringXY(){ return ( + x + , + y + ); }
public String toString()
{ return Punkt + toStringXY() + wlasciwosci();
}
public void rysuj(Graphics g)
{ ustawKolor(g);
g.fillOval((int)(x-3),(int)(y-3), 6,6);
};
}
//***********************************************
class Kolo extends Punkt
{
public void paint(Graphics g)
{
//protected float x, y;
g.fillOval(10, 10, 50, 50)/*{ x=xx; y=yy; }*/;
}
}
//***********************************************
class Prostokat extends Punkt
{
public void paint(Graphics g)
{
g.fillRect(100, 10, 60, 50);
}
}
//***********************************************
class Trojkat extends Figura
{ private Punkt punkt1, punkt2, punkt3;
public Trojkat(Punkt p1, Punkt p2, Punkt p3)
{ punkt1=p1; punkt2=p2; punkt3=p3;
}
public boolean jestWewnatrz(float px, float py)
{ float d1, d2, d3;
d1 = px*(punkt1.y-punkt2.y) + py*(punkt2.x-punkt1.x) +
(punkt1.x*punkt2.y-punkt1.y*punkt2.x);
d2 = px*(punkt2.y-punkt3.y) + py*(punkt3.x-punkt2.x) +
(punkt2.x*punkt3.y-punkt2.y*punkt3.x);
d3 = px*(punkt3.y-punkt1.y) + py*(punkt1.x-punkt3.x) +
(punkt3.x*punkt1.y-punkt3.y*punkt1.x);
return ((d1<=0)&&(d2<=0)&&(d3<=0)) || ((d1>=0)&&(d2>=0)&&(d3>=0));
}
public float pole()
{ float a = (float)Math.sqrt( (punkt1.x-punkt2.x)*(punkt1.x-punkt2.x)+
(punkt1.y-punkt2.y)*(punkt1.y-punkt2.y));
float b = (float)Math.sqrt( (punkt2.x-punkt3.x)*(punkt2.x-punkt3.x)+
(punkt2.y-punkt3.y)*(punkt2.y-punkt3.y));
float c = (float)Math.sqrt( (punkt1.x-punkt3.x)*(punkt1.x-punkt3.x)+
(punkt1.y-punkt3.y)*(punkt1.y-punkt3.y));
float p=(a+b+c)/2;
return (float)Math.sqrt(p*(p-a)*(p-b)*(p-c));
}
public float obwod()
{ float a = (float)Math.sqrt( (punkt1.x-punkt2.x)*(punkt1.x-punkt2.x)+
(punkt1.y-punkt2.y)*(punkt1.y-punkt2.y));
float b = (float)Math.sqrt( (punkt2.x-punkt3.x)*(punkt2.x-punkt3.x)+
(punkt2.y-punkt3.y)*(punkt2.y-punkt3.y));
float c = (float)Math.sqrt( (punkt1.x-punkt3.x)*(punkt1.x-punkt3.x)+
(punkt1.y-punkt3.y)*(punkt1.y-punkt3.y));
return a+b+c;
}
public void przesun(float dx, float dy)
{ punkt1.przesun(dx,dy);
punkt2.przesun(dx,dy);
punkt3.przesun(dx,dy);
}
public void skaluj(float s)
{ Punkt sr1 = new Punkt((punkt1.x+punkt2.x+punkt3.x)/3,
(punkt1.y+punkt2.y+punkt3.y)/3);
punkt1.x*=s; punkt1.y*=s;
punkt2.x*=s; punkt2.y*=s;
punkt3.x*=s; punkt3.y*=s;
Punkt sr2 = new Punkt((punkt1.x+punkt2.x+punkt3.x)/3,
(punkt1.y+punkt2.y+punkt3.y)/3);
float dx=sr1.x-sr2.x;
float dy=sr1.y-sr2.y;
punkt1.przesun(dx,dy);
punkt2.przesun(dx,dy);
punkt3.przesun(dx,dy);
}
public String toString()
{ return Trojkat { +
punkt1.toStringXY() +
punkt2.toStringXY() +
punkt3.toStringXY() +
} + wlasciwosci();
}
public void rysuj(Graphics g)
{ ustawKolor(g);
g.drawLine((int)punkt1.x, (int)punkt1.y,
(int)punkt2.x, (int)punkt2.y);
g.drawLine((int)punkt2.x, (int)punkt2.y,
(int)punkt3.x, (int)punkt3.y);
g.drawLine((int)punkt3.x, (int)punkt3.y,
(int)punkt1.x, (int)punkt1.y);
}
}
class Rysunek extends JPanel implements KeyListener, MouseListener
{ static private final int ROZMIAR = 10;
private float myszx, myszy, mx, my;
int ileFigur = 0;
Figura [] figury = new Figura[ROZMIAR];
private void dodajFigure(Figura f){
if (ileFigur==ROZMIAR)
{ JOptionPane.showMessageDialog(null, Za duzo figur);
return;
}
for (int i=0; i<ileFigur; i++) figury.odznacz();
figury[ileFigur]=f;
figury[ileFigur].zaznacz();
ileFigur++;
repaint();
}
public void dodajPunkt()
{ float x, y;
Random random = new Random();
x = random.nextFloat()*getWidth();
y = random.nextFloat()*getHeight();
dodajFigure(new Punkt(x, y));
}
public void dodajTrojkat()
{ float x1, y1, x2, y2, x3, y3;
Random random = new Random();
x1 = random.nextFloat()*getWidth();
y1 = random.nextFloat()*getHeight();
x2 = random.nextFloat()*getWidth();
y2 = random.nextFloat()*getHeight();
x3 = random.nextFloat()*getWidth();
y3 = random.nextFloat()*getHeight();
dodajFigure(new Trojkat(new Punkt(x1,y1),new Punkt(x2,y2), new Punkt(x3,y3)));
}
public void dodajKolo()
{
float x, y;
Random random = new Random();
x = random.nextFloat()*getWidth();
y = random.nextFloat()*getHeight();
dodajFigure(new Punkt(x, y));
}
public void dodajProstokat()
{
float x1, y1, x2, y2, x3, y3;
Random random = new Random();
x1 = random.nextFloat()*getWidth();
y1 = random.nextFloat()*getHeight();
x2 = random.nextFloat()*getWidth();
y2 = random.nextFloat()*getHeight();
dodajFigure(new Prostokat(new Punkt(x1,y1),new Punkt(x2,y2)));
}
void przesun(float dx, float dy)
{ for(int i=0; i<ileFigur; i++)
if (figury.jestZaznaczona()) figury.przesun(dx,dy);
repaint();
}
void skaluj(float s)
{ for(int i=0; i<ileFigur; i++)
if (figury.jestZaznaczona()) figury.skaluj(s);
repaint();
}
public String toString()
{ String s = Rysunek{ ;
for(int i=0; i<ileFigur; i++)
s+=figury.toString() +\n ;
s+=};
return s;
}
public void paintComponent(Graphics g)
{ super.paintComponent(g);
for(int i=0; i<ileFigur; i++)
figury.rysuj(g);
}
/***obsługa zdarzeń przez słuchacza zdarzeń KeyListener ***/
public void keyPressed (KeyEvent evt)
//Virtual keys (arrow keys, function keys, etc) - handled with keyPressed() listener.
{ int krok;
if (evt.isShiftDown()) krok = 10;
else krok = 1;
switch (evt.getKeyCode())
{ case KeyEvent.VK_LEFT : przesun(-krok, 0); break;
case KeyEvent.VK_RIGHT: przesun( krok, 0); break;
case KeyEvent.VK_UP : przesun(0, -krok); break;
case KeyEvent.VK_DOWN : przesun(0, krok); break;
case KeyEvent.VK_DELETE : for(int i=0; i<ileFigur;i++)
if (figury.jestZaznaczona())
{ for(int k=i; k<ileFigur-1; k++)
figury[k]=figury[k+1];
ileFigur--;
figury[ileFigur]=null;
}
repaint();
break;
}
}
public void keyReleased (KeyEvent evt)
{
}
public void keyTyped (KeyEvent evt)
//Characters (a, A, #, ...) - handled in the keyTyped() listener.
{
char znak=evt.getKeyChar(); //reakcja na przycisku na naciśnięcie klawisza
switch(znak)
{ case 'p': dodajPunkt(); break;
case 't': dodajTrojkat(); break;
case 'k': dadajKolo(); break;
case 'r': dadajProstokat(); break;
case '-': skaluj(0.9); break;
case '+': skaluj(1.1); break;
}
int nr=(int)znak-48; // obsluga klawiszy '0'...'9'
if ( nr>=0&& nr<ileFigur)
{ if (evt.isAltDown()==false) for(int i=0; i<ileFigur;i++) figury.odznacz();
figury[nr].zaznaczOdwrotnie();
repaint();
}
}
/***obsługa zdarzeń przez słuchacza zdarzeń MouseListener***/
public void mouseClicked(MouseEvent e)
// Invoked when the mouse button has been clicked (pressed and released) on a component.
{ int px = e.getX();
int py = e.getY();
for (int i=0; i<ileFigur;i++)
{ if (e.isAltDown()==false) figury.odznacz();
if (figury.jestWewnatrz(px,py)) figury.zaznaczOdwrotnie();
}
repaint();
}
public void mouseEntered(MouseEvent e)
//Invoked when the mouse enters a component.
{ }
public void mouseExited(MouseEvent e)
//Invoked when the mouse exits a component.
{ }
public void mousePressed(MouseEvent e)
//Invoked when a mouse button has been pressed on a component.
{
myszx = e.getX();
myszy = e.getY();
}
public void mouseReleased(MouseEvent e)
//Invoked when a mouse button has been released on a component.
{ }
public void mouseDragget(MouseEvent e)
{
mx = e.getX() - myszx;
my = e.getY() - myszy;
}
public void mouseMoved(MouseEvent e)
{ }
}
public class EdytorGraficzny_4 extends JFrame implements ActionListener
{
protected Rysunek rysunek;
private JButton przyciskPunkt = new JButton (Punkt);
private JButton przyciskTrojkat = new JButton(Trojkat);
private JButton przyciskProstokat = new JButton(Prostokat);
private JButton przyciskKolo = new JButton(Kolo);
private JMenu[] menu = { new JMenu(Figury),
new JMenu(Edytuj),
new JMenu(Pomoc) };
private JMenuItem[] items = { new JMenuItem(Punkt),
new JMenuItem(Trojkat),
new JMenuItem(Wypisz wszystkie),
new JMenuItem(Przesun w gore),
new JMenuItem(Przesun w dol),
new JMenuItem(Przesun w lewo),
new JMenuItem(Przesun w prawo),
new JMenuItem(Prostokat),//DODANO 1
new JMenuItem(Kolo),//DODANO 1
new JMenuItem(Pomniejsz),//DODANO 2
new JMenuItem(Pomniejsz) };//DODANO 2
public EdytorGraficzny_4()
{ super (Edytor graficzny);
setSize(400,400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
for (int i = 0; i < items.length; i++)
items.addActionListener(this);
menu[0].add(items[0]);
menu[0].add(items[1]);
menu[0].addSeparator();
menu[0].add(items[2]);
menu[1].add(items[3]);
menu[1].add(items[4]);
menu[1].add(items[5]);
menu[1].add(items[6]);
menu[1].addSeparator();
menu[1].add(items[7]);//DODANO 1
menu[1].add(items[8]);//DODANO 1
menu[1].addSeparator();
menu[1].add(items[9]);
menu[1].add(items[10]);
menu[2].add(items[11]);//DODANO 2
menu[2].add(items[12]);//DODANO 2
JMenuBar menubar = new JMenuBar();
for (int i = 0; i < menu.length; i++)
menubar.add(menu);
setJMenuBar(menubar);
rysunek=new Rysunek();
rysunek.addKeyListener(rysunek);
rysunek.setFocusable(true);
rysunek.addMouseListener(rysunek);
rysunek.addMouseMotionListener(rysunek);//DODANE
rysunek.setLayout(new FlowLayout());
przyciskPunkt.addActionListener(this);
przyciskTrojkat.addActionListener(this);
rysunek.add(przyciskPunkt);
rysunek.add(przyciskTrojkat);
setContentPane(rysunek);
setVisible(true);
}
public void actionPerformed (ActionEvent evt)
{
Object zrodlo = evt.getSource();
if (zrodlo==przyciskPunkt) rysunek.dodajPunkt();
if (zrodlo==przyciskTrojkat) rysunek.dodajTrojkat();
if (zrodlo==przyciskKolo) rysunek.dodajKolo();
if (zrodlo==przyciskProstokat) rysunek.dodajProstokat();
if(zrodlo==items[0]) rysunek.dodajPunkt();
if(zrodlo==items[1]) rysunek.dodajTrojkat();
if(zrodlo==items[2]) JOptionPane.showMessageDialog(null, rysunek.toString());
if(zrodlo==items[3]) rysunek.przesun(-10, 0);
if(zrodlo==items[4]) rysunek.przesun( 10, 0);
if(zrodlo==items[5]) rysunek.przesun( 0, -10);
if(zrodlo==items[6]) rysunek.przesun( 0, 10);
if(zrodlo==items[7]) rysunek.skaluj(0.9);
if(zrodlo==items[8]) rysunek.skaluj(1.1);
if(zrodlo==items[10) rysunek.dodajProstokat();//DODANO 1
if(zrodlo==items[11]) rysunek.dodajKolo();//DODANO 1
if(zrodlo==items[12]) JOptionPane.showMessageDialog(null,Programik graficzny \nAutor programu:);
rysunek.requestFocus(); //przywrocenie ogniskowania w celu przywrocenia obslugi zadarezń pd klawiatury
repaint();
}
public static void main(String[] args)
{ EdytorGraficzny_4 edytor = new EdytorGraficzny_4();
}
}
| Proszę o ewentualne poprawienie błędów
Dzięki za pomoc.
Pozdrawiam.
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum
|
Wersja do druku
Dodaj temat do Ulubionych
|
Powered by
phpBB © 2000, 2002, 2005, 2007 phpBB Group
|