Массив, содержащий объекты JButton - PullRequest
5 голосов
/ 22 марта 2012

Хорошо, я пытаюсь выполнить упражнение из книги, которую я использую для изучения Java.Вот код, который у меня есть до сих пор:

import javax.swing.*;
import java.awt.GridLayout;
import java.awt.BorderLayout;
public class Calculator {
    //Declaration of all calculator's components.
    JPanel windowContent;
    JTextField displayField;
    JButton button0;
    JButton button1;
    JButton button2;
    JButton button3;
    JButton button4;
    JButton button5;
    JButton button6;
    JButton button7;
    JButton button8;
    JButton button9;
    JButton buttonPoint;
    JButton buttonAdd;
    JButton buttonEqual;
    JPanel pl;

    //Constructor creates the components in memory and adds the to the frame using combination of Borderlayout.
    Calculator() {
        windowContent= new JPanel();

    // Set the layout manager for this panel
        BorderLayout bl = new BorderLayout();
        windowContent.setLayout(bl);

    //Create the display field and place it in the North area of the window
        displayField = new JTextField(30);
        windowContent.add("North",displayField);

    //Create button field and place it in the North area of the window
        button0=new JButton("0");
        button1=new JButton("1");
        button2=new JButton("2");
        button3=new JButton("3");
        button4=new JButton("4");
        button5=new JButton("5");
        button6=new JButton("6");
        button7=new JButton("7");
        button8=new JButton("8");
        button9=new JButton("9");
        buttonAdd=new JButton("+");
        buttonPoint = new JButton(".");
        buttonEqual=new JButton("=");

    //Create the panel with the GridLayout that will contain 12 buttons - 10 numeric ones, and button with the points
    //and the equal sign.
        pl = new JPanel ();
        GridLayout gl =new GridLayout(4,3);
        pl.setLayout(gl);
    //Add window controls to the panel pl.
        pl.add(button1);
        pl.add(button2);
        pl.add(button3);
        pl.add(button4);
        pl.add(button5);
        pl.add(button6);
        pl.add(button7);
        pl.add(button8);
        pl.add(button9);
        pl.add(buttonAdd);
        pl.add(buttonPoint);
        pl.add(buttonEqual);

    //Add the panel pl to the center area of the window
        windowContent.add("Center",pl);
    //Create the frame and set its content pane
        JFrame frame = new JFrame("Calculator");
        frame.setContentPane(windowContent);
    //set the size of the window to be big enough to accomodate all controls.
        frame.pack();
    //Finnaly, display the window
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        Calculator calc = new Calculator();
    }
}

Вот упражнение в точной формулировке:

Измените класс Calculator.java, чтобы сохранить все цифровые кнопки в 10.-элементный массив объявлен следующим образом:

Buttons[] numButtons= new Buttons[10];

Заменить 10 строк, начинающихся с

button0=new JButton("0");

, на цикл, который создает кнопкии сохраните их в этом массиве.

Хорошо, поэтому я попытался объявить массив с Buttons[] numbuttons line, но это просто дало мне ошибку:

Несколько маркеров вэта строка
-Кнопки не могут быть разрешены к типу
-Кнопки не могут быть разрешены к типу

Я вместо этого попробовал это:

JButton[] buttons = new JButton[10]

Изатем добавил каждую кнопку в массив следующим образом:

buttons[0] = "button0";

Когда я объявил массив, это не выдало ошибку, но когда я написал строку buttons[0], я получил эту ошибку:

Синтаксическая ошибка на "кнопках" токена, удалите этот токен

Итак, мне нужна помощь, чтобы понять, как это сделать этот.Кроме того, книгу можно найти здесь: http://myflex.org/books/java4kids/JavaKid811.pdf, и практика находится на странице 73. Я прошу прощения, если я перечисляю много информации.Это просто потому, что я очень плохо знаком с Java и не уверен, что нужно.Помощь приветствуется.Спасибо.

Ответы [ 4 ]

8 голосов
/ 22 марта 2012

Что вы делаете, пытаетесь установить пространство массива в строку, когда вам нужен JButton.

Вы должны делать это

buttons[0] = new JButton("0");

вместо

buttons[0] = "button0";

EDIT:

Я только что сделал это

import javax.swing.*;

public class test {

    public static void main(String[] args) {
        JButton[] buttons = new JButton[10];

        buttons[0] = new JButton("0");

        System.out.println(buttons[0].getText());
    }

}

и получил

0 

для вывода, поэтому ваша ошибка не в этой строке.

РЕДАКТИРОВАТЬ: код

Calculator.java

import javax.swing.*;
import java.awt.GridLayout;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Calculator {
    //Declaration of all calculator's components.
    JPanel windowContent;
    JTextField displayField;
    JButton buttons[];
    JButton buttonPoint;
    JButton buttonAdd;
    JButton buttonEqual;
    JPanel pl;

    //Constructor creates the components in memory and adds the to the frame using combination of Borderlayout.
    Calculator() {
        windowContent= new JPanel();
        buttons = new JButton[10];

    // Set the layout manager for this panel
        BorderLayout bl = new BorderLayout();
        windowContent.setLayout(bl);

    //Create the display field and place it in the North area of the window
        displayField = new JTextField(30);
        windowContent.add("North",displayField);

    //Create button field and place it in the North area of the window
        for(int i = 0; i < 10; i++) {
            buttons[i] = new JButton(String.valueOf(i));
        }

        buttonAdd=new JButton("+");
        buttonPoint = new JButton(".");
        buttonEqual=new JButton("=");

    //Create the panel with the GridLayout that will contain 12 buttons - 10 numeric ones, and button with the points
    //and the equal sign.
        pl = new JPanel ();
        GridLayout gl =new GridLayout(4,3);
        pl.setLayout(gl);
    //Add window controls to the panel pl.

        for(int i = 0; i < 10; i++) {
            pl.add(buttons[i]);
        }
        pl.add(buttonAdd);
        pl.add(buttonPoint);
        pl.add(buttonEqual);

    //Add the panel pl to the center area of the window
        windowContent.add("Center",pl);
    //Create the frame and set its content pane
        JFrame frame = new JFrame("Calculator");
        frame.setContentPane(windowContent);
    //set the size of the window to be big enough to accomodate all controls.
        frame.pack();
    //Finnaly, display the window
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        Calculator calc = new Calculator();
    }
}
2 голосов
/ 22 марта 2012
JButton[] buttons = new JButton[10]

Выше приведена правильная строка, но я вижу две путаницы:

  1. Эта строка:

    buttons[0] = "button0";
    

    вместо этого должно быть следующим:

    buttons[0] = new JButton("button0");
    

    Причина в том, что в вашем коде вы пытаетесь присвоить String для buttons[0] вместо ожидаемого JButton.

  2. Хорошо, поэтому я попытался объявить массив строкой кнопок Buttons [], но это только что дало мне ошибку: несколько маркеров в этой строке -Кнопки не могут быть разрешены к типу -Кнопки не могут быть разрешены к типу

    Buttons не является стандартным классом Java. Выполните поиск с учетом регистра для Buttons и замените все совпадения на JButton.

Если у вас все еще есть проблемы, пожалуйста, скопируйте и вставьте точный код для каждого варианта, который не работает.

1 голос
/ 22 марта 2012

Если я понимаю вашу проблему, вам нужен цикл для создания и сохранения кнопок J.

for (int i=0; i<10; i++) {
    numButton[i] = new JButton(String.valueOf(i));
}

Вам необходимо преобразовать переменную управления циклом в аргумент String для конструктора JButton.

0 голосов
/ 22 марта 2012

вы должны использовать

buttons[0] = button0;

, а не

buttons[0] = "button0";
...