Swing Probleme mit "Game of Life" programmieren

vandread

Aktives Mitglied
hey,

wir haben von unserem professor die aufgabe bekommen "game of life" mit swing zu programmieren...
ich habe in der hochschule damit angefangen das erstmal bisschen aufzubauen und dann grob damit angefangen das man felder anmalen kann...

meine idee war:
linker mausklick feld setzen
rechter mausklick feld löschen
mit links gedrückthalten und rum fahren felder setzen
mit rechts gedrückthalten und rum fahren felder löschen

das hat alles an der hochschule super geklappt ohne irgendwelche probleme...
doch als ich das programm dann hier bei mir daheim gestartet habe und dann irgendein feld setze,
bekomme ich irgendwie grafikprobleme...
also er zeichnet mir da irgendwelchen quatsch...

so sieht das programm normal aus:
gb4zgrqx.jpg


doch sobald ich jetzt irgendwoe in ein feld klicke wird das hier daraus...
o5ez7rfp.jpg


das komische ist rufe ich jetzt die repaint() methode auf zb durch vergrößern des fensters oder wenn ich auf start klicke (hab da einfach mal repaint() drauf gelegt) sieht das feld wieder richtig aus Oo

ich habe irgendwie nochmal alles angeschaut doch ich habe keine ahnung wo das problem ist...
in der schule hat es ja super funktioniert ohne probleme und ich habe ja garnichts geändert...
in der schule habe ich es mit netbeans 6.5.1 gemacht und hier daheim mit 6.8 laufen lassen...
auch mit 6.7.1 hat es probleme aber an netbeans sollte es ja nicht liegen...

hier könnt ihr euch mal das programm runterladen (es ist ein netbeans projekt):
GameOfLife.rar

und für die wo es nicht laden wollen hier der code:
Java:
package gameoflife;


public class GameOfLifeFrame extends javax.swing.JFrame {

    /** Creates new form GameOfLifeFrame */
    public GameOfLifeFrame() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jSpinner1 = new javax.swing.JSpinner();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jPanel1 = new GameOfLifePanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jSpinner1.setModel(new javax.swing.SpinnerNumberModel(1, 1, 10, 1));
        jSpinner1.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                jSpinner1StateChanged(evt);
            }
        });

        jButton1.setText("Start");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jButton2.setText("Exit");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 380, Short.MAX_VALUE)
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 237, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jSpinner1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButton1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButton2)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jSpinner1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButton1)
                    .addComponent(jButton2))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>                        

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        repaint();
    }                                        

    private void jSpinner1StateChanged(javax.swing.event.ChangeEvent evt) {                                       
        // TODO add your handling code here:
    }                                      

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        System.exit(0);
    }                                        

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new GameOfLifeFrame().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JSpinner jSpinner1;
    // End of variables declaration                   

}

Java:
package gameoflife;

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import javax.naming.event.EventDirContext;
import javax.swing.event.MouseInputListener;

public class GameOfLifePanel extends javax.swing.JPanel {

    private boolean[][] marker = new boolean[100][100];

    /** Creates new form GameOfLifePanel */
    public GameOfLifePanel() {
        initComponents();
    }

    @Override
    public void paint(Graphics gc) {

        for (int i = 0; i < this.getWidth() / 20; i++) {
            for (int j = 0; j < this.getHeight() / 20; j++) {

                if (marker[i][j]) {
                    gc.setColor(Color.black);
                } else {
                    gc.setColor(Color.lightGray);
                }

                gc.fillRect(i * 20, j * 20, 16, 16);
            }

        }
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                formMouseClicked(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                formMousePressed(evt);
            }
        });
        addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
            public void mouseDragged(java.awt.event.MouseEvent evt) {
                formMouseDragged(evt);
            }
            public void mouseMoved(java.awt.event.MouseEvent evt) {
                formMouseMoved(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );
    }// </editor-fold>                        

    private void formMouseClicked(java.awt.event.MouseEvent evt) {                                  

        int x = evt.getX() / 20;
        int y = evt.getY() / 20;
        if (evt.getButton() == 1) {
            marker[x][y] = true;
        } else {
            marker[x][y] = false;
        }
        repaint();
    }                                 

    private void formMousePressed(java.awt.event.MouseEvent evt) {                                  
    }                                 

    private void formMouseDragged(java.awt.event.MouseEvent evt) {                                  
        int x = evt.getX() / 20;
        int y = evt.getY() / 20;

        // System.out.println("Button = " + evt.getModifiers());
        if (evt.getModifiers() == 16) {
            marker[x][y] = true;
        } else {
            marker[x][y] = false;
        }
        repaint();
    }                                 

    private void formMouseMoved(java.awt.event.MouseEvent evt) {                                
    }                               
    // Variables declaration - do not modify                     
    // End of variables declaration                   
}
 

eRaaaa

Top Contributor
Hi,
also bei mir läufts auch, aber:
Allerdings überschreiben eigene Unterklassen von Swing-Komponenten im Regelfall nicht paint(), sondern paintComponent(). Das liegt daran, dass Swing in paint() zum Beispiel noch Rahmen zeichnet und sich um eine Pufferung des Bildschirminhalts zur Optimierung kümmert. So ruft paint() die drei Methoden paintComponent(), paintBorder() und paintChildren() auf, und bei einer Neudarstellung kümmert sich ein RepaintManager um eine zügige Darstellung mit Hilfe der gepufferten Inhalte, was bei normalen Swing-Interaktionskomponenten wie Schaltflächen wichtig ist.
(Java Insel)

D.h. überschreibe paintComponent, anstatt paint! Vllt hilft das ja schon :)
 

vandread

Aktives Mitglied
hab gerade gemacht, hab einfach aus paint paintComponent gemacht...
das programm funktioniert so wie gehabt, aber ich erhalte trozdem die grafikfehler...

ich habs sogar gerade auf meinem laptop versucht und dort erhalte ich die fehler auch...
das kann doch nicht was mit der hardware zu tun haben ^^

hm...
 

Marco13

Top Contributor
Bei mir hier geht's auch. Hast du in der paintComponent auch
Code:
    public void paintComponent(Graphics gc) {
        [b]super.paintComponent(gc); // <---- das hier[/b]
        ...
gemacht?
 

vandread

Aktives Mitglied
cool jetzt geht es :D ne den super ausdruck hatte ich nicht drinne...
aber hm...
kann mir jetzt einer mal bisschen erklären was da passiert ist?
warum es bei manchen so geht und bei machen irgendwie nicht...?
 

Marco13

Top Contributor
Warum es bei manchen geht und bei manchen nicht, hängt ... mit den einen oder anderen zusammen :D also, das ist schwer zu sagen... Es kann sein, dass da irgendeine Optimierung gmacht wird, die aus irgendeinem Grund mal kurz an die falsche Stelle zeichnet... :bahnhof:
Das super.paintComponent sollte man bei überschriebenen paintComponent-Methoden fast immer hinschreiben. Das bewirkt in diesem Fall nicht viel mehr, als dass der Hintergrund des Panels gelöscht wird. Man hätte stattdessen grundsätzlich auch sowas wie
gc.setColor(getBackground());
gc.fillRect(0,0,getWidth(),getHeight());
schreiben können, aber der super-Aufruf ist einfacher und "sicherer" - spätestens für den Fall wenn man mal von was anderem erbt als JPanel (wenn man z.B. bei einem Button was eigenes darufmalen will, dann wird bei super.paintComponent erstmal der ganz normale Button gemalt, und danach kann man seinen eigenen Kram drüberpinseln)
 

vandread

Aktives Mitglied
hey leute...
da bin ich wieder...
ich habe an meinem game of life weiter gearbeitet und muss sagen java macht immer mehr spaß ^^
auch wenns auch immer mehr aufregt haha ^^

also ich stehe vor zwei fragen im moment...

erst ein mal die kleine...
wie ihr oben in den screenshots sehen könnt sehen die buttons und so bei dem programm komisch aus...
es hat dieses "metal" design...
in netbeans aber sehen die buttons und alles anders aus einfach windows like...
sobald ich das aber starte sieht es so metal mäßig aus...
wie oder wo muss das einstellen das es das windows theme behalten soll?

so jetzt meine große frage...
ich haben das so machen wollen das meine felder eine arraylist ist...
so dass ich immer wenn ich mein festern größer oder kleiner mache sich mein felder anpassen...
also meine liste kleiner oder größer wird...
ich habe auch den code dazu geschrieben und hm...
doch irgendwie haut das nicht ganz hin...

wenn ich mein fenster normal mit der maus sagen wir nur von links nach rechts oder von oben nach unten größer und kleiner mache (langsam) dann klappt alles...
sobald ich das schnell mache bumm... out of bound...
und wenn ich es diagonal also gemisch vergrößer geht garnichts mehr... ):

hier der download: GameOfLife.rar

hier mein code:
Java:
package gameoflife;

import java.util.ArrayList;
import java.util.List;

public class GameOfLifeFrame extends javax.swing.JFrame {

    /** Creates new form GameOfLifeFrame */
    public GameOfLifeFrame() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jSpinner1 = new javax.swing.JSpinner();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        gameField = new gameoflife.GameOfLifePanel();
        jButton3 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        setIconImages(null);
        addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                formMouseReleased(evt);
            }
        });
        addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentResized(java.awt.event.ComponentEvent evt) {
                formComponentResized(evt);
            }
        });

        jSpinner1.setModel(new javax.swing.SpinnerNumberModel(1, 1, 10, 1));
        jSpinner1.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                jSpinner1StateChanged(evt);
            }
        });

        jButton1.setText("Start");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jButton2.setText("Exit");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout gameFieldLayout = new javax.swing.GroupLayout(gameField);
        gameField.setLayout(gameFieldLayout);
        gameFieldLayout.setHorizontalGroup(
            gameFieldLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 380, Short.MAX_VALUE)
        );
        gameFieldLayout.setVerticalGroup(
            gameFieldLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 249, Short.MAX_VALUE)
        );

        jButton3.setText("Clear");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(gameField, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jSpinner1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButton1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButton2)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButton3)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(gameField, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jSpinner1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButton1)
                    .addComponent(jButton2)
                    .addComponent(jButton3))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>                        

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        System.out.println("Start");

        List<Integer> toKillX = new ArrayList<Integer>();
        List<Integer> toKillY = new ArrayList<Integer>();
        List<Integer> toActivateX = new ArrayList<Integer>();
        List<Integer> toActivateY = new ArrayList<Integer>();
        int neighbor = 0;

        for (int i = 0; i < this.gameField.getXfields(); i++) {
            for (int j = 0; j < this.gameField.getYfields(); j++) {

                if (i > 0 && j > 0 && this.gameField.getField().get(i - 1).get(j - 1)) {
                    neighbor++;
                }
                if (j > 0 && this.gameField.getField().get(i).get(j - 1)) {
                    neighbor++;
                }
                if (i < this.gameField.getXfields() - 1 && j > 0 && this.gameField.getField().get(i + 1).get(j - 1)) {
                    neighbor++;
                }
                if (i > 0 && this.gameField.getField().get(i - 1).get(j)) {
                    neighbor++;
                }
                if (i < this.gameField.getXfields() - 1 && this.gameField.getField().get(i + 1).get(j)) {
                    neighbor++;
                }
                if (i > 0 && j < this.gameField.getYfields() - 1 && this.gameField.getField().get(i - 1).get(j + 1)) {
                    neighbor++;
                }
                if (j < this.gameField.getYfields() - 1 && this.gameField.getField().get(i).get(j + 1)) {
                    neighbor++;
                }
                if (i < this.gameField.getXfields() - 1 && j < this.gameField.getYfields() - 1 && this.gameField.getField().get(i + 1).get(j + 1)) {
                    neighbor++;
                }

                if(this.gameField.getField().get(i).get(j) && neighbor != 2 && neighbor != 3){

                    toKillX.add(i);
                    toKillY.add(j);

                }else if(!this.gameField.getField().get(i).get(j) && neighbor == 3){
                    toActivateX.add(i);
                    toActivateY.add(j);
                }


                neighbor = 0;

            }

        }
        for (int i = 0; i < toKillX.size(); i++) {
            this.gameField.getField().get(toKillX.get(i)).set(toKillY.get(i), false);
        }
        for (int i = 0; i < toActivateX.size(); i++) {
            this.gameField.getField().get(toActivateX.get(i)).set(toActivateY.get(i), true);
        }
        repaint();

    }                                        

    private void jSpinner1StateChanged(javax.swing.event.ChangeEvent evt) {                                       
        // TODO add your handling code here:
    }                                      

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        System.exit(0);
    }                                        

    private void formComponentResized(java.awt.event.ComponentEvent evt) {                                      
    }                                     

    private void formMouseReleased(java.awt.event.MouseEvent evt) {                                   
    }                                  

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        for (int i = 0; i < this.gameField.getXfields(); i++) {
            for (int j = 0; j < this.gameField.getYfields(); j++) {
                this.gameField.getField().get(i).set(j, false);
            }
        }
        repaint();
    }                                        

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new GameOfLifeFrame().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify                     
    private gameoflife.GameOfLifePanel gameField;
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JSpinner jSpinner1;
    // End of variables declaration                   
}

Java:
package gameoflife;

import java.awt.Color;
import java.awt.Graphics;
import java.util.ArrayList;
import java.util.List;

public class GameOfLifePanel extends javax.swing.JPanel {

    private int yFields;
    private int xFields;
    // private boolean[][] marker = new boolean[100][100];
    private List<ArrayList<Boolean>> field = new ArrayList<ArrayList<Boolean>>();

    /** Creates new form GameOfLifePanel */
    public GameOfLifePanel() {
        initComponents();
    }

    public int getYfields() {
        return this.yFields;
    }

    public int getXfields() {
        return this.xFields;
    }

    @Override
    public void paintComponent(Graphics gc) {
        super.paintComponent(gc);

        for (int i = 0; i < this.xFields; i++) {
            for (int j = 0; j < this.yFields; j++) {

                if (/*marker[i][j]*/ this.field.get(i).get(j)) {
                    gc.setColor(Color.black);
                } else {
                    gc.setColor(Color.lightGray);
                }

                gc.fillRect(i * 20, j * 20, 16, 16);
            }

        }
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                formMouseClicked(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                formMousePressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                formMouseReleased(evt);
            }
        });
        addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentResized(java.awt.event.ComponentEvent evt) {
                formComponentResized(evt);
            }
        });
        addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
            public void mouseDragged(java.awt.event.MouseEvent evt) {
                formMouseDragged(evt);
            }
            public void mouseMoved(java.awt.event.MouseEvent evt) {
                formMouseMoved(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );
    }// </editor-fold>                        

    private void formMouseClicked(java.awt.event.MouseEvent evt) {                                  
        int x = evt.getX() / 20;
        int y = evt.getY() / 20;

        System.out.println("Clicked on Field (" + x + "|" + y + ")\n");

        if (evt.getButton() == 1) {
            //marker[x][y] = true;
            this.field.get(x).set(y, true);
        } else {
            //marker[x][y] = false;
            this.field.get(x).set(y, false);
        }
        repaint();
    }                                 

    private void formMousePressed(java.awt.event.MouseEvent evt) {                                  
    }                                 

    private void formMouseDragged(java.awt.event.MouseEvent evt) {                                  
        int x = evt.getX() / 20;
        int y = evt.getY() / 20;

        if (x >= 0 & y >= 0 & x < this.xFields & y < this.yFields) {
            // System.out.println("Button = " + evt.getModifiers());
            if (evt.getModifiers() == 16) {
                //marker[x][y] = true;
                this.field.get(x).set(y, true);
            } else {
                //marker[x][y] = false;
                this.field.get(x).set(y, false);
            }
        }
        repaint();
    }                                 

    private void formMouseMoved(java.awt.event.MouseEvent evt) {                                
    }                               

    private void formComponentResized(java.awt.event.ComponentEvent evt) {                                      
        this.yFields = this.getHeight() / 20;
        this.xFields = this.getWidth() / 20;

        if (this.field.size() != 0) {
            if (this.field.size() < this.xFields & this.field.get(0).size() == this.yFields) {
                for (int i = 0; i < this.xFields - this.field.size(); i++) {
                    this.field.add(new ArrayList<Boolean>());
                    for (int j = 0; j < this.yFields; j++) {
                        this.field.get(this.field.size() - 1).add(false);
                    }
                }
            } else if (this.field.size() > this.xFields & this.field.get(0).size() == this.yFields) {
                for (int i = 0; i < this.field.size() - this.xFields; i++) {
                    this.field.remove(this.field.size() - 1);
                }
            } else if (this.field.size() == this.xFields & this.field.get(0).size() < this.yFields) {
                for (int i = 0; i < this.xFields; i++) {
                    for (int j = 0; j < this.yFields - this.field.get(i).size(); j++) {
                        this.field.get(i).add(false);
                    }
                }
            } else if (this.field.size() == this.xFields & this.field.get(0).size() > this.yFields) {
                for (int i = 0; i < this.xFields; i++) {
                    for (int j = 0; j < this.field.get(i).size() - this.yFields; j++) {
                        this.field.get(i).remove(this.field.get(i).size() - 1);
                    }
                }
            } else if (this.field.size() < this.xFields & this.field.get(0).size() < this.yFields) {
                for (int i = 0; i < this.xFields - this.field.size(); i++) {
                    this.field.add(new ArrayList<Boolean>());
                }
                for (int i = 0; i < this.xFields; i++) {
                    for (int j = 0; j < this.yFields - this.field.get(i).size(); j++) {
                        this.field.get(i).add(false);
                    }
                }
            }
        } else {
            for (int i = 0; i < this.xFields; i++) {
                this.field.add(new ArrayList<Boolean>());
                for (int j = 0; j < this.yFields; j++) {
                    this.field.get(i).add(false);
                }
            }
        }
        System.out.println("Field x-max: " + this.xFields);
        System.out.println("Array x-max: " + this.field.size());
        System.out.println("Field y-max: " + this.yFields);
        System.out.print("Array y-max: " + this.field.get(0).size());

        System.out.print(" | " + this.field.get(this.field.size() - 2).size());
        System.out.println(" | " + this.field.get(this.field.size() - 1).size()+"\n");
    }                                     

    private void formMouseReleased(java.awt.event.MouseEvent evt) {                                   
    }                                  

    public List<ArrayList<Boolean>> getField() {
        return this.field;
    }

    // Variables declaration - do not modify                     
    // End of variables declaration                   
}
 

André Uhres

Top Contributor
Java:
private void formComponentResized(ComponentEvent evt) {
    yFields = getHeight() / 20;
    xFields = getWidth() / 20;
    while (xFields < field.size()) {
        field.remove(field.size() - 1);
    }
    while (xFields > field.size()) {
        field.add(new ArrayList<Boolean>());
    }
    for (ArrayList<Boolean> row : field) {
        while (yFields < row.size()) {
            row.remove(row.size() - 1);
        }
        while (yFields > row.size()) {
            row.add(Boolean.FALSE);
        }
    }
}
 
Zuletzt bearbeitet:

Meldanor

Bekanntes Mitglied
erst ein mal die kleine...
wie ihr oben in den screenshots sehen könnt sehen die buttons und so bei dem programm komisch aus...
es hat dieses "metal" design...
in netbeans aber sehen die buttons und alles anders aus einfach windows like...
sobald ich das aber starte sieht es so metal mäßig aus...
wie oder wo muss das einstellen das es das windows theme behalten soll?

Bevor du auch nur ein einziges Mal mit GUIs arbeitest, musst du einfach diesen Quellcode einfügen(z.B. in der Main)

Java:
import javax.swing.UIManager;

[....]

        try{
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        }
        catch(Exception e){
            e.printStackTrace();
        }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Juelin Probleme bei Stage.close() AWT, Swing, JavaFX & SWT 23
XWing Swing Image anzeigen und probleme mit klassen AWT, Swing, JavaFX & SWT 3
E repaint Probleme AWT, Swing, JavaFX & SWT 13
mananana Mögliche probleme die in einer GUI passieren Können AWT, Swing, JavaFX & SWT 6
S GridBagLayout - Probleme mit Bilderanzeige AWT, Swing, JavaFX & SWT 3
I Probleme beim Drucken auf einen PDF-Drucker AWT, Swing, JavaFX & SWT 8
J Probleme mit idividueller Tablecell AWT, Swing, JavaFX & SWT 0
D JavaFX Probleme beim nachtäglichen hinzufügen der jfx dependency AWT, Swing, JavaFX & SWT 7
J Probleme mit InputDialog AWT, Swing, JavaFX & SWT 4
D JavaFX TextArea Probleme bei langen Zeilen AWT, Swing, JavaFX & SWT 1
G JavaFX SplitPane Anwendung - Controller Probleme AWT, Swing, JavaFX & SWT 5
K Probleme bei der Erstellung und Ausführung einer Jar Datei AWT, Swing, JavaFX & SWT 2
B Probleme Action Listener Taschenrechner AWT, Swing, JavaFX & SWT 27
pph080560 JavaFX Probleme mit FX AWT, Swing, JavaFX & SWT 3
M Probleme mit OpenJDK AWT, Swing, JavaFX & SWT 6
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
B Swing Probleme mit dem Layout AWT, Swing, JavaFX & SWT 1
L JavaFX Probleme beim Installieren JavaFX11 / JavaFX12 -- Eclipse 2019-03 AWT, Swing, JavaFX & SWT 3
Fiedlerdan Image-Pfad Probleme nach Export aus Eclipse AWT, Swing, JavaFX & SWT 31
H JFreeChart - DemoDataSetFactory Probleme AWT, Swing, JavaFX & SWT 1
H LayoutManager Probleme mit Positionierung/Abständen der Komponenten AWT, Swing, JavaFX & SWT 14
A Probleme mit gridheight (GridBagLayout) AWT, Swing, JavaFX & SWT 6
U Opaque Probleme AWT, Swing, JavaFX & SWT 3
H JavaFX Probleme Beim Wechseln der scene als .fxml AWT, Swing, JavaFX & SWT 7
F JavaFX Probleme beim automatischen Konvertieren AWT, Swing, JavaFX & SWT 4
S Probleme mit JComboboxen(?) AWT, Swing, JavaFX & SWT 18
S Swing Probleme mit MigLayout AWT, Swing, JavaFX & SWT 2
C Probleme mit createImage AWT, Swing, JavaFX & SWT 1
J Probleme mit contex Menu (javafx) AWT, Swing, JavaFX & SWT 1
J Probleme bei GameofLife AWT, Swing, JavaFX & SWT 24
S JavaFx - Button ActionEvent Probleme AWT, Swing, JavaFX & SWT 3
T Swing Probleme mit repaint() bzw. JScrollPane AWT, Swing, JavaFX & SWT 7
ImperatorMing JavaFX Probleme mit WindowEvent AWT, Swing, JavaFX & SWT 0
ImperatorMing JavaFX Probleme mit WindowEvent AWT, Swing, JavaFX & SWT 5
J LayoutManager GridBagLayout, probleme mit Anordnung von Objekten AWT, Swing, JavaFX & SWT 6
T Java FX Probleme beim befüllen eines Tableviews AWT, Swing, JavaFX & SWT 5
S AWT Probleme beim Zeichnen AWT, Swing, JavaFX & SWT 3
A Swing Probleme mit dem adden von JButtons zur JScrollPane AWT, Swing, JavaFX & SWT 2
D Swing Probleme mit dem Resizing AWT, Swing, JavaFX & SWT 7
G Probleme mit TextArea AWT, Swing, JavaFX & SWT 5
G JFrame Probleme AWT, Swing, JavaFX & SWT 2
K Probleme beim JPasswordField AWT, Swing, JavaFX & SWT 11
G Cardlayout Refresh Probleme AWT, Swing, JavaFX & SWT 2
J Swing Probleme mit ListSelectionListener(), Inhalte der JList werden gelöscht? AWT, Swing, JavaFX & SWT 6
D JavaFX Probleme bei Service-Klasse beim ändern der GUI AWT, Swing, JavaFX & SWT 8
K Probleme beim zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 1
M JButton Probleme AWT, Swing, JavaFX & SWT 14
L Probleme mit Programm AWT, Swing, JavaFX & SWT 13
blazingblade komischerweise probleme mit jtextfield.gettext() AWT, Swing, JavaFX & SWT 9
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
Sin137 LayoutManager GridBagLayout Probleme AWT, Swing, JavaFX & SWT 6
H Netbeans Designer: Probleme mit JPanel und JFrame AWT, Swing, JavaFX & SWT 2
M Swing Probleme mit Frame.pack() AWT, Swing, JavaFX & SWT 1
C Java FX Probleme beim Schließen einer Stage AWT, Swing, JavaFX & SWT 11
M Swing JProgressbar und Outoputstream probleme AWT, Swing, JavaFX & SWT 2
S Swing Probleme mit transparenz der Hintergrundfarbe und JRadioButtons AWT, Swing, JavaFX & SWT 2
Z Probleme mit JPanel's AWT, Swing, JavaFX & SWT 6
T Probleme mit Anzeige von Elementen im JPanel AWT, Swing, JavaFX & SWT 1
Shams Probleme bei dem Hinzufügen von Komponenten zu einem JFrame AWT, Swing, JavaFX & SWT 3
A Swing Probleme mit JScrollPane AWT, Swing, JavaFX & SWT 6
M Layout-Probleme unter Swing AWT, Swing, JavaFX & SWT 5
H Swing Probleme beim erstellen eines neuen Objektes durch einen Button AWT, Swing, JavaFX & SWT 10
J JavaFX JavaFX Probleme bei der Anzeige von Text AWT, Swing, JavaFX & SWT 18
A Probleme mit TilledBorder("***") AWT, Swing, JavaFX & SWT 4
F Bildschirmschoner Probleme mit Preview AWT, Swing, JavaFX & SWT 8
X Panel Probleme (Tetris) AWT, Swing, JavaFX & SWT 8
N JTable probleme AWT, Swing, JavaFX & SWT 5
B Probleme bei ImageIO.read (?!) AWT, Swing, JavaFX & SWT 9
P JFrame Location-/Size-Probleme AWT, Swing, JavaFX & SWT 5
U LayoutManager Probleme mit Layouts AWT, Swing, JavaFX & SWT 5
C 3 kleine Probleme... AWT, Swing, JavaFX & SWT 13
L NullpointerException und Probleme mit repaint() AWT, Swing, JavaFX & SWT 11
A Probleme mit 2 JFrames in einem Programm AWT, Swing, JavaFX & SWT 7
K LayoutManager Probleme mit 2 Komponenten AWT, Swing, JavaFX & SWT 9
C Probleme mit Buttons und einem ActionListener AWT, Swing, JavaFX & SWT 2
M Probleme mit Verkleinern eines GUI AWT, Swing, JavaFX & SWT 7
B Swing label.setText() macht probleme AWT, Swing, JavaFX & SWT 5
B ImageIcon - Probleme mit dem Dateipfad AWT, Swing, JavaFX & SWT 5
H JTree Probleme AWT, Swing, JavaFX & SWT 9
F Probleme mit (Graphics g) II AWT, Swing, JavaFX & SWT 4
F Probleme mit (Graphics g) AWT, Swing, JavaFX & SWT 3
K 2D-Grafik .GIF macht mir Probleme AWT, Swing, JavaFX & SWT 14
B Probleme bei Sortierung einer Tabelle mit DefaultTableModel AWT, Swing, JavaFX & SWT 6
T JTable Graphik probleme AWT, Swing, JavaFX & SWT 3
H GridBagLayout macht Probleme... AWT, Swing, JavaFX & SWT 4
vandread Swing Probleme mit jTextField im zusammenspiel mit einem Einblendeffekt (inkl. KSKB) AWT, Swing, JavaFX & SWT 6
S Swing Lauftext Performance Probleme, in größerer Anwendung AWT, Swing, JavaFX & SWT 6
B Infolabel Probleme mit Paint() ? AWT, Swing, JavaFX & SWT 8
P Probleme mit setIconImage AWT, Swing, JavaFX & SWT 8
U Swing Probleme mit Asynchronen Prozessen und Swing: AWT, Swing, JavaFX & SWT 3
das-mo Probleme mit GridBagLayout AWT, Swing, JavaFX & SWT 6
N 2D-Grafik 2 Probleme beim zeichnen AWT, Swing, JavaFX & SWT 18
L Probleme mit JPanel AWT, Swing, JavaFX & SWT 8
D Probleme bei Übertrag von ArrayList in Jtable AWT, Swing, JavaFX & SWT 2
G kleinere Probleme mit GUI AWT, Swing, JavaFX & SWT 2
G Mehrere Probleme mit Java's GUI AWT, Swing, JavaFX & SWT 6
M Swing Erste Schritte mit der GUI, viele Probleme AWT, Swing, JavaFX & SWT 36
J GUI-Aktualisierungs-Probleme AWT, Swing, JavaFX & SWT 4
B Performance-Probleme AWT, Swing, JavaFX & SWT 17
I Probleme if-Anweisung AWT, Swing, JavaFX & SWT 26

Ähnliche Java Themen

Neue Themen


Oben