p2p.wrox.com Forums

p2p.wrox.com Forums (http://p2p.wrox.com/index.php)
-   Java Basics (http://p2p.wrox.com/forumdisplay.php?f=199)
-   -   loop array problem (http://p2p.wrox.com/showthread.php?t=58406)

dbrine May 26th, 2007 07:14 PM

loop array problem
 
Trying to get this checkerboard to loop and change colors based on the number inputted into start, step and stop. the problem I have no is that I get 2 errors.

incompatible types
found : void
required: java.awt.TextArea
numberArea[x] = numberArea[start & start++].setBackground(Color.magenta);

Code:


import java.awt.*;
import java.awt.event.*;
import javax.swing.JOptionPane;

public class Checkerboard extends Frame implements ActionListener
{

    Panel boardPanel = new Panel();
    TextArea numberArea[] = new TextArea[16];
    Panel buttonPanel = new Panel();
    Button goBut = new Button("Go");
    Label startLabel = new Label("Start");
    Label stepLabel = new Label("Step");
    Label stopLabel = new Label("Stop");
    Panel inputPanel = new Panel();
    int start=0, stop=0, step=0;
    TextField startField = new TextField();
    TextField stepField = new TextField();
    TextField stopField = new TextField();


    public Checkerboard()
    {
        // set layouts for frame and two panels
        this.setLayout(new BorderLayout());
        boardPanel.setLayout(new GridLayout(4,4));
        inputPanel.setLayout(new GridLayout(2,3));
        buttonPanel.setLayout(new FlowLayout(FlowLayout.LEFT));

        // add components to board Panel
        for (int i = 0; i < numberArea.length; i++) {
            numberArea[i] = new TextArea(null, 3, 5, 3);
            numberArea[i].setText(Integer.toString(i));
            numberArea[i].setEditable(false);
            numberArea[i].setBackground(Color.WHITE);
            boardPanel.add(numberArea[i]);
        }

        // add components to input Panel
        inputPanel.add(startField);
        inputPanel.add(stepField);
        inputPanel.add(stopField);
        inputPanel.add(startLabel);
        inputPanel.add(stepLabel);
        inputPanel.add(stopLabel);

        //buttonPanel Component
        buttonPanel.add(goBut);

        // add panels to frame
        add(boardPanel, BorderLayout.NORTH);
        add(inputPanel, BorderLayout.CENTER);
        add(buttonPanel, BorderLayout.SOUTH);

        goBut.addActionListener(this);

        // overriding the windowClosing() method will allow the user to click the Close button
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

    }// end of constructor method

    public static void main(String[] args) {
        Checkerboard f = new Checkerboard();
        f.setBounds(50, 100, 300, 400);
        f.setTitle("Checkerboard Array");
        f.setVisible(true);
    }// end of main() method

    public void actionPerformed(ActionEvent e)
    {
        try
        {
            start = Integer.parseInt(startField.getText());
            step = Integer.parseInt(stepField.getText());
            stop = Integer.parseInt(stopField.getText());

        }catch(Exception exception)

        {
            return;
        }

        Object src = e.getSource();

        for (int x = start -1; x < stop; x = step)//you need to do the -1 because the array subscript values in Java all start
        //with zero, but humans use numbers starting with 1
        {
            //numberArea[x] = numberArea[start & start++].setBackground(Color.magenta);//..change the color for that square here

            if (src == goBut)
            {
            if (start >= 0 && start <= 15 && start < stop) {
                numberArea[x] = numberArea[start & start++].setBackground(Color.magenta);

            }
            else
            {
                JOptionPane
                        .showMessageDialog(
                                null,
                                "You have entered an incorrect number or a number larger than 15. Please try again",
                                "Error", JOptionPane.ERROR_MESSAGE);
            }

            if (step >= 0 && step <= 15 && start < stop) {
                numberArea[x] = numberArea[step & step++].setBackground(Color.yellow);
            }
        }
}
    }

    // clears stop, stop, step
    void clearFields() {
        startField.setText("");
        stepField.setText("");
        stopField.setText("");
        startField.requestFocus();
        boardPanel.setBackground(Color.WHITE);
    }// end of clearFields() method

}// end of Checkerboard class


iamrakesh22 May 28th, 2007 07:15 AM

Hi,
the setBackground() method doesnt return anything its return type is void. When you call component.setBackground() then the background of that component gets changed you dont have to reassign it to some other variable.
Try changing the line
numberArea[x] = numberArea[start & start++].setBackground(Color.magenta);
to
numberArea[start & start++].setBackground(Color.magenta);

Regards,
Rakesh

vinay.bk June 15th, 2007 06:49 AM

U r trying to assign a textarea with the method i.e setbackground that return void. If you could use this way it would work fine
numberArea[step & step++].setBackground(Color.yellow);
numberArea[x] = numberArea[start & start++];


All times are GMT -4. The time now is 07:53 PM.

Powered by vBulletin®
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
© 2013 John Wiley & Sons, Inc.