Rectangle Namen geben? Alternativen auch gerne gesehen.

Torquemada

Mitglied
Hallo ich habe einen Code für das Uraltgame Pong geschrieben und möchte nun, dass man anzeigen lassen kann, wie viele Punkte jeder hat. Wie kann ich also einen Text in ein Rectangle bringen? oder kann ich doch noch irgendwie eine JPanel o.ä. hier "reinschreiben"? Denn ich habe es versucht hab es aber nicht geschafft, da ein JPanel einzufügen.

Der Code:
Java:
import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import javax.swing.*;

public final class Example extends JPanel implements Runnable, KeyListener, ActionListener{

   private static final long serialVersionUID = 1L;
   private static int SPEED = 125;
   
   JFrame frame;        //das Fenster
   Rectangle bat1;      //Spieler 1
   Rectangle bat2;      // Spieler 2
   Rectangle ball;      // der Ball
   
   int dx = SPEED; //Bewegungsänderung in x
   int dy = SPEED; //Bewegungsänderung in y
   long time = 0;
   
   public static void main(String[] args) throws IOException{

      new Example();
}
   
   public Example() throws IOException{
      
      frame = new JFrame("Flying Ball");
      frame.setSize(800,578);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.add(this);       
      
      bat1 = new Rectangle(370,30,60,10);
      bat2 = new Rectangle(370,511,60,10);
      ball = new Rectangle(200,200,10,10);
      
      bat1.toString();
      
      setBackground(Color.black);
      frame.addKeyListener(this);
      
      frame.setVisible(true);       
      time = System.nanoTime();
      
      Thread t = new Thread(this); 
      t.run();
    }

   public void run() {
   
      while(frame.isVisible()){ 
         
         moveBall();       
         checkCollision(); 
         
         try {
            Thread.sleep(26);  
         } catch (InterruptedException e) {}
         
         repaint();  //Repaint
      }
      
   }
   
   
   private void checkCollision(){
      
      if(bat1.intersects(ball)){  
         dy *= -1;                
      }
      if(bat2.intersects(ball)){  
         dy *= -1;                
      }
   }
   
   private void moveBall(){
       
      if(ball.x<0){
         dx = SPEED;
      }

      if(ball.x+ball.width >getWidth()){
         dx = -SPEED;
      }

      if(ball.y<0){
         dy = SPEED;
      }
      
      if(ball.y+ball.height>getHeight()){
         dy = -SPEED;
      }
      
          if(ball.y < 25) {
          System.out.println("Spieler 1 hat verloren!");
          System.out.println("Spieler 2 hat gewonnen! Glückwunsch!");
          ball.y = 300;
          ball.x = 400;
          dx = 0;
          dy = 0;
          bat1.setLocation(370, 30);
          bat2.setLocation(370, 511);
          System.out.println("Drücke 'r' um erneut zu spielen.");  
   }
          
          if(ball.y > 516) {
          System.out.println("Spieler 2 hat verloren!");
          System.out.println("Spieler 1 hat gewonnen! Glückwunsch!");
          ball.y = 300;
          ball.x = 400;
          dx = 0;
          dy = 0;
          bat1.setLocation(370, 30);
          bat2.setLocation(370, 511);
          System.out.println("Drücke 'e' um erneut zu spielen.");  
   }

      long delta = System.nanoTime() - time;  
      time = System.nanoTime();  
  		 
      ball.x += dx*(delta/1e9);
      ball.y += dy*(delta/1e9);


   }


   @Override
   protected void paintComponent(Graphics g) {
       
      super.paintComponent(g);
      
      g.setColor(Color.green);
      g.fillRect(bat1.x, bat1.y, bat1.width, bat1.height);
      
      g.setColor(Color.red);
      g.fillRect(bat2.x, bat2.y, bat2.width, bat2.height);
      
      g.setColor(Color.blue);
      g.fillOval(ball.x, ball.y, ball.width, ball.height);
      
   }


    @Override
    public void keyTyped(KeyEvent e) {
        
           if (e. getKeyChar()== 'd') {
           bat1.getLocation().getX();
           int a = (int) bat1.getLocation().getX();
           int b = a+10;
           if (a +30 > 750) {}
           else {
           bat1.setLocation(b, 30);
           } 
      } 
           
           if (e. getKeyChar()== 'a') {
           bat1.getLocation().getX();
           int a = (int) bat1.getLocation().getX();
           int b = a-10;
           if (a-10  < 0) {}
           else {
           bat1.setLocation(b, 30);
           }
        } 
           
           if (e. getKeyChar()== '4') {
           bat2.getLocation().getX();
           int a = (int) bat2.getLocation().getX();
           int b = a-10;
           if (a - 10 < 0) {}
           else {
           bat2.setLocation(b, 511);
           }
        } 
                      
           if (e. getKeyChar()== '6') {
           bat2.getLocation().getX();
           int a = (int) bat2.getLocation().getX();
           int b = a+10;
           if (a +30 > 750) {}
           else {
           bat2.setLocation(b, 511);   
           }
        } 
    }



    @Override
    public void keyReleased(KeyEvent e) {

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void keyPressed(KeyEvent e) {
        
        if (e. getKeyChar() == 'r'){
          dx = 125;
          dy = 125;
        }
        if (e. getKeyChar() == 'e'){
          dx = -125;
          dy = -125;
        }
    }



}
 
S

SlaterB

Gast
eigenes Zeichnen + J-Komponenten besser nicht mischen in einem Panel,
du kannst natürlich oben einen Bereich strukturiert lassen und nur unten ein JPanel haben in welchem gezeichnet wird oder ähnliches

ansonsten ist das bisschen unverständlich, was genau verstehst du unter deinen 'Rectangle'?
du willst anscheinend Rahmen malen, aber diese brauchen doch keine Namen,
auch wenn Text darin erscheinen soll, ist das erstens wiederum was anderes als ein Name für Rectangle
und im einfachen Falle komplett unabhängig von diesen, male Text mit drawString an passender Position,
sicherlich abhängig von den Rectangles, aber komplett anderer Befehlt, mit drawString kannst du wie mit allen Befehlen malen wo du willst

gewiss bietet es sich an, etwas zu strukturieren, z.B. eine eigene Klasse für Rectangle + Text mit eigener paint-Methode,
so dass dort festgelegt wird wie die Befehle relativ zueinander auszuführen sind

statt
Java:
g.fillRect(bat1.x, bat1.y, bat1.width, bat1.height);
g.drawString(bat1.x+.., bat1.y+.., textB1);
dann etwa
Java:
ba1.maleAllesAnDuWeisstSchonWo(g);
 

GUI-Programmer

Top Contributor
Panel in das Frame packen:
Java:
import javax.swing.*;
import java.awt.*;

public class Test {
    private JFrame frame;
    private JPanel panel;
    private JLabel label;
    
    public Test() {
        frame = new JFrame();
        panel = new JPanel();
        label = new JLabel();
        
        panel.setBackground(Color.green);
        
        label.setText("Information");
        label.setSize(100, 35);
        panel.add(label, BorderLayout.CENTER);
        // Dein JFrame:
        frame.getContentPane().add(panel);
        panel.setBounds(50,300,100,35);
    }
}

Natürlich müssen die Position noch angepasst werden. Außerdem musst du den Text des Labels in deinem Listener entsprechend ändern. Zudem wäre es auch möglich das JLabel ohne einem JPanel dem JFrame hinzuzufügen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Was genau bewirkt Rectangle in 2dGraphics? AWT, Swing, JavaFX & SWT 1
R AWT Rectangle mit Angle AWT, Swing, JavaFX & SWT 10
K 2048 Umsetzung mit Gridpane / Stackpane und / Rectangle AWT, Swing, JavaFX & SWT 0
N JavaFX Group: Gezieltes entfernen eines Objects (Rectangle) AWT, Swing, JavaFX & SWT 0
J JavaFX Rectangle innerhalb eines Rectangle oder Panes positionieren? AWT, Swing, JavaFX & SWT 1
U JavaFX GridPane - Circle auf Rectangle versetzten AWT, Swing, JavaFX & SWT 1
G Rectangle Breite richtet such an die Breite vom Text AWT, Swing, JavaFX & SWT 1
L JavaFX Rectangle mit Dock-Mechanismus AWT, Swing, JavaFX & SWT 3
K JavaFX TableView mit Rectangle AWT, Swing, JavaFX & SWT 3
F Problem mit der FXML Rectangle Shape AWT, Swing, JavaFX & SWT 2
T Rectangle Transparent und darunter liegende Objekte Bedienbar AWT, Swing, JavaFX & SWT 0
J Rectangle g.fillRec() X/Y Punkt AWT, Swing, JavaFX & SWT 5
TheSorm Rectangle drehen AWT, Swing, JavaFX & SWT 9
S Rectangle Border Color AWT, Swing, JavaFX & SWT 13
P drawString in einem Rectangle AWT, Swing, JavaFX & SWT 4
P Rectangle verschieben AWT, Swing, JavaFX & SWT 11
P ImageIcon auf Rectangle AWT, Swing, JavaFX & SWT 3
P Rectangle on JPanel zentrieren AWT, Swing, JavaFX & SWT 20
O 2D-Grafik Rectangle mit double Werten zeichnen AWT, Swing, JavaFX & SWT 3
D 2D-Grafik Form der GrafikObjekte ändern, Ellipse -> Rectangle AWT, Swing, JavaFX & SWT 2
K AWT Rectangle klappt nicht AWT, Swing, JavaFX & SWT 7
R Resize Rectangle Problem AWT, Swing, JavaFX & SWT 3
Schandro Den größten passenden java.awt.Font zu einem Rectangle berechnen AWT, Swing, JavaFX & SWT 2
I Text innerhalb von Rectangle rendern AWT, Swing, JavaFX & SWT 3
H Rectangle[] ? AWT, Swing, JavaFX & SWT 5
I Rectangle mit floating values AWT, Swing, JavaFX & SWT 2
D Markieren mit Rectangle ? AWT, Swing, JavaFX & SWT 9
T PLAF MetalButtonUI Rectangle beseitigen AWT, Swing, JavaFX & SWT 4
C Swing In der Titelleiste den Namen und den vollständigen Pfad bzw URL des aktuellen Dokuments anzeigen AWT, Swing, JavaFX & SWT 25
GreenTeaYT Wie vergebe Ich den Jframe Title den Namen aus einem Element von der Arraylist ? AWT, Swing, JavaFX & SWT 4
L Swing JTable refresht die Column Namen nicht AWT, Swing, JavaFX & SWT 0
M Swing JCheckbox Namen vergeben? AWT, Swing, JavaFX & SWT 5
B Unendlich vielen JTextFields Namen zuweisen AWT, Swing, JavaFX & SWT 8
Rudolf Swing JTree Node anhand vom Namen finden AWT, Swing, JavaFX & SWT 4
M Checkboxen Namen setzten über Parameter => Abfragen? AWT, Swing, JavaFX & SWT 2
B Swing JTable Spalten namen AWT, Swing, JavaFX & SWT 10
D Swing Tabellen-Namen im ListSelectionListener abfragen AWT, Swing, JavaFX & SWT 2
G jfreechart (Diagramm speichern mit ein vorgegebenen Namen) AWT, Swing, JavaFX & SWT 6
G Namen mehrer Checkboxen abfragen AWT, Swing, JavaFX & SWT 7
B Variablen-Namen erfragen AWT, Swing, JavaFX & SWT 5
S Namen von automatisch erzeugten JTextFields herausfinden… AWT, Swing, JavaFX & SWT 4
P JSpinner Objekt anstatt Zahlen sollen man Namen auswählen AWT, Swing, JavaFX & SWT 2
M Namen eines Internal Frame auslesen AWT, Swing, JavaFX & SWT 6
V JTable Spaltenköpfe haben andere Namen wie in der DB AWT, Swing, JavaFX & SWT 2
N auf textfelder ueber namen zugreifen AWT, Swing, JavaFX & SWT 2
S Rahmen mit "Namen" AWT, Swing, JavaFX & SWT 8
D JTable Spalten mit Namen während der Programmlaufzeit hinzuf AWT, Swing, JavaFX & SWT 5
MartinNeuerlich Kann mir jemand, der einen Mac mit einem m1 oder m2-Chip hat, eine POM geben mit der Javafx-Fullscreen beim Mac mit m-Chip funktioniert? AWT, Swing, JavaFX & SWT 1
A JPanel austauschen und Focus geben AWT, Swing, JavaFX & SWT 3
L Daten bearbeiten ohne GUI zu blockieren - daten haltung/zurück geben AWT, Swing, JavaFX & SWT 15
W GridBagLayout Größe geben AWT, Swing, JavaFX & SWT 1
I focus an ein jdialog geben AWT, Swing, JavaFX & SWT 3
E Wert aus ActionListener geben AWT, Swing, JavaFX & SWT 4
M SWT Wie mehr als 5000 Einträge zur Auswahl geben? AWT, Swing, JavaFX & SWT 9
D Fenster will keine Ausgabe geben>:( AWT, Swing, JavaFX & SWT 3
S Swing JTree in ScrollPane einen ToolTip geben AWT, Swing, JavaFX & SWT 2
D Beim Starten ein JTextfield Focus geben AWT, Swing, JavaFX & SWT 7
J JTextpane einem Scrollbalken geben? AWT, Swing, JavaFX & SWT 2
T Programm gleich wie Windows Media Player in den Task geben AWT, Swing, JavaFX & SWT 10

Ähnliche Java Themen

Neue Themen


Oben