array en for loop in een class??

  • Onderwerp starter Onderwerp starter Juzzz
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Juzzz

Gebruiker
Lid geworden
15 jan 2008
Berichten
281
ik ben bezig met een sudoku solver te maken, nou ben ik wel goed in berekeningen etc maar de GUI nog niet helemaal..

ik had een test opgezet uit een boek met 2 knoppen, zelf heb ik toegevoegd dat er een andere tekst in het veld kwam.

dat is allemaal gelukt:
Code:
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.*;

public class ButtonToText extends JFrame implements ActionListener {
    // Create two buttons + textfield
    private JButton jbtOk = new JButton("OK");
    private JButton jbtCancel = new JButton("Cancel");
    private JTextField field = new JTextField("pre text", 10);


    /** main methods */
    public static void main(String[] args) {
	ButtonToText frame = new ButtonToText();
	frame.setTitle("ButtonToText");
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.setBounds(400, 200, 150, 100);
	frame.setVisible(true);
    }

    public ButtonToText() {
	// Set FlowLaout manager to arrange the components
	// inside the frame
	getContentPane().setLayout(new FlowLayout());

	// Add buttons to the frame
	getContentPane().add(field);
	getContentPane().add(jbtOk);
	getContentPane().add(jbtCancel);

	// Create a listener object
	/** ButtonListener btListener = new ButtonListener(); */
	// Register listeners
	jbtOk.addActionListener(this);
	jbtCancel.addActionListener(this);
    }

    /** This method will be invoked when a button is clicked */
    public void actionPerformed(ActionEvent e) {
	field.setText("na text");
	System.out.println("click");
    }
}


na deze test wil ik doorgaan met het echte werk.
alleen begint het gelijk fout.

ik krijg al een error bij de eerste paar regels: "illegal start of type"

het enige wat ik gedaan heb, ik een for loop toegevoegd:

Code:
    JTextField[] sudo = new JTextField[82];

    for (int f = 1; f < sudo.length; f++){
	sudo[f] = new JTextField("0", 2);
	sudo[f].setHorizontalAlignment(JTextField.CENTER);
    }

waarom ik het in de class wil?

ik moet de text velden uit kunnen lezen na de button click, zodat ik de sudoku op kan lossen.
en zonder invoer heft hij niets om te rekenen.

ik hoop dat iemand mij kan helpen?
alvast bedankt.
 
Als ik het goed begrijp heb je dat onderste stuk code er gewoon onder geplakt? Dan begrijp ik waarom hij zegt: "Illegal start of type".. Dat is dan omdat je je klasse daarboven al hebt afgesloten en dan plots plak je er nog iets onder. Dan verwacht je compiler dat je eerst weer zegt hoe de nieuwe klasse heet of iets dergelijks...

Snap je wat ik bedoel?

Grts
 
Als ik het goed begrijp heb je dat onderste stuk code er gewoon onder geplakt? Dan begrijp ik waarom hij zegt: "Illegal start of type".. Dat is dan omdat je je klasse daarboven al hebt afgesloten en dan plots plak je er nog iets onder. Dan verwacht je compiler dat je eerst weer zegt hoe de nieuwe klasse heet of iets dergelijks...

Snap je wat ik bedoel?

Grts


Alhoewel dan zou hij denk ik een ander fout melding geven als "enum or class expected"... Kun je eens je volledige klasse geven zonder het in twee delen te splitsen?

Grts
 
Als ik het goed begrijp heb je dat onderste stuk code er gewoon onder geplakt? Dan begrijp ik waarom hij zegt: "Illegal start of type".. Dat is dan omdat je je klasse daarboven al hebt afgesloten en dan plots plak je er nog iets onder. Dan verwacht je compiler dat je eerst weer zegt hoe de nieuwe klasse heet of iets dergelijks...

Snap je wat ik bedoel?

Grts


nee echt bij de button en textfield declaratie (dus NET onder het begin van de class) heb ik die for lus toegevoegd.

ik voeg de hele "foute" code wel toe:

Code:
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.*;

public class sudoSolver extends JFrame implements ActionListener {
    // Create 82 TextFields
    JTextField[] sudo = new JTextField[82];

    for (int f = 1; f < sudo.length; f++){
		sudo[f] = new JTextField("0", 2);
		sudo[f].setHorizontalAlignment(JTextField.CENTER);
    }

    // Create button
    private JButton jbtOk = new JButton("OK");
    private JButton jbtCancel = new JButton("Cancel");
    private JTextField field = new JTextField("pre text", 10);


    /** main methods */
    public static void main(String[] args) {
	sudoSolver frame = new sudoSolver();
	frame.setTitle("sudoSolver");
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.setBounds(400, 200, 150, 100);
	frame.setVisible(true);
    }

    public sudoSolver() {
	// Set FlowLaout manager to arrange the components
	// inside the frame
	getContentPane().setLayout(new FlowLayout());

	// Add buttons to the frame
	getContentPane().add(field);
	getContentPane().add(jbtOk);
	getContentPane().add(jbtCancel);

	// Create a listener object
	/** ButtonListener btListener = new ButtonListener(); */
	// Register listeners
	jbtOk.addActionListener(this);
	jbtCancel.addActionListener(this);
    }

    /** This method will be invoked when a button is clicked */
    public void actionPerformed(ActionEvent e) {
	field.setText("na text");
	System.out.println("click");
    }
}

ik weet dat hij nog niets toevoegt aan het frame maar hij ziet 'for' al als fout.
 
Code:
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.*;

public class sudoSolver extends JFrame implements ActionListener {
    // Create 82 TextFields
    private JTextField[] sudo = new JTextField[82];
    // Create button
    private JButton jbtOk = new JButton("OK");
    private JButton jbtCancel = new JButton("Cancel");
    private JTextField field = new JTextField("pre text", 10);

    
public sudoSolver() {
    
     for (int f = 1; f < sudo.length; f++){
     sudo[f] = new JTextField("0", 2);
     sudo[f].setHorizontalAlignment(JTextField.CENTER);
    }
    // Set FlowLaout manager to arrange the components
    // inside the frame
    getContentPane().setLayout(new FlowLayout());

    // Add buttons to the frame
    getContentPane().add(field);
    getContentPane().add(jbtOk);
    getContentPane().add(jbtCancel);

    // Create a listener object
    /** ButtonListener btListener = new ButtonListener(); */
    // Register listeners
    jbtOk.addActionListener(this);
    jbtCancel.addActionListener(this);
    }


    /** main methods */
    public static void main(String[] args) {
    sudoSolver frame = new sudoSolver();
    frame.setTitle("sudoSolver");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setBounds(400, 200, 150, 100);
    frame.setVisible(true);
    }



    /** This method will be invoked when a button is clicked */
    public void actionPerformed(ActionEvent e) {
    field.setText("na text");
    System.out.println("click");
    }
}

Dit compileert normaal wel!

==> Je for-lus moet in je constructor staan! Je for-lus kan niet zomaar ergens tussen twee methodes staan of zoiets... En nog een opmerking: maak er een gewoonte van om eerst je velden te declareren, dan je constructor en dan al je methodes (ook je void main string args methode...) en dan je "actionPerformed en dergelijke" klassen.
 
Code:
 code

Dit compileert normaal wel!

==> Je for-lus moet in je constructor staan! Je for-lus kan niet zomaar ergens tussen twee methodes staan of zoiets... En nog een opmerking: maak er een gewoonte van om eerst je velden te declareren, dan je constructor en dan al je methodes (ook je void main string args methode...) en dan je "actionPerformed en dergelijke" klassen.

super bedankt, ik ga gelijk verder..

ook bedankt voor die tip, ik ben in om te leren dus hoe meer tips hoe beter (overdrijven kan niet ^^,)


EDIT:

heb nu finaly dit voor elkaar:
Code:
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.*;

public class sudoSolver extends JFrame implements ActionListener {
    // Create 82 TextFields
    JTextField[] sudo = new JTextField[82];

    // Create button
    private JButton solve = new JButton("Solve Sudoku");

    public sudoSolver() {

	for (int f = 1; f < sudo.length; f++){
	    sudo[f] = new JTextField("0", 2);
	    sudo[f].setHorizontalAlignment(JTextField.CENTER);
	}
	// Set FlowLayout manager to arrange the components
	// inside the frame
	getContentPane().setLayout(new FlowLayout());

	//JPanel voor het 9x9 grid
	JPanel JPgrid = new JPanel();
	JPgrid.setLayout(new GridLayout(9, 9, 2, 2));
	
	for (int f = 1; f < sudo.length; f++){
	    JPgrid.add(sudo[f]);
	}

	//Jpannel voor de Button
	JPanel JPbutton = new JPanel();
	JPbutton.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 20));
	JPbutton.add(solve);

	// Add buttons to the frame
	getContentPane().add(JPgrid, BorderLayout.NORTH);
	getContentPane().add(JPbutton);

	// Register listeners
	solve.addActionListener(this);
    }

    /** main methods */
    public static void main(String[] args) {
	sudoSolver frame = new sudoSolver();
	frame.setTitle("sudoSolver");
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.setBounds(400, 200, 250, 300);
	frame.setVisible(true);
    }

    /** This method will be invoked when a button is clicked */
    public void actionPerformed(ActionEvent e) {
	for (int i = 1; i < sudo.length; i++){
	    sudo[i].setText("1");
	}
    }
}

nu alleen nog ff kijken hoe ik int's kan maken van de input van die textfields.
(niet integer.parseInt, bedoel juist een INT IN het veld)
 
Laatst bewerkt:
nu alleen nog ff kijken hoe ik int's kan maken van de input van die textfields.
(niet integer.parseInt, bedoel juist een INT IN het veld)

kijk in de API eens naar de Integer class, ook deze site is, als je er aan uit geraakt tenminste, interessant.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan