Text (String) zu einer Box hinzufügen

  • Themenstarter Themenstarter ash34
  • Beginndatum Beginndatum
A

ash34

Gast
Hy,

ich würde gerne zu einer Box einen String hinzufügen. Dieser String sollte links oben in der Box stehen.
Hier mal die Klasse Box:

Java:
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.Stroke;


public class Box {

	  private int x, y;
      private int width, height;
      private Stroke stroke = new BasicStroke(1);
      private Rectangle bounds;
      
      public Box(int width, int height, int x, int y) {
          this.width = width;
          this.height = height;
          this.setLocation(x, y);
      }
      
      public void setLocation(int x, int y) {
          this.x = x;
          this.y = y;
          bounds = new Rectangle(x, y, width, height);
      }
      
      public Rectangle getBounds() {
          return bounds;
      }
      
      public void setText(String str){
    	  
      }
      
      public void paintComponent(Graphics g) {
          Graphics2D g2 = (Graphics2D)g.create();
       
          g2.setStroke(stroke);
          g2.setColor(Color.WHITE);
          g2.fillRect(x, y, width, height);
          g2.setColor(Color.BLACK);
          g2.drawRect(x, y, width, height);
          g2.dispose();
  }
}

Hat jemand eine Idee?

(setText() sollte das einfügen des Textes dann realisieren...ich weiß halt nur nicht wie..)
 
Zuletzt bearbeitet von einem Moderator:
Das hatte ich schon probiert..aber dann wird der String nicht in die Box, sondern ins Fenster gesetzt...seltsamerweise...

Java:
  g.drawString("Test", 10, 10);

Das war mein Ansatz...
Das Problem ist, dass sobald ich die Box dann per Maus im Fenster verschiebe, der Text lose im JFrame steht...
 
Das geschieht doch durch die beiden int im Aufruf von g.drawString(String text, int1, int2), oder?
 
Was willst du denn machen? Wieso benutzt du nicht einfach JTextFields?

Zu deinem Problem:

Wenn du
Code:
g.drawString("Test", 10,10);
aufrufst und danach
Code:
Box
verschiebst, wird der String immer noch bei 10,10 gezeichnet. Du musst mit den Variablen von Box arbeiten.
So in etwa:
Java:
g.drawString("Test", x+10, y+10);

Edit: Das setzt vorraus, dass du bei einer Verschiebung die Variablen x und y veränderst.
 
Ich benötige diese Boxen, weil ich eine Art Puzzle eines ICMP Pakets programmieren muss.

Der Text lässt sich mit

Java:
g.drawString("Test",x,y);

auch wunderbar mit der Box verschieben.

Will ich ihn allerdings in die Box setzen, dann ist er nicht mehr zu sehen...
 
Naja, wenn ich x,y benutze, dann steht der Text genau links oben an der Box (sollte ja auch so sein).
Verschiebe ich aber y (z.B. mit y+5), dann ist nur noch die Hälfte des Textes zu sehen. Die andere Hälfte wird von der Box überdeckt.

Die paintComponent() wird in dieser Klasse aufgerufen:

Java:
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JPanel;


public class BoxPanel extends JPanel {

	        /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
			private List<Box> boxList;
	        private int currentBox = -1;
	        private Point clickPoint;
	        private Point position;
	        
	        public BoxPanel() {
	            boxList = new ArrayList<Box>();
	            
	            this.addMouseListener(new MouseListener() {
	                public void mouseClicked(MouseEvent e) {}
	                public void mouseEntered(MouseEvent e) {}
	 
	                public void mouseExited(MouseEvent e) {
	                    currentBox = -1;
	                }
	 
	                public void mousePressed(MouseEvent e) {
	                    for (int i=boxList.size()-1; i>=0; i--) {
	                        clickPoint = e.getPoint();
	                        Box box = boxList.get(i);
	                        if (box.getBounds().contains(clickPoint)) {
	                            currentBox = i;
	                            position = new Point(box.getBounds().x, box.getBounds().y); 
	                            return;
	                        }
	                    }
	                }
	 
	                public void mouseReleased(MouseEvent e) {
	                    currentBox = -1;
	                }
	            });
	            
	            this.addMouseMotionListener(new MouseMotionListener() {
	                public void mouseDragged(MouseEvent e) {
	                    if (currentBox!= -1) {
	                        Box box = boxList.get(currentBox);
	                        Point p = e.getPoint();
	                        box.setLocation(position.x + (p.x - clickPoint.x), position.y + p.y - clickPoint.y);
	                        repaint();
	                    }
	                }
	 
	                public void mouseMoved(MouseEvent e) {}
	            });
	        }
	        
	        public void addBox(Box box) {
	            this.boxList.add(box);
	            this.repaint();
	        }
	        
	        public List<Box> getBoxList(){
	        	return this.boxList;
	        }
	        
	        public void paintComponent(Graphics g) {
	            super.paintComponent(g);
	            for (Box box: boxList)
	                box.paintComponent(g);
	        }
}
 
Fehler gefunden 😉

Java:
 g.drawString("Test", x, y+10);

muss in der paintComponent(); in Box als letztes ausgeführt werden (unmittelbar vor dispose()😉
 

Zurück
Oben