Linie zeichnen...

hollowmaster

Mitglied
Hallo Leute ;) ,

ich bin neu hier also srii falls ich das hier in den falschen Thread gepostet hab.
Also ich habe folgendes Problem. Ich habe ein Frame mit einem GridBagLayout Raster das variabel viele Panels erstellt und in einem Raster anordnet mit etwas Abstand.
In den Kästen hab ich Kreise drin...und ich will jetzt von der Mitte von einem Kreis zur Mitte an einem anderen Kreis eine Linie ziehen. Ich hab das versucht, indem ich feste Werte eingegeben hab, aber wenn man das Fenster etwas verschiebt, stimmen die ganzen Koordinaten ja nicht mehr, deswegen meine Frame, wie kann ich das dynamisch machen, dass ich die Mitte herausfinde von den jeweiligen Panels, die einen zentrierten Kreis enthalten, und dann ein Kreis ziehe, ich bekomm immer nur die Mitte von den Panels mit den Komponenten-Koordinaten die stimmen ja nicht, da ich mehrere Panels in nem Raster in nem Frame hab.
Hier meine Hauptklasse:
Java:
public class Main extends JFrame
{
   
   
    final int DefaultZeile = 3;        int Zeilen=DefaultZeile;
    final int DefaultSpalte = 3;    int Spalten=DefaultSpalte;
    final int DefaultKreis = 4;        int AnzKreis=DefaultKreis;
    int AnzFeld = Zeilen*Spalten;
    int putZeile,putSpalte,putKreis;
    int Rand;
    static int Value=-1;
    boolean end=false;
    int with = this.getWidth();
    int heig = this.getHeight();
    private MyField [] RasterArray = new MyField [AnzFeld+1000];   
    ButtonListener bl = new ButtonListener();
    JPanel MainPanel = new JPanel(); //ROOT
    JPanel ButtonPanel = new JPanel(); //ROOT.1
    JPanel ChilRaster = new JPanel(); //ROOT.2
    JButton SetAll = new JButton("ALL");
    JButton reset = new JButton("RESET");               
    JButton zufall = new JButton("ONE");               
    JButton change = new JButton("Change Layout");        
    JButton cleartext = new JButton("TEXT DELETE");       
    JTextField t1 = new JTextField("Zeile...");       
    JTextField t2 = new JTextField("Spalte...");   
    JTextField t3 = new JTextField("Kreis...");
    JButton glass1 = new JButton ("1111");
    JButton glass2 = new JButton ("2222");
    JButton glass3 = new JButton ("3333");
   
   
    static int Position=0;
    int LaufVariable;
    //-------------------------METHODEN-------------------------------------------------//
   
    public static int getStelle(){
        return Position;
    }
    public static void setStelle(){
        Position++;
    }
    public static void setValueNull(){
        Value=0;
    }
    public static void setValuePlus(){
        Value++;
    }
    public static void setValueMinus(){
        Value--;
    }
    public static int getValue(){
        return Value;
    }
   public void Refresh(){
       ChilRaster.setLayout(new GridLayout(this.Zeilen,this.Spalten,2,2));
       ChilRaster.removeAll();
       for (int i=0;i<this.AnzFeld;i++)
       {
           RasterArray[i] = new MyField(i);
           ChilRaster.add(RasterArray[i]);
           RasterArray[i].circle.Stelle++;
       }
       this.pack();
       ChilRaster.repaint();
       ChilRaster.validate();
       MainPanel.repaint();
       MainPanel.validate();
       ChilRaster.repaint();
       ChilRaster.validate();
       ChilRaster.setVisible(false);
       MainPanel.setVisible(false);
       this.setVisible(false);
       ChilRaster.setVisible(true);
       MainPanel.setVisible(true);
       this.repaint();
       this.validate();
       this.setVisible(true);
       Main.this.setVisible(false);
       Main.this.setVisible(true);
   }
   
   public void initValues(int z, int s, int k){
            this.Zeilen = z;
            this.Spalten = s;
            this.AnzKreis = k;
            this.AnzFeld=z*s;
        }//END initValues
   
   public int getRandom(int anzfeld){ //Liefert RandomZahl
        Random r = new Random();
        Rand=Math.round(r.nextInt(anzfeld-1)); //
        return Rand;
    }//END getRandom
   
   public boolean isSetAll(){
            boolean Voll;
            int Set=0; //anz volle felder
            for (int i=0;i<AnzFeld;i++){
                if (RasterArray[i].circle.isDraw()){
                    Set++;
                }
            }
            if (Set==AnzFeld){
                Voll=true;
                return Voll;
            }
            else {
                Voll=false;
                return Voll;
            }
        }//END isSetAll

    //------------------------------------------------------------------------------------//
    public Main() //Konstruktor---
    {
        super("Test DIE ZWEITE!");
        super.setResizable(false);
        super.setPreferredSize(new Dimension(650,550));
        this.setBackground(Color.WHITE);
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
       
        ChilRaster.setBackground(Color.BLACK);
        MainPanel.setLayout(new BoxLayout(MainPanel, BoxLayout.Y_AXIS));
        ButtonPanel.setLayout(new GridLayout(2,2));
        ChilRaster.setLayout(new GridLayout(Zeilen,Spalten,2,2));
        MainPanel.setBackground(Color.BLACK);
        MainPanel.add(ButtonPanel); //-->
        ButtonPanel.add(SetAll);
        ButtonPanel.add(reset);
        ButtonPanel.add(zufall);
        ButtonPanel.add(cleartext);
        ButtonPanel.add(t1);
        ButtonPanel.add(t2);
        ButtonPanel.add(t3);
        ButtonPanel.add(change);
         /*final JPanel glass = (JPanel) this.getGlassPane();
         glass.setLayout(new BorderLayout());
         glass.add(glass1, BorderLayout.CENTER);
         glass.add(glass2, BorderLayout.WEST);
         glass.add(glass3, BorderLayout.EAST);*/
    /*//...
JPanel pnlGlassPane = new JPanel(){
     @Override
     public void paintComponent(Graphics g) {
         super.paintComponent(g);
         g.setColor(Color.RED);
         g.fillOval(10, 10, 100, 100);
     }
};
pnlGlassPane.setOpaque(false);
f.setGlassPane(pnlGlassPane);
f.getGlassPane().setVisible(true);
//...**/
        JPanel intoGlass = new JPanel(){
            @Override
            public void paintComponent(Graphics g){
                super.paintComponent(g);
                g.setColor(Color.red);
                int x1 = RasterArray[1].circle.getWidth()/4;
                int y1 = RasterArray[1].circle.getHeight()/4;
                int x2 = RasterArray[3].circle.getWidth()/2;
                int y2 = RasterArray[3].circle.getHeight()/2;
                Point p = RasterArray[2].circle.getLocation();
                Point p2 = RasterArray[3].circle.getLocation();
                //g.drawLine(x1,y1,x2,y2);
                //g.drawLine(430/2,220,0,220/2);
                g.drawLine(0,200,430,220);
                //g.drawLine(430*2,220*2+10,0,220*2+10);
                //g.drawLine(p.x+10, p.y+10, p2.x+10, p2.y+10);
                //g.fillOval(10,10,100,100);
                /*RasterArray[1].circle.getX();
        int x2 = RasterArray[1].circle.getX();
        int y1 = RasterArray[2].circle.getY();
        int y2 = RasterArray[2].circle.getY();*/
            }
        };
        intoGlass.setOpaque(false);
        this.setGlassPane(intoGlass);
        this.getGlassPane().setVisible(true);
        /*final JPanel glass = (JPanel) this.getGlassPane();
        glass.setLayout(new FlowLayout());
        JButton GlassButton = new JButton("GLASSSS");
        glass.add(GlassButton);
        this.add(glass);
       
         glass.setVisible(false);
        */
       
   

        SetAll.addActionListener(bl);
        reset.addActionListener(bl);
        zufall.addActionListener(bl);    
        change.addActionListener(bl);
        cleartext.addActionListener(bl);
        MainPanel.add(ChilRaster); //->
       
        for (int i=0;i<AnzFeld;i++) //Array füllen mit MyField
        {   
            RasterArray[i] = new MyField(i);
            ChilRaster.add(RasterArray[i]);
        }
        pack();
        this.getContentPane().add(MainPanel);
        /*for (int i=0;i<5;i++){ //5 Kreise die bereits gemalt sind !!!!
            RasterArray[i].circle.setDraw(true);
            repaint();
        }*/
    }
    //---//
     public class ButtonListener implements java.awt.event.ActionListener
        {//Listener Anfang
           
            public void actionPerformed(java.awt.event.ActionEvent e)
            {  
                   if( SetAll == e.getSource()) //n Kreise setzen
                   {//SetAll START
                       int Counter=0,Counter2=0; //Counter = Besetzte Felder
                       for (int j=0;j<AnzFeld;j++) //Überprüfung, besetzte Felder
                       {
                           if (RasterArray[j].circle.isDraw()){
                               Counter++;
                           }
                       }
                       int Rest = AnzFeld - Counter; //Rest = Leere Felder
                       if (isSetAll())
                       {
                           System.out.println("Alle Felder besetzt!");
                           //ABBRUCH
                           return; //wenn alle felder voll -> Abbruch
                       }
                       if (Rest >= AnzKreis) //Hier
                       {
                           //System.out.println("Rest: " + Rest + " AnzahlKreis: " + AnzahlKreis);
                           for (int i=0;i<AnzKreis;i++)
                           {
                               if(!RasterArray[getRandom(AnzFeld+1)].circle.isDraw()){
                                   RasterArray[Rand].circle.setDraw(true);
                               }
                               else
                               {
                                   i--;
                               }
                           }
                           System.out.println("Es wurden "+AnzKreis+" Kreise gesetzt!");
                          // System.out.println("rest: "+Rest);
                       }
                       else
                       {
                           System.out.println("Zu wenig freie Felder... ");
                           return;
                       }
                   }//SetAll END
                   
                   else if (reset == e.getSource()) //RESET BUTTON - reset -> Spielfeld leeren!
                   {//-----RESET----//==WORK!
                       for (int i=0;i<AnzFeld;i++)
                       {
                           RasterArray[i].circle.setDraw(false);
                          
                       }
                       t1.setText("Zeile..");
                       t2.setText("Spalte...");
                       t3.setText("Kreis...");
                       Zeilen = DefaultZeile;
                       Spalten = DefaultSpalte;
                       AnzKreis = DefaultKreis;
                       for (int i=0;i<100;i++)
                       {
                           System.out.println("");
                       }
                       setValueNull();
                       initValues(DefaultZeile,DefaultSpalte,DefaultKreis);
                       Refresh();
                       System.out.println("Zurückgesetzt auf Standarteinstellung!");
                   }//----RESET------//
                   else if (zufall == e.getSource()) //RANDOM BUTTON - Zufall -> Alle Steine setzen!
                   {//RAND START == WORK!
                       end=false;
                       getRandom(AnzFeld+1);
                       while (end==false)
                       {
                           if (!RasterArray[Rand].circle.isDraw()){ //Wenn draw=false/ Feld leer
                               RasterArray[Rand].circle.setDraw(true);
                               System.out.println("Kreis in Feld " + Rand + " gesetzt");
                               end=true;
                           }
                           else
                           {
                               getRandom(AnzFeld+1); //Damit keine Endlosschleife
                               if (isSetAll())
                               {
                                   System.out.println("Alle Felder belegt!");
                                   return;
                               }
                           }
                           getRandom(AnzFeld+1);
                       }
                   }//RAND END
                   else if (change == e.getSource()) //CHange Layout!
                   {//--------------CHANGE BUttON--------------------//                  
                       putZeile = Integer.parseInt(t1.getText());    System.out.println("Wert Zeile = " + putZeile);
                       putSpalte = Integer.parseInt(t2.getText());    System.out.println("Wert Spalte = " + putSpalte);
                       putKreis = Integer.parseInt(t3.getText());    System.out.println("Wert Kreise = " + putKreis);
                       initValues(putZeile,putSpalte,putKreis);
                       Refresh();
                       System.out.println("Werte geändert!");
                   }//--------------CHANGE BUttON--------------------//
                   else if (cleartext == e.getSource())
                   {
                       t1.setText("");
                       t2.setText("");
                       t3.setText("");
                       System.out.println("Textfelder geleert.");
                       for (int i=0;i<AnzFeld;i++){
                           System.out.println("Array " + i + " = "+RasterArray[i].circle.getMerk()); 
                       }
                   
                   }
            }
        }//Listener ENDE   
    public static void main (String[] args) {
        Main frame = new Main();
        frame.setVisible(true);
        }
}
Das ist meine Klasse, die die PanelFelder enthält:
Java:
      //Klasse MyField ---------------------------------------------------
    public class MyField extends JPanel{ //ist auch ein JPanel
        public Circle circle;

        public MyField(int id){  //MyField Konstruktor
            super ();
            circle = new Circle(id);
            circle.setVisible(true);
            this.setBackground(Color.BLACK);//3
            this.setLayout( new GridBagLayout()) ;
            /*
             int gridx, int gridy, int gridwidth, int gridheight, double weightx, double weighty,
                              int anchor, int fill,
                              Insets insets (Abstand N/O/S/W/, int ipadx, int ipady) {
             */
            this.add(circle, new GridBagConstraints(1, 1, 1, 1, 1.0, 1.0,
                    GridBagConstraints.CENTER, GridBagConstraints.BOTH,
                    new Insets(1,1,1,1), 0, 0));

        }
   
    public static void main (String[] args){
       
    }
}
Und das das einzelne Feld, das mehrfach in dem Raster erstelllt und angeordnet wird:
Java:
public class Circle extends JPanel implements MouseInputListener{ //EXTEND JPANEL!!!
   
    private boolean draw = false;
    private Color color = Color.BLUE;
    private int id;
    int Merk;
    int temp;
    boolean rel = false;
    boolean Klick=false;
    static  int Stelle;
    public void initReihe(boolean var){
        if (var){
            temp = Main.getValue();
        }
    }
    public int getInternValue(){
        this.Merk=Main.getValue();
        return this.Merk;
    }
   
    public int getMerk(){
        return this.Merk;
    }
    public boolean getRelease(){
        return this.rel;
    }
    public void setRelease(boolean var){
        this.rel=var;
    }
    public int gettheID(){
        return this.id;
    }
    public void setKlick(){
        Klick = true;
    }
    public void ValuePlus(){
        Main.setValuePlus();
    }
    public void ValueMinus(){
        Main.setValueMinus();
    }
    public int getVar(){
        int var = Main.getValue();
        return var;
    }
   
    public Circle(int id) {
        this.Stelle=Main.getStelle();
        this.id=id;
        //setValue (1=++ 2=-- | x=getValue()
        this.addMouseListener(this);
        setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
        addMouseListener(new MouseAdapter(){
            public void mousePressed(MouseEvent e) {
               
                if (isDraw()) {
                    setDraw(false);
                    //setKlick();
                    //Main.Position--;
                } else {
                    setDraw(true);
                    Merk=Main.getValue();
                    Main.setValuePlus();
                    initReihe(true);

                } 
            }
        });
        //this.setBackground(Color.MAGENTA); //innerstes Panel
    }
    //Methoden der Klasse Circle2
    public boolean isDraw() {
        return draw;   
    }

    public void setDraw(boolean draw) {
        this.draw = draw;
        repaint();
    }

    public void setColor(Color color) {
        this.color = color;
        repaint();
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(60, 60);
    }
   
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        int fontSize = 20;
        if (draw) {
           
            g.setColor(color);
            g.fillOval(getWidth()/4, getHeight()/4, getWidth()/2, getHeight()/2);
            g.setFont(new Font("TimesRoman", Font.BOLD, fontSize));
            g.drawString(""+temp, 0, fontSize);
            initReihe(false);
         
        }
    }
    @Override
    public void mouseClicked(MouseEvent e) {
        // TODO Auto-generated method stub
       
       
    }
    @Override
    public void mousePressed(MouseEvent e) {
        //System.out.println("click : "+id);
        if(isDraw()){
            Main.setStelle();
            Stelle=Main.getStelle();
        }
        //System.out.println("KORD: "+e.getPoint());
        /*
        System.out.println("drag id -> "+this.id);
        Point pstart = e.getPoint();
        System.out.println("Point start: "+pstart);*/
    }
    @Override
    public void mouseReleased(MouseEvent e){

    }
    @Override
    public void mouseEntered(MouseEvent e) {
        /*if (getRelease()){
            System.out.println("enter id: "+id);
            setRelease(false);
        }*/
    }
    @Override
    public void mouseExited(MouseEvent e) {
    }
    @Override
    public void mouseDragged(MouseEvent e) {
    }
    @Override
    public void mouseMoved(MouseEvent e) {
    }
}//Ende Circle2 Klassepackage Numbers;

Wäre sehr nett wenn jemand eine Idee hätte ;)
Vielen Dank im Vorraus.
 

Gucky

Top Contributor
Die Mitte des Kreises berechnest du mit:

Java:
g.drawOval(x, y, w, h);
double mitteX = x + w / 2;
double mitteY = y + h / 2;

Vielleicht hilft dir das schon.
 

Elenteria

Bekanntes Mitglied
Es gib die Klasse SwingUtilies mit der Methode convertPointToScreen(). Die Konvertiert wie der Name schon sagt einen Punkt innerhalb einer Komponenten zu Bildschrimkoordinaten.
 

hollowmaster

Mitglied
Ja aber das Problem ist ja, dass ich zb 3x3 Panels habe und die immer die mitte von (10/20) haben, und wenn ich die konvertiere zu Bildschirmkoordinaten, dann hab ich ja 9x den gleichen Wert.. ich müsste ja irgendwie alle Mitten haben, und die müssten verschiedene Werte haben, sodass ich die Mitten miteinander verbinden kann.
Und danke für die bisherigen Antworten ;)
 

Elenteria

Bekanntes Mitglied
nein du übergibst der Methode die Koordienate innerhalb der Komponente und die Komponente von der die Koordinaten stammt natürlich auch.
z.b.
Code:
Point myPoint =  getCenterOfComponent(myComponent);
Point myPointScreen = SwingUtilies.convertPointToScreen(myPoint, myComponent);
 

hollowmaster

Mitglied
Hey, also ich hab meine Kreise ja immer in der Mitte von den Panels zentriert, und malen tu ich die immer so:
g.fillOval(getWidth()/4, getHeight()/4, getWidth()/2, getHeight()/2); ... und wenn ich nun die Formel von Gucky benutze um die mitte zu finden
g.drawOval(x, y, w, h);
double mitteX = x + w / 2;
double mitteY = y + h / 2;

dann wäre es ja zb so:
int x=RasterArray[0].circle.getWidth()/4;
int y=RasterArray[0].circle.getHeight()/4;
int w=RasterArray[0].circle.getWidth()/2;
int h=RasterArray[0].circle.getHeight()/2;

mitteX=x+w/2; mitteY=y+h/2; und dann Point p1 = new Point(mitteX,mitteY); und das dann mit SwingUtilities.convertPointToScreen(p1,RasterArray[0].circle);
Und wenn ich das dann nochmal mache mit RasterArray[3].circle z.b. dann hab ich p1 und p2 die konvertiert sind... und wenn ich dann eine Linie ziehe ->
g.drawLine(p1.x,p1.y,p2.x,p2.y);
Dann malt es nur in ein Kästchen eine Linie....weiss evtl jemand, was ich falsch mache?
Hier das Bild: bild.JPG
Hier auch noch die Funktion für die Mitte zu finden:
public Point getCenterOfComponent(Component c){
int x,y,w,h;
x=c.getWidth()/4; y=c.getHeight()/4;
w=c.getWidth()/2; h=c.getHeight()/2;
int mitteX=x+w/2;
int mitteY=y+h/2;
return new Point(mitteX,mitteY);
}
Und hier um es Umzuwandeln:
public Point getConvertedPoint(Point p, Component c){
Point cPoint = p;
SwingUtilities.convertPointToScreen(cPoint, c);
return cPoint;
}
Und so wollte ich es eigentlich machen:
vorlage.jpg
Ich wäre äußerst dankbar wenn mir jemand auf die sprünge helfen könnte ^^
liebe grüße
hollowmaster :)
EDIT: über die ganzen Panels die und Buttons hab ich ein GlassPane drübergemacht, um dort dann zu zeichnen... das zeichnen als solches geht, nur nicht an den erhofften Positionen...;)
 

Gucky

Top Contributor
Ich muss gestehen, dass ich den Fehler nicht sehe und deshalb geht es jetzt fröhlich ans Debuggen.
Geben deine Funk...Methoden (in Java gibt es keine Funktionen) die richtigen Werte zurück?
 

hollowmaster

Mitglied
Also ich hab mal die Koordinaten von RasterArray[1].circle und RasterArray[2].circle ausgegeben:
P1 für [1] und P2 [2]

P1 unkonv.= java.awt.Point[x=104,y=54]
P2 unkonv.= java.awt.Point[x=104,y=54]

P1 konv. = java.awt.Point[x=638,y=481]
P2 konv. = java.awt.Point[x=853,y=481]
Irgendwie scheinen die Koordinaten nicht zu stimmen..
Fällt jemand vielleicht etwas an der Formel zur Berechnung der Mitte auf ? Fehler oder so ?
also das ist der Befehl zum zeichnen meiner Kreise: g.fillOval(getWidth()/4, getHeight()/4, getWidth()/2, getHeight()/2); ... Und diese Formel hab ich in meine Methode eingebaut:
g.drawOval(x, y, w, h);
double mitteX = x + w / 2;
double mitteY = y + h / 2;
Nachfolgend mein Code:

public Point getCenterOfComponent(Component c){
int x,y,w,h;
x=c.getWidth()/4; y=c.getHeight()/4;
w=c.getWidth()/2; h=c.getHeight()/2;
int mitteX=x+w/2;
int mitteY=y+h/2;
return new Point(mitteX,mitteY);

}
Kann es evtl daran liegen, dass ich beim Zeichnen von dem Kreis schon die Mitte bestimme ?
Muss ich dann die Formel zum berechnen der Mitte umbauen ? auf irgendwas anderes achten?
lg hollow und thx an alle ;)
EDIT::
Zudem weiss ich leider nicht ob die Werte richtig oder falsch sind, ich kenn mich da nicht so gut aus bin neueinsteiger in Java das is mein erstes Programm und das mit dem debuggen versteh ich nicht, es gibt ja kein fehler, er macht ja alles wie er soll nur die werte sind nicht korrekt, also ich bekomme keine exception oder sonstiges in der Konsole....
 

Gucky

Top Contributor
Fangen wir mal klein an und setze ein einzelnes Panel mit Kreis auf dein Frame, bestimme die Mitte davon auf dem GlassPane und male eine Linie von dort zum Ursprung (0|0).

Die Methode getCenterOfComponent ist viel zu kompliziert. Einfach return new Point(c.getWidth() / 2, c.getHeigth() / 2); tut zumindest das, was der Name verspricht.
 

hollowmaster

Mitglied
Hey Leute ;););) habs nun doch alleine hinbekommen ... dachte ich poste mal die Lösung.
Nun ich habe die Methode getCenterOfComponent(Component c)
Hier die komplette Methode:
Java:
public Point getCenterOfComponent(Component c){
        int x,y,w,h;
        x=c.getWidth()/4;     y=c.getHeight()/4;
        w=c.getWidth()/2;    h=c.getHeight()/2;
        int mitteX=x+w/2;
        int mitteY=y+h/2;
        return new Point(mitteX,mitteY);
    }
Und dann habe ich den Punkt genomen und ihn mit dem nachfolgdenden Code initialisiert ;)
returntedPoint=SwingUtilities.convertPoint(Quellkomponente, returnedPoint, Zielkomponente);
gemacht und so hab ich dann die perfekte Mitte für jedes Panel bekommen ;)
Also damit wäre dieser Thread gelöst :)
 

InfectedBytes

Top Contributor
Warum machst du das so kompliziert?
Denk mal genau nach was du da machst:
Java:
x=c.getWidth()/4;   
y=c.getHeight()/4;
w=c.getWidth()/2;  
h=c.getHeight()/2;
int mitteX=x+w/2;
int mitteY=y+h/2;
//setz mal x,y,w und h ein
int mitteX=c.getWidth()/4+c.getWidth()/2/2;
int mitteY=c.getHeight()/4+c.getHeight()/2/2;
//und das ist logischerweise:
int mitteX=c.getWidth()/2;
int mitteY=c.getHeight()/2;
Anstatt also deinen unnötig komplizierten Code zu benutzen, kannst du auch einfach das benutzen, was dir schon mehrfach angeraten wurde:
Java:
public getCenterOfComponent(Component c){
  return new Point(c.getWidth/2, c.getHeight/2);
}
 

hollowmaster

Mitglied
Looool ^^ srii ich hab mir die Methode nicht länger angeschaut gehabt, aufgrund dessen, da ich nun an einer neuen Erweiterung dran bin, also nun immer von Mitte zur Mitte ein Strich zu ziehen, aber nur dann, wenn mindestens 2 Kreise gezeichnet sind.. ;)
Aber danke für diese Vereinfachung, werde es direkt benutzen ^^
 

hollowmaster

Mitglied
Hi Leute ^^,

wie kann ich eine Linie (startx,starty,endx,endy) in einer Variable speichern ?
Sodass ich dann am schluss eine Liste von Linien habe und diese mit einer Schleife dann malen kann.
Hintergrund: ich male immer von Kreis 1 zu 2 eine Linie dann von 2 zu 3 usw. aber wenn ich dann 2-3 mache verschwindet die Linie 1 zu 2. Deshalb möchte ich diese Linie speichert, und dann immer beim PaintComponent die Linien alle aufeinmal dann malen.

Wäre euch sehr verbunden :)

lg hollow
 

InfectedBytes

Top Contributor
Wenn die Linien immer miteinander verbunden sind, reicht es auch eine Liste aus Punkten zu machen und dann immer eine Linie zwischen zwei nachfolgenden Punkten ziehen. Dafür kannst du dann z.B. die Point Klasse aus dem awt package verwenden
 

hollowmaster

Mitglied
Danke für die schnellen Antworte ;););)
Aber ich habe es jetzt selbst gelöst, indem ich einfach nachdem ich die Linie gemalt habe, die Koordinaten in eine Liste getan habe, dabei habe ich 2 Listen genommen, "StartKoordinaten"-Liste und "EndKoordinaten"-Liste und die kann man dann bei jedem repaint() in einer for-Schleife schnell duchlaufen und es erzielt meinen gewünschten Effekt.
Danke an alle ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Anfängerin möchte Linie zeichnen Java Basics - Anfänger-Themen 8
snipesss Linie zeichnen ohne extra Klasse? Java Basics - Anfänger-Themen 3
A Linie Zeichnen Applet mit Double Wert Java Basics - Anfänger-Themen 3
N Linie auf spezielle Area zeichnen Java Basics - Anfänger-Themen 9
A Linie zeichnen Java Basics - Anfänger-Themen 4
S Fette Linie zeichnen Java Basics - Anfänger-Themen 3
G dicke linie zeichnen bzw schräges rechteck füllen Java Basics - Anfänger-Themen 2
A Linie zeichnen per Knopfdruck --> Fehler Java Basics - Anfänger-Themen 7
J Beim Start des Programms zB. eine Linie in JPanel ausgeben Java Basics - Anfänger-Themen 4
J Linie wird zu lang gezeichnet Java Basics - Anfänger-Themen 4
C JFreeChart Linie nicht korrekt dargestellt Java Basics - Anfänger-Themen 1
P Überprüfen ob Mausklick auf Linie ist? Java Basics - Anfänger-Themen 6
W drawLine(...) - Linie soll nur begrenzt lang sein Java Basics - Anfänger-Themen 9
H Erste Schritte Linie/Raster mit Magnetfunktion Java Basics - Anfänger-Themen 1
X Kreis/Linie Programmieren Java Basics - Anfänger-Themen 1
B Konsoleninput eingegebene linie nach Eingabe löschen Java Basics - Anfänger-Themen 5
H gezeichnete Linie Eventhandling Java Basics - Anfänger-Themen 2
G Frage wegen Applet( Linie) Java Basics - Anfänger-Themen 2
G Linie zeichen mit JLabel Java Basics - Anfänger-Themen 7
M Linie Java Basics - Anfänger-Themen 4
S Linie ausgeben, die sich auf Knopfdruck verlängert Java Basics - Anfänger-Themen 2
S Linie ausgeben, die sich periodisch verlängert Java Basics - Anfänger-Themen 10
V Linie beginnt nich bei 0,0 Java Basics - Anfänger-Themen 2
G Linie innerhalb Rechteck Java Basics - Anfänger-Themen 2
M AWT -eigene DrawLine Methode mit Farbverlauf in der Linie ? Java Basics - Anfänger-Themen 2
G Linie/Gitter in GridBagLayout Java Basics - Anfänger-Themen 4
B Eine Linie zeichnenmit Java, ich verstehe das einfach nicht Java Basics - Anfänger-Themen 4
J SWING UI Designer und zeichnen Java Basics - Anfänger-Themen 4
luggas89 Mit Jframe live zeichnen Java Basics - Anfänger-Themen 4
K 3D Fläche Zeichnen Java Basics - Anfänger-Themen 2
J Bild auf Hintergrundbild zeichnen Java Basics - Anfänger-Themen 5
R Iterativ zeichnen Java Basics - Anfänger-Themen 1
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
P JFrame, Linien zeichnen, MouseListener Java Basics - Anfänger-Themen 2
KogoroMori21 Mit einer Schleife eine Treppe zeichnen Java Basics - Anfänger-Themen 29
V Speicherzustand zeichnen Java Basics - Anfänger-Themen 0
O Klappt nicht: Ein Panel neu zeichnen Java Basics - Anfänger-Themen 3
CptK Interface Bilder mit Graphics g zeichnen Java Basics - Anfänger-Themen 7
B Java JFrame zeichnen Java Basics - Anfänger-Themen 4
Mosquera f(x)=x² zeichnen Java Basics - Anfänger-Themen 5
J Graphen in Java zeichnen Java Basics - Anfänger-Themen 11
D JPanel mehrere Formen zeichnen Java Basics - Anfänger-Themen 5
S Zeichnen mit Wiederholungen Java Basics - Anfänger-Themen 12
B Wie kann ich Linien rekursiv zeichnen? Java Basics - Anfänger-Themen 4
P Einen String mittig zeichnen? Java Basics - Anfänger-Themen 1
T Koordinatensystem zeichnen - Variablen merken? Quadratische Funktion zeichnen? Java Basics - Anfänger-Themen 5
M Ein Bild durch Objekterzeugung zeichnen Java Basics - Anfänger-Themen 5
W Wie kann ich in Java eine Kurve aus Punkten zeichnen? Java Basics - Anfänger-Themen 25
C Umrisse von Bilddateien mithilfe Polygonen zeichnen Java Basics - Anfänger-Themen 5
G Aus einem Code ein Sequenzdiagramm zeichnen? Java Basics - Anfänger-Themen 1
K Rechtecke rekursiv zeichnen Java Basics - Anfänger-Themen 20
V Quadrate rekursiv zeichnen Java Basics - Anfänger-Themen 7
B Java Graphen zeichnen - Brauche Hilfe Java Basics - Anfänger-Themen 9
C Schleifenaufgabe - Molekül zeichnen Java Basics - Anfänger-Themen 6
K Ungenauigkeit beim Zeichnen von Funktionen Java Basics - Anfänger-Themen 6
N Treppe zeichnen Java Basics - Anfänger-Themen 1
M Quadrat zeichnen einfach bitte! Java Basics - Anfänger-Themen 2
P Shape Zeichnen klappt nicht - einlesen der Breite/Höhe schon Java Basics - Anfänger-Themen 1
M in Java zeichnen Java Basics - Anfänger-Themen 2
J JLabel Icon neu zeichnen Java Basics - Anfänger-Themen 2
J Rechteck zeichnen mit Canvas Java Basics - Anfänger-Themen 7
D Zeichnen, Schleifen Java Basics - Anfänger-Themen 7
S Zeichnen , Schleifen Java Basics - Anfänger-Themen 4
S Rechteck zeichnen Java Basics - Anfänger-Themen 2
S Ein Graphics Obejct mehrmals mit denselben Eigenschaften zeichnen lassen?!?!? Java Basics - Anfänger-Themen 4
S Wo beginnt ein Draw String zu zeichnen. Java Basics - Anfänger-Themen 4
S Paint Anwendung: Freihandlinien zeichnen Java Basics - Anfänger-Themen 4
llabusch Layout neu zeichnen lassen Java Basics - Anfänger-Themen 2
A Histogramm zeichnen Java Basics - Anfänger-Themen 2
S Punkt in Java zeichnen Java Basics - Anfänger-Themen 14
E Dreieck zeichnen Java Basics - Anfänger-Themen 3
gamebreiti Methoden JPanel nach clearAll() und add neu zeichnen Java Basics - Anfänger-Themen 1
T Baum mit Turtle zeichnen Java Basics - Anfänger-Themen 2
C Hilfe beim Zeichnen Java Basics - Anfänger-Themen 8
D Haus zeichnen Java Basics - Anfänger-Themen 4
K Methoden Objekt auf JFrame zeichnen Java Basics - Anfänger-Themen 16
H 27 Kreise Zeichnen Java Applet Java Basics - Anfänger-Themen 2
S Problem mit "Zeichnen auf Kommando" Java Basics - Anfänger-Themen 2
M Double Punkte Zeichnen Java Basics - Anfänger-Themen 7
S Funktionen zeichnen Java Basics - Anfänger-Themen 2
2 Bild auf JApplet zeichnen Java Basics - Anfänger-Themen 18
R 2D Grafik zeichnen Java Basics - Anfänger-Themen 4
F Line zeichnen und Werte ändern Java Basics - Anfänger-Themen 6
B Grafik zeichnen Java Basics - Anfänger-Themen 25
B Erste Schritte Weihnachtsbaum zeichnen Java Basics - Anfänger-Themen 6
N Per Button Kreis zeichnen Java Basics - Anfänger-Themen 8
T mehrere Punkte zeichnen ohne löschung Java Basics - Anfänger-Themen 4
J Für 3 Sekunden etwas bestimmtes zeichnen Java Basics - Anfänger-Themen 8
C Kreis nach Mausklick zeichnen Java Basics - Anfänger-Themen 5
C Auf Button-Druck zeichnen Java Basics - Anfänger-Themen 2
R Methoden Zeichnen auf Button-Druck durch Paint-Methode Java Basics - Anfänger-Themen 2
D Klassen Zeichnen von Figuren mittels vorgegebener Klasse Java Basics - Anfänger-Themen 3
J Schachbrett zeichnen Java Basics - Anfänger-Themen 9
J Innerhalb der Border zeichnen Java Basics - Anfänger-Themen 9
J Hoher Speicherverbrauch beim Zeichnen von Images aus einer ArrayList Java Basics - Anfänger-Themen 10
A Blitze mit Linien zeichnen Java Basics - Anfänger-Themen 15
U Kreis um Textfelder zeichnen Java Basics - Anfänger-Themen 4
R Balkendiagramm zeichnen Java Basics - Anfänger-Themen 14
J Bild anhand von Koordinaten zeichnen Java Basics - Anfänger-Themen 10
B GUI Parkplatz zeichnen Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben