import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GUI implements ActionListener
{
private Gebaeude geb;
private CWand cw;
private CDelete cd;
private CMove cm;
private CCopy cc;
private CStuetze cs;
private CDecke cde;
private JToggleButton button1;
private JToggleButton button2;
private JToggleButton button3;
private JToggleButton button4;
private JToggleButton button5;
private JToggleButton button6;
private JLabel label1;
JScrollPane scrollpane;
public GUI()
{
JFrame frame = new JFrame("CAD-System");
frame.setSize(700,400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
geb = new Gebaeude();
Container standardContainer = frame.getContentPane();
button1 = new JToggleButton("Wand");
button2 = new JToggleButton("Stütze");
button3 = new JToggleButton("Decke");
button4 = new JToggleButton("Bewegen");
button5 = new JToggleButton("Löschen");
button6 = new JToggleButton("Kopieren");
button1.setPreferredSize(new Dimension(150,50));
button2.setPreferredSize(new Dimension(150,50));
button3.setPreferredSize(new Dimension(150,50));
button4.setPreferredSize(new Dimension(150,50));
button5.setPreferredSize(new Dimension(150,50));
button6.setPreferredSize(new Dimension(150,50));
button1.addActionListener(this);
button2.addActionListener(this);
button3.addActionListener(this);
button4.addActionListener(this);
button5.addActionListener(this);
button6.addActionListener(this);
ButtonGroup bg1 = new ButtonGroup();
bg1.add(button1);
bg1.add(button2);
bg1.add(button3);
bg1.add(button4);
bg1.add(button5);
bg1.add(button6);
JPanel panelRechts = new JPanel();
JPanel panelLinks = new JPanel();
JPanel panelButtons = new JPanel();
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();
//scrollpane.setViewportView(geb);
//standardContainer.add(scrollpane, BorderLayout.CENTER);
//scrollpane.add(panelLinks);
standardContainer.add(panelLinks, BorderLayout.CENTER);
standardContainer.add(panelRechts, BorderLayout.EAST);
BorderLayout border=new BorderLayout();
BorderLayout border2=new BorderLayout();
BorderLayout border3=new BorderLayout();
scrollpane=new JScrollPane(geb);
panelLinks.setLayout(border);
//panelLinks.add(geb, BorderLayout.CENTER);
panelLinks.add(scrollpane, BorderLayout.CENTER);
GridLayout grid1 = new GridLayout (3,2);
GridLayout grid2 = new GridLayout (1,1);
panelRechts.setLayout(border2);
panelRechts.add(panelButtons, BorderLayout.NORTH);
panelRechts.add(panel3, BorderLayout.CENTER);
panelButtons.setLayout(grid1);
panel3.setLayout(border3);
label1=new JLabel();
panel3.add(label1, BorderLayout.NORTH);
panelButtons.add(button1);
panelButtons.add(button4);
panelButtons.add(button2);
panelButtons.add(button5);
panelButtons.add(button3);
panelButtons.add(button6);
frame.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
if (cw != null)
cw.removeController();
if (cm != null)
cm.removeController();
if (cd != null)
cd.removeController();
if (cc != null)
cc.removeController();
if (cs != null)
cs.removeController();
if (cde != null)
cde.removeController();
// Buttons einstellen
if (e.getSource().equals(button1))
{
cw = new CWand(geb);
label1.setText( "<html>Anweisungen:
Zum Zeichnen der Wand:
Einmal klicken für Startpunkt,
erneut klicken für Endpunkt. </html>" );
}
if (e.getSource().equals(button2))
{
cs = new CStuetze(geb);
label1.setText( "<html>Anweisungen:
Zum Zeichnen der Stütze:
Zur Festlegung des Mittelpunkts einmal klicken.
Erneut klicken für Endpunkt. </html>" );
}
if (e.getSource().equals(button3))
{
cde = new CDecke(geb);
label1.setText( "<html>Anweisungen:
Zum Zeichnen der Decke:
Beim ersten Klick wird der Startpunkt der ersten
Polylinie gespeichert. Beim erneuten Klicken wird
die erste Polylinie gezeichnet und gleichzeitig der
Startpunkt der zweiten Polylinie gespeichert.
Eine Decke muss mindestens aus drei Linien
bestehen.
Zum Schließen des Polygons rechte Maustaste
betätigen. </html>" );
}
if (e.getSource().equals(button4))
{
cm = new CMove(geb);
label1.setText( "<html>Anweisungen:
Zum Bewegen des Objekts:
Gewünschtes Objekt anklicken und Taste gedrückt
halten. Objekt zum gewünchten Ort ziehen und
dort Taste loslassen.
Bei sich überlappenden Objekten wird stets das
oberste Objekt ausgewählt und bewegt.
</html>" );
}
if (e.getSource().equals(button5))
{
cd = new CDelete(geb);
label1.setText( "<html>Anweisungen:
Zum Löschen des Objekts:
Gewünschtes Objekt anklicken und es wird
gelöscht. Bei sich überlappenden Objekten wird
stets das oberste Objekt ausgewählt und gelöscht.
</html>" );
}
if (e.getSource().equals(button6))
{
cc = new CCopy(geb);
label1.setText( "<html>Anweisungen:
Zum Kopieren des Objekts:
Wird ein Bauteil in gleicher Form mehrfach benötigt,
so kann es kopiert werden.
Zum Kopieren das gewünschte Bauteil einmal
oder wenn gewünscht merhmals anklicken.
Das kopierte Bauteil / die kopierten Bauteile
erscheinen Links Oben im Koordinatenursprung.
Bei sich überlappenden Objekten wird stets das
oberste Objekt ausgewählt und kopiert.
</html>" );
}
}
public static void main(String [] args)
{
GUI g=new GUI();
}
}
Gebaeude:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
//Das ist meine zeichenfläche
public class Gebaeude extends JComponent implements MouseMotionListener
{
public Vector wand;
public Vector stuetze;
public Decke decke;
public boolean [][] feld;
public Gebaeude()
{
super();
feld=new boolean[100][100];
this.addMouseMotionListener(this);
wand = new Vector ();
stuetze = new Vector ();
}
public void setDecke(Decke d)
{
decke=d;
}
public void paintComponent(Graphics g)
{
g.setColor(Color.WHITE);
g.fillRect(0, 0, getWidth(), getHeight());
double x=8;
double y=8;
g.setColor(Color.BLUE);
for(int i=0;i<getWidth()/x;i++)
{
for(int j=0;j<getHeight()/y;j++)
{
g.fillRect((int)(i*x), (int)(j*y), 1, 1);
}
}
for (int i=0;i<wand.size();i++)
{
Wand wd = (Wand) wand.get(i);
VWand vw = new VWand(wd);
vw.view(g);
}
for (int i = 0; i < stuetze.size(); i++)
{
Stuetze s = (Stuetze) stuetze.get(i);
VStuetze vs = new VStuetze(s);
vs.view(g);
}
if (decke != null)
{
VDecke vd = new VDecke(decke);
vd.view(g);
}
/*
if (decke.getX() >= stuetze.getX() && decke.getY() >= stuetze.getY())
{
VDecke vd = new VDecke(decke);
g.setColor(Color.RED);
vd.view(g);
}
*/
for(int i=1;i<getWidth()/x;i++)
{
g.setColor(Color.BLACK);
g.drawLine(3,3,getWidth()-3,3); //oben
g.drawLine(3,getHeight()-3,3,3); //links
g.drawLine(getWidth()-3,3,getWidth()-3,getHeight()-3); //rechts
g.drawLine(3,getHeight()-3,getWidth()-3,getHeight()-3); //unten
g.drawLine(80*i,3,80*i,16); //oben
g.drawLine(3,80*i,16,80*i); //links
g.drawLine(80*i,getHeight()-3,80*i,getHeight()-16); //unten
g.drawLine(getWidth()-3,80*i,getWidth()-16,80*i); //rechts
/*
g.drawLine(96,10,96,21);
g.drawLine(10,96,22,96);
for (j=1,j<getWidth()/;j++)
{
g.drawLine(80*i,10,80*i,21);
g.drawLine(10,80*i,22,80*i);
}
*/
g.drawString("[ m ]",7,18);
//String a;
//a.toString(i);
g.drawString(""+i,80*i,25); //oben
g.drawString(""+i,8,80*i); //links
g.drawString(""+i,80*i,getHeight()-15); //unten
g.drawString(""+i,getWidth()-13,80*i); //rechts
}
}
public void mouseDragged(MouseEvent e)
{
}
public void mouseMoved(MouseEvent e)
{
for (int i = 0; i < wand.size(); i++)
{
Wand wd = (Wand) wand.get(i);
if (wd.istPunktAufWand(e.getPoint()))
{
this.setCursor(new Cursor(Cursor.HAND_CURSOR));
return;
}
else
{
this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
}
for (int i = 0; i < stuetze.size(); i++)
{
Stuetze s= (Stuetze) stuetze.get(i);
if (s.istPunktAufStuetze(e.getPoint()))
{
this.setCursor(new Cursor(Cursor.HAND_CURSOR));
return;
}
else
{
this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
}
/* // klappt noch nicht
for (int i = 0; i < decke.size(); i++)
{
Decke d= (Decke) decke.get(i);
if (s.istPunktAufDecke(e.getPoint()))
{
this.setCursor(new Cursor(Cursor.HAND_CURSOR));
return;
}
else
{
this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
}
*/
}
}