Geometrische Formen optional darstellen

Status
Nicht offen für weitere Antworten.

Borsty22

Neues Mitglied
Hallo Leute,

ich will mittels einer ComboBox verschiedene geometrische Figuren darstellen. Die Erstellung der Figuren wollte ich mit einen Objekt machen. Allerdings ist nach der Auswahl die Formatierung von meinem Fenster im *****.
Gibt es eine Möglichkeit ein altes Objekt zu löschen und ein neues zu erstellen? Oder ist es besser das panel zu löschen in dem die Zeichnung dargestellt wird zu löschen und anschließend die neue Zeichnung darzustellen.

Ich danke euch schon mal für eure Hilfe
MFG Borsty ;)
 
B

Beni

Gast
Ich hab ein bisschen Probleme, den Zusammenhang der Fehler zu sehen. Kannst du den Code posten (oder wenn es zuviel Code ist, nur das wichtige halt).

Aber im allgemeinen muss man da nicht gleich ein Panel ersetzen, das geht garantiert einfacher :wink:

mfg Beni
 

Borsty22

Neues Mitglied
Code:
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import info.clearthought.layout.TableLayout;

public class Map2 extends JFrame, JPanel implements ItemListener{
    public static void main(String[] arguments){
        Map2 frame = new Map2();
        frame.show();
    }
       
    JButton but;
    JComboBox cobo;
    String itemVal;
    Container content;
    
    public Map2(){
        super("Map2");
        setSize(350, 350);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        double Sizes[][] = {{160, 160},
                            {290, TableLayout.PREFERRED}};
        
        content = getContentPane();
        content.setLayout(new TableLayout(Sizes));
                
        cobo = new JComboBox();
        cobo.addItemListener(this);
        cobo.addItem("Viereck");
        cobo.addItem("Kreis");
        cobo.addItem("Dreieck");
        cobo.addItem("Ellipse");
        cobo.setEditable(false);  
        content.add(cobo, "0, 1, 0 ,0");
    
        but = new JButton("close");
        content.add(but, "1, 1, 0, 0");
        
        but.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                System.exit(0);
            }
        });
    }
    public void itemStateChanged(ItemEvent e, Graphics comp){
        Graphics2D comp2D = (Graphics2D)comp;  
        Object newPick = e.getItem();
        
        if(newPick.toString() == "Viereck"){            
            comp2D.setColor(Color.blue);
            Rectangle2D.Float map = new Rectangle2D.Float(10F, 10F, 100F, 100F);
            comp2D.fill(map);
        }
        
        if(newPick.toString() == "Dreieck"){
            comp2D.setColor(Color.yellow);
            GeneralPath linie = new GeneralPath();
            linie.moveTo(110F, 120F);
            linie.lineTo(160F, 220F);
            linie.lineTo(60F, 220F);
            linie.closePath();
            comp2D.fill(linie); 
        }
        
        if(newPick.toString() == "Kreis"){
            Kreis mappe = new Kreis();
            content.add(mappe, "0, 0, 1, 0");
        }
              
        if(newPick.toString() == "Ellipse"){
            Ellipse mappe = new Ellipse();
            content.add(mappe, "0, 0, 1, 0");
            setVisible(true);
            setSize(350, 350);
        }
    }
}

class Form extends JPanel {
    public void viereck(Graphics comp){
        Graphics2D comp2D = (Graphics2D)comp;
  
        // erzeugt ein Viereck
        comp2D.setColor(Color.blue);
        Rectangle2D.Float background = new Rectangle2D.Float(10F, 10F, 100F, 100F);
        comp2D.fill(background);
    }
    
    public void kreis(Graphics comp){
        Graphics2D comp2D = (Graphics2D)comp;
                
        // erzeugt einen Kreis
        comp2D.setColor(Color.red);
        Arc2D.Float circle = new Arc2D.Float(120F, 10F, 100F, 100F, 0F, 360F, Arc2D.OPEN);
        comp2D.fill(circle);
    }
    
    public void ellipse(Graphics comp){
        Graphics2D comp2D = (Graphics2D)comp;
    
        //erzeugt eine Ellipse
        comp2D.setColor(Color.green);
        Ellipse2D.Float ellipt = new Ellipse2D.Float(240, 10, 75, 100);
        comp2D.fill(ellipt);
    }
 
    public void dreieck(Graphics comp){
        Graphics2D comp2D = (Graphics2D)comp;
        
        //Dreieck durch Linien
        comp2D.setColor(Color.yellow);
        GeneralPath linie = new GeneralPath();
        linie.moveTo(110F, 120F);
        linie.lineTo(160F, 220F);
        linie.lineTo(60F, 220F);
        linie.closePath();
        comp2D.fill(linie); 
    }
}
edit deathbyaclown: vorheriger beotrag gelöscht wegen falschem code!
 
B

Beni

Gast
Code:
public class Map2 extends JFrame, JPanel implements ItemListener{
:shock:

Also das funktioniert ganz sicher nicht.

Ich vermute, das hier
Code:
            Kreis mappe = new Kreis();
            content.add(mappe, "0, 0, 1, 0");
macht deine Oberfläche unschön.

a) Wahrscheinlich (ich kenne das TableLayout nicht), müsstest du zuerst die Component entfernen, die zuvor dort sass.
b) Ist die elegantere Lösung wirklich, dass das Panel einfach was anderes zeichnet.

P.S. konnte deinen Code leider nicht kompilieren, sind also alles nur Theorien.

mfg Beni
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben