ButtonArray drehen

onek2705

Mitglied
Hallo,
Ich bin dabei ein Tetris spiel mithilfe von JButtons, die in einem Array angeordnet sind (so vorgegeben) zu programmieren. Durch den Button in der Main möchte ich nur erstmal dien Block I in meinem JPanel erzeugen und bei jedem weiteren mal auf den Knopf drücken um 90° drehen. Die Methode ArrayTurn zum drehen funktioniert an sich auch aber mein Problem ist, dass der Block beim drücken auf den Knopf in dem JPanel sich zwar drehen würde, aber man dies nicht sieht, da an den Positionen ja schon ein Objekt vorhanden ist.

Klasse für den Block:
Java:
package Figuren;

import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JPanel;

public class Block extends JButton {
    
    public  Block (Color c,int posX, int posY,JPanel jp) {
        this.setBounds(posX, posY, 32, 32);
        this.setOpaque(true);
        this.setBorderPainted(false);
        this.setBackground(c);
    }
}


Klasse für die Figur I:
Java:
package Figuren;

import java.awt.Color;
import java.awt.event.ActionEvent;

import javax.swing.JPanel;

public class I  {
   
    private int[][] I10  = {{1, 0, 0, 0}, {1, 0, 0, 0} ,{1, 0, 0, 0}, {1, 0 ,0, 0}};
    private int[][] I1 = I10;
    public Block[][] I = new Block[4][4];
    public Block[][] I2 = I;
   
    public I (JPanel buene,int PosX,int PosY,int rotation,int erstellt) {
        I1 = Arrayturn(I1,rotation);
        for (int i=0; i<4;i++) {
            for (int j=0; j<4; j++) {
                if (I1[i][j]==1) {
                    I2[i][j] = new Block(Color.cyan,PosX+i*32,PosY+j*32,buene);
                }
                else {
                    I2[i][j] = new Block(Color.white,PosX,PosY,buene);
                    I2[i][j].setVisible(false);
                }
                buene.add(I2[i][j]);
                if(rotation>0)I1 = I10;
                buene.repaint();
                I2=I;
   
               
            }
        }
    }
    private int[][] Arrayturn (int arr[][], int Häufigkeit) {
        int[][] neuesArray = new int[arr[0].length][arr.length];
        for(int a=0;a<=Häufigkeit;a++) {
            for (int i = 0; i < neuesArray.length; i++) {
                for (int j = 0; j < neuesArray[0].length; j++) {
                    neuesArray[j][i] = arr[j][arr[j].length - i - 1];
                }
            }
          }
        if(Häufigkeit ==4) Häufigkeit = 0;
        return neuesArray;
    }
   
}

Main Metohde:
Java:
package Spiel;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import Figuren.I;
import Figuren.J;

import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.KeyListener;
import java.awt.event.ActionEvent;

public class Main extends JFrame {
    public int rotation = 0;
    private JPanel ui;
    int c=0;
    int b=0;
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Main frame = new Main();
                     frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Main() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 600, 600);
        ui = new JPanel();
        ui.setBorder(new EmptyBorder(5, 5, 5, 5));
        ui.setVisible(true);
        ui.setLayout(null);
        ui.requestFocus();

        setContentPane(ui);
       
       
        ui.setLayout(null);
       
        JButton btnNewButton = new JButton("New button");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            if(c==4)c=0;
            I a = new I (ui, 60, 60, c);
            c++;

            }
        });
        btnNewButton.setBounds(295, 179, 89, 48);
        ui.add(btnNewButton);
    }

}

Danke für eure Hilfe. PS: bin neu hier
 
Zuletzt bearbeitet:

onek2705

Mitglied
Das sieht so merkwürdig aus, weil ich es erstmal schaffen möchte die Blöcke in der ui zum drehen zu bekommen und sie anzeigen zu lassen. Dann kann ich erst das runterfallen (natürlich ohne Knopfdruck) u.s.w. programmieren.
 

Neumi5694

Top Contributor
Merwürdig: Weil du Buttons für die Blöcke verwendest.
Normalerweise geht man nicht her und verändert mit jedem Schritt das Panel sondern zeichnet die Blöcke auf dieses, ohne ständig Komponenten hin und herzuschieben. Letzteres löst im Hintergrund einiges an Events aus und wird die Darstellung arschlangsam machen.

Als Datenmodell steht in einem 2D-Array, welche Felder gerade (gegebenenfalls: womit = Farbe, ja/nein tut's aber auch) belegt sind. der sich bewegende Block wird getrennt davon gespeichert.
In einer überschriebenen paintComponent Methode werden alle Blöcke des Grids + der bewegliche Block gezeichnet.

Wenn du einfach anfangen willst, fang mit der Zeichenmethode für ein Kästchen an, als Parameter gibt's den X und Y Index und eventuell noch die Farbe. Im zweiten Schritt zeichne das gesamte Datenmodell des Spielfelds.

Wenn du dich rein auf's Zeichnen konzentrierst, musst du dich nicht damit rumschlagen, was wo im Panel bereits vorhanden ist, deine gesamte Logik findet im Datenmodell statt anstatt im Panel.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B zweidimensionales Buttonarray auf Panel AWT, Swing, JavaFX & SWT 11
N Bild Drehen AWT, Swing, JavaFX & SWT 1
B JavaFX Bild um die eigene Achse drehen lassen AWT, Swing, JavaFX & SWT 0
S JavaFX Drehen um eigene Achse AWT, Swing, JavaFX & SWT 2
J Images drehen AWT, Swing, JavaFX & SWT 5
M Java FX 3D kamera drehen oder lieber die Gruppe drehen AWT, Swing, JavaFX & SWT 10
B Graphics2D Componente Drehen AWT, Swing, JavaFX & SWT 2
TheSorm Rectangle drehen AWT, Swing, JavaFX & SWT 9
HoloYoitsu Swing JButton in verschiedenen Winkeln drehen AWT, Swing, JavaFX & SWT 0
C Rechteck drehen AWT, Swing, JavaFX & SWT 1
B 2D-Grafik String drehen/platzieren/formatieren in bestimmten Bereich AWT, Swing, JavaFX & SWT 1
L 2D-Grafik Bild in Richtung Maus drehen AWT, Swing, JavaFX & SWT 18
F 2D-Grafik Punkte um Mittelpunkt drehen AWT, Swing, JavaFX & SWT 11
T Bild drehen ohne Resize AWT, Swing, JavaFX & SWT 3
S Objekt durch Tasteneingabe mehrmals drehen AWT, Swing, JavaFX & SWT 9
M Rechtecke drehen AWT, Swing, JavaFX & SWT 15
P JComponent / JLabel drehen (Rotation) AWT, Swing, JavaFX & SWT 2
S Bild in Richtung Mauszeiger drehen AWT, Swing, JavaFX & SWT 2
D Swing Spielfeld drehen von Pentago endet in einer Katastrophe AWT, Swing, JavaFX & SWT 2
Jats 2D-Grafik Quadrat/Dreieck um Mittelpunkt drehen AWT, Swing, JavaFX & SWT 10
B 2D-Grafik Zeilen drehen im JEditorPane AWT, Swing, JavaFX & SWT 3
G Grafikobjekt drehen AWT, Swing, JavaFX & SWT 6
M Rechteck "umdrehen"/über die Kante drehen AWT, Swing, JavaFX & SWT 4
G Swing JLabel drehen für Kartenspiel AWT, Swing, JavaFX & SWT 9
R Bild drehen UND skalieren (Image bzw BufferedImage) AWT, Swing, JavaFX & SWT 5
multiholle Swing Panel um 90° drehen AWT, Swing, JavaFX & SWT 5
O JLabel um 90 Grad drehen ? AWT, Swing, JavaFX & SWT 9
E Bild drehen AWT, Swing, JavaFX & SWT 4
R Rechteck drehen! AWT, Swing, JavaFX & SWT 4
S BufferedImage drehen AWT, Swing, JavaFX & SWT 3
N Formen drehen und auf JPanel zeichnen AWT, Swing, JavaFX & SWT 6
S wie Jpanel drehen AWT, Swing, JavaFX & SWT 4
J swing komponenten drehen? AWT, Swing, JavaFX & SWT 11
K Graphics drehen? AWT, Swing, JavaFX & SWT 7
B Ein Image Objekt drehen? AWT, Swing, JavaFX & SWT 2
N Bild drehen (AffinTransform etc.) AWT, Swing, JavaFX & SWT 2
N Bild drehen AWT, Swing, JavaFX & SWT 7
thE_29 Bild drehen AWT, Swing, JavaFX & SWT 6
C Koordinatensystem drehen AWT, Swing, JavaFX & SWT 3
B Text drehen AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen


Oben