Rectangles + Text

plammy

Bekanntes Mitglied
Hallo 🙂

Ich belästige mal wieder mit dummen Fragen 🙂 Ich kann nichts für 🙂 Bin voll der Anfänger seit mir nicht böse 🙂

Ich erstelle dank einem Button Rechtecke, deren Höhe und Breite in zwei textfeldern von dem User eingegeben werden. Nach der Erstellung von jedem Rechteck kann ich den iwohin verschieben.. Klappt alles super. Jetzt will ich in einem Textfeld für jeden einzelnen diesen Rechtecken text eingeben können der auf dem rechteck erschient. Das klappt sogar auch. Nur wenn ich für das neue Rechteck, der andere größe hat auch neuen text erstellen will der sich darauf plazieren soll, wird der alte text auf dem vorigen Rechteck überschieben mit dem neuen. Wieso??

Java:
 public class CreateFile extends JPanel implements ActionListener
{
..
 public void actionPerformed(ActionEvent object) 
    {
 if (object.getSource() == buttonOrangeForms)
        {    
            try{
                bausteinOrangeW = Integer.parseInt(bausteinOrangeWidth.getText());
                bausteinOrangeH = Integer.parseInt(bausteinOrangeHeight.getText()); 
                //Text für Baustein auslesen
                bausteinTF = bausteinTextField.getText();
                
                editPanel.addOrangeRectangle(bausteinTF,new Rectangle(50,50,bausteinOrangeW, bausteinOrangeH));
                repaint();    
            }catch(NumberFormatException e){
                e.printStackTrace();
            }
            
        } 

    }

class EditPanel extends JPanel
{

    ArrayList<Rectangle> rectangles2 = new ArrayList<>();
    ArrayList<String> texts = new ArrayList<>();

 public  EditPanel()
    {  
        super();
    } 

 private void drawString(Graphics g, String text, int x, int y) {
        for (String line : text.split("\n"))
            g.drawString(line, x, y += g.getFontMetrics().getHeight());
    }

protected void paintComponent(Graphics g) 
    {
        super.paintComponent(g);
        
        Graphics2D g2d = (Graphics2D) g;
        
        for(Rectangle r2: rectangles2){   
             for(String s: texts){
                g2d.setColor(orangeRect);
                g2d.fill(r2);
                g2d.setColor(border);
                g2d.draw(r2);
                drawString(g2d, s +"\nsz="+r2.width+"x"+r2.height,r2.x+10,r2.y+10);
            }    
        }

public void addOrangeRectangle(String s,Rectangle rec2){     
       rectangles2.add(rec2);     
       texts.add(s);
       repaint();
     }
 

Anhänge

  • Unbenannt.jpg
    Unbenannt.jpg
    34,1 KB · Aufrufe: 51
So spontan würd ich sagen liegt das an deiner verschachtelten foreach schleife.
Du gehst für jedes Rechteck alle Texte durch allerdings willst du nur einen bestimmten oder?

Könntest zumbeispiel den Text mittels:
Java:
texts.get(rectangles2.indexOf(r2));
holen

Aber auch nur wenn wirklich jedem Rechteck ein Text zugeorndet ist.
Ansonsten ginge auch einfach eine for-schleife


Edit: Die doppelte foreach-schleife ist sowieso in dem sinne "schlecht" da du (bei deinen 2 Rechtecken) jedes Rechteck 2 mal zeichnest.
MFG
Clayn
 

Zurück
Oben