Viereck Feld

Diskutiere Viereck Feld im Codeschnipsel u. Projekte Forum; Es gibt ganz unterschiedliche Ansätze, der von @Robat ist ein richtiger. Nach dem aktualisieren musst Du nur noch Deine Komponente neu zeichnen...

  1. mihe7
    mihe7 Bekanntes Mitglied
    Es gibt ganz unterschiedliche Ansätze, der von @Robat ist ein richtiger. Nach dem aktualisieren musst Du nur noch Deine Komponente neu zeichnen lassen (repaint() aufrufen).

    Die Frage ist, was Du eigentlich vor hast. Der Code vorhin sollte nur ein erster Ideengeber sein. Er funktioniert für einfache Fälle. Wenn Du komplexeres haben willst, dann kann es durchaus sinnvoll sein, das Zeichnen eigenen Objekten zu überlassen.
     
  2. Paul^^
    Paul^^ Neues Mitglied
    Ich möchte im Prinzip das immer abwechselnd eines der Vierecke sich weiß färbt.
     
  3. Robat
    Robat Bekanntes Mitglied
    Also eine Art Muster (schwarz, weiß, schwarz, weiß, .. zb)? Und sollen die Farben dann so bleiben oder willst du in der Lage sein zur Laufzeit die Farben der Viereck zu verändern
     
  4. Paul^^
    Paul^^ Neues Mitglied
    Zuerst soll das erste Viereck sich weiß färben dan wieder schwarz werden dann das zweite weiß und wieder schwarz und so weiter
     
  5. Robat
    Robat Bekanntes Mitglied
    Dann solltest du den Weg über eine eigene Klassen gehen, die ein Rectangle und ein Color Objekt wrapped.
     
  6. Paul^^
    Paul^^ Neues Mitglied
    kannst du vlllt mal ein beispiel zeigen?
     
  7. mihe7
    mihe7 Bekanntes Mitglied
  8. Robat
    Robat Bekanntes Mitglied
    An einem kleinen Beispiel .. dient aber nur als Idee .. in der Realität sollten Klassen ausgelagert werden und Logik strikter von der View getrennt werden
    Code (Java):

    public class App {

        public App() {
            buildAndShowUI();
        }

        private void buildAndShowUI() {
            JFrame frame = new JFrame();
            frame.setSize(500,500);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            ColoredRectanglePanel panel = new ColoredRectanglePanel();
            panel.setBackground(Color.LIGHT_GRAY);
            frame.add(panel);

            frame.setVisible(true);
        }

        class ColoredRectanglePanel extends  JComponent {
            private List<ColoredRectangle> rectangles;

            ColoredRectanglePanel() {
                initializeDummyRects();
                initializeAndStartTimer();
            }

            private void initializeDummyRects() {
                this.rectangles = new ArrayList<>();
                this.rectangles.add(new ColoredRectangle(20, 20, 100, 100, Color.WHITE));
                this.rectangles.add(new ColoredRectangle(130, 20, 100, 100, Color.WHITE));
                this.rectangles.add(new ColoredRectangle(240, 20, 100, 100, Color.WHITE));
            }

            private void initializeAndStartTimer() {
                Timer timer = new Timer(500, e -> {
                    int rand = (int) (Math.random() * rectangles.size());
                    final ColoredRectangle coloredRectangle = rectangles.get(rand);
                    coloredRectangle.setColor(coloredRectangle.getColor() == Color.BLACK ? Color.WHITE : Color.BLACK);
                    repaint();
                });
                timer.start();
            }

            @Override
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);

                Graphics2D g2d = (Graphics2D) g;
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

                rectangles.forEach(rect -> drawRectangle(rect, g2d));
            }

            private void drawRectangle(ColoredRectangle rect, Graphics2D g2d) {
                g2d.setColor(rect.getColor());
                g2d.fillRect(rect.x, rect.y, rect.width, rect.height);
            }
        }

        class ColoredRectangle extends Rectangle {
            private Color color;

            public ColoredRectangle( int x, int y, int width, int height, Color color ) {
                super(x, y, width, height);
                this.color = color;
            }

            public Color getColor() {
                return color;
            }

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

        public static void main( String[] args ) {
            SwingUtilities.invokeLater(App::new);
        }

    }
     
    PS: Hab noch mal überlegt .. ein ColoredRectangle sollte vielmehr von Rectangle erben .. es ist ja ein Viereck und hat zstl. eine Farbe
     
  9. Paul^^
    Paul^^ Neues Mitglied
    Danke ^^
     
  10. Hinweis: Du möchtest Java lernen? Vielleicht hilft dir dieser Kurs hier weiter. Sichere dir hier den Zugriff auf umfangreiches Java-Know How und starte richtig durch!
Die Seite wird geladen...

Viereck Feld - Ähnliche Themen

2D Array Magisches Viereck
2D Array Magisches Viereck im Forum Java Basics - Anfänger-Themen
Bewegendes Viereck ruckelt
Bewegendes Viereck ruckelt im Forum Allgemeine Java-Themen
Magisches Viereck - Probleme mit Arrays
Magisches Viereck - Probleme mit Arrays im Forum Java Basics - Anfänger-Themen
Viereck mit Sterne - Anfänger bittet um Kritik und Anregung
Viereck mit Sterne - Anfänger bittet um Kritik und Anregung im Forum Java Basics - Anfänger-Themen
Viereck zeichnen über TextField-Eingabe /ActionListener
Viereck zeichnen über TextField-Eingabe /ActionListener im Forum Java Basics - Anfänger-Themen
Thema: Viereck Feld