Java Gitternetz

@ sascha , dann bring mir mal bitte ein beispiel dazu :)


@orbit, was ich daran noch nicht sehe ist wo das grid richtig auf dem frame angezeigt wird. im moment adden wir jan nur das was in field[x][y] ist zum frame dazu oder ? aber wo wird da das grid ausgegegeben, so das wir wirklich ein echtes Gitter auf dem bildschirm zu sehen bekommen ^^ sorry, aber das seh ich noch niht so ganz :\

und dazu wuerde ich eigentlich in dem jeweiligen field platz einfach nur nen boolean wert wir alive = false ode rtrue spoeichern wollen. wenn false, dann wird die zelle nicht gefüllt, wenn true dann einfach die zelle ausmalen.

wenn wir das noch klaeren koennten, denk eich kann ich loslegen :D !

mit bestem dank :D !
 
was hat groß- und kleinschreibung hiermit zu tun ? ich denke doch das du, solange satzzeichen vorhanden sind, den satz ohne probleme lesen können solltest.

das halte ich jetzt doch für etwas übertrieben.

@orbit hab das jetzt soweit eingebaut, hab aber nochmal eine frage zu dem borderLayout und gridLayout. kann ich die beiden aufrufe auch im kontruktor der simulator klasse einfügen, und erst in der methode "fill cells" sachen zu diesem layout hinzufügen?


danke schonmal :) !
 
was hat groß- und kleinschreibung hiermit zu tun ? ich denke doch das du, solange satzzeichen vorhanden sind, den satz ohne probleme lesen können solltest.

Dann verweise ich dich mal auf die Netiquette (Punkt 15).
http://www.tutorials.de/index.php?pg=netiquette

In diesem Forum halt auf eine gewisse Form wertgelegt. Wenn du einen Brief schreibst, schreibst du ja auch nicht alles durchgehend klein.

Hier ist das Beispiel mit der JTable
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;

public class JTableGrid
    extends JFrame
{

  public JTableGrid()
  {
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    JTable table = new JTable(new AliveTableModel());

    table.setDefaultRenderer(Object.class, new AliveCellRenderer());

    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

    table.setRowHeight(50);
    
    table.setValueAt(true, 5, 5);
    table.setValueAt(true, 1, 2);
    
    JPanel panel = new JPanel();
    panel.add(table);
    add(panel, BorderLayout.CENTER);
   
    pack();
  }

  private class AliveTableModel
      extends AbstractTableModel
  {
    private Boolean[][] alive = new Boolean[10][10];
    
    public AliveTableModel()
    {
      for (int i = 0; i < alive.length; i++)
      {
        for (int j = 0; j < alive[i].length; j++)
        {
          alive[i][j] = new Boolean(false);
        }
      }
    }

    public int getColumnCount()
    {
      return alive[0].length;
    }

    public int getRowCount()
    {
      return alive.length;
    }

    public Object getValueAt(int rowIndex, int columnIndex)
    {
      return alive[rowIndex][columnIndex];
    }
    
    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex)
    {
      alive[rowIndex][columnIndex] = (Boolean)aValue;
    }

  }

  private class AliveCellRenderer
      extends JLabel
      implements TableCellRenderer
  {

    private Color blue   = new Color(62, 101, 241);
    private Color yellow = new Color(247, 250, 137);

    public AliveCellRenderer()
    {
      setOpaque(true);
    }

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
    {
      Boolean alive = (Boolean) value;

      if (alive.booleanValue())
      {
        setBackground(blue);
      }
      else
      {
        setBackground(yellow);
      }
      return this;
    }

  }

  public static void main(String[] args)
  {
    new JTableGrid().setVisible(true);
  }
}
 
Ich denke einfach solange ich niemanden beleidige und die "Netiquette" soweit einhalte muss man nicht unbedingt pingelig werden ;) gibt hie rimmerhin wichtigere Dinge.

Habe mich jetzt mal rangemacht, habe in field ein boolean 2 dimensionales Array erstellt und das ist dann das fieldObjekt. Abe rirgendwie will das nicht soi laufen wie es soll....

Simulator Klasse:

PHP:
import javax.swing.*;
import java.awt.*;


public class Simulator extends JFrame
{
    // instance variables - replace the example below with your own
    // The default width for the grid.
    private static final int DEFAULT_WIDTH = 50;
    // The default depth of the grid.
    private static final int DEFAULT_DEPTH = 50;
    private JFrame frame;
    private JPanel panel;

    public Simulator()
    {
        // initialise instance variables
        frame = new JFrame();
        frame.setLayout(new BorderLayout());
        panel = new JPanel(new GridLayout(20, 20)); // 20 * 20 Zellen
    }
    
    private void fillCells(Field field)
    {
            for(int i = 0; i<20; i++){
            for(int j = 0; j<20;j++){
                field[i][j] = true;
                panel.add(field[i][j]);      
            }
        }
        
       this.setPreferredSize(new Dimension(DEFAULT_WIDTH,DEFAULT_DEPTH));     // deine Größe angeben
       this.setBorder(new LineBorder(Color.black));      // dies ist später als Gitternetz sichtbar!
        f.add(panel, BorderLayout.CENTER);
        f.setVisible(true);
       
    }
    
    public void simulateOneStep()
    {
        fillCells();
    }
    
    public void clearField(Field[][] field)
    {
        for(int x=0; x<=field.getLength(); x++)
        {
            for(int y=0; y<=field.getWidth();y++)
            {
                field1[x][y] = null;
            }
        }
    }
}

Field Klasse:

PHP:
import javax.swing.*;
import java.awt.*;
/**
 * Write a description of class Field here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Field extends JPanel
{
    // instance variables - replace the example below with your own
    private int length, width;
    private boolean[][] field;

    /**
     * Constructor for objects of class Field
     */
    public Field(int length, int width)
    {
        // initialise instance variables
        this.length = length;
        this.width = width;
        field = new boolean[length][width];
                
    }
   

    
    public int getWidth()
    {
        return width;
    }
    
    public int getLength()
    {
        return length;
    }
    
    public int getNumberOfNeighbours(int x,int y)
    {
        return 2;
    }
}

bei fillCells soll eigentlich jedem Feld im Array true oder false zugewiesen werden, der Compiler sagt aber geht nicht. Weißt du zufällig warum ?
 
Ich denke einfach solange ich niemanden beleidige und die "Netiquette" soweit einhalte muss man nicht unbedingt pingelig werden gibt hie rimmerhin wichtigere Dinge.
Soweit einhalten ist aber leider nicht einhalten. Regeln sind ja da, damit sie eingehalten werden und nicht damit sie vielleicht eingehalten werden.
Ein Forum ist ja immerhin ein öffentlicher "Platz" und da sollte man schon gewisse Formen beachten, wie niemanden beleidigen oder auch, wenn es banal ist, die Groß- und Kleinschreibung.


Wo wird denn das Object field angelegt?
Code:
field[i][j] = true;

MFG

Sascha
 
Ich hab das doch im Parameter drin. Das soll von einer anderen Methode nach dem Vergleuich der beiden Felder mit dieser Methode neu eingelesen werden.#




Jetzt geht nichteinmal mehr ein Frame auf wenn ich das ausführe....:D
 
Zuletzt bearbeitet:
Sorry, hab übersehen, dass es ein Übergabeparameter war.

Das Object field ist kein Array, deshalb kannst du so nicht drauf zugreifen.

MFG

Sascha
 
hab das im parameter jetzt abgeändert in
private void fillCells(Field[][] field)
dennoch ein Error.

Ich hab das doch ind er Klasse Field als boolean Array deklariert oder nicht ? also muesste doch sobald ich ein OBjekt der Klasse generiere auch automatisch das array dadrin sein oder sehe ich das falsch ?

besten dank :)
 
Zuletzt bearbeitet:
Zurück