所以為了練習Java知識,我從零開始了一個計算器。我有一個小問題,當我JLabel使用GridLayout控制臺為 a 分配按鈕時回傳例外java.lang.IllegalArgumentException。我知道我在做一些愚蠢的事情,我最好重新組織陣列并執行一個 for 回圈來分配按鈕,但我懶得去做,想了解我做錯了什么。
這是代碼:
buttonDisplay.setBounds(30, 30, 400, 320); //buttonDisplay is a JLabel
buttonDisplay.setLayout(new GridLayout(5,4,5,5));
operator = new JButton[20];
operator[0] = new JButton("0");
operator[1] = new JButton("1");
operator[2] = new JButton("2");
operator[3] = new JButton("3");
operator[4] = new JButton("4");
operator[5] = new JButton("5");
operator[6] = new JButton("6");
operator[7] = new JButton("7");
operator[8] = new JButton("8");
operator[9] = new JButton("9");
operator[10] = new JButton(" ");
operator[11] = new JButton("-");
operator[12] = new JButton("*");
operator[13] = new JButton("/");
operator[14] = new JButton(".");
operator[15] = new JButton("=");
operator[16] = new JButton("AC");
operator[17] = new JButton("C");
operator[18] = new JButton("TAX ");
operator[19] = new JButton("TAX-");
buttonDisplay.add(operator[0],4,2); //exception starts on this line
buttonDisplay.add(operator[1],3,3);
buttonDisplay.add(operator[2],3,2);
buttonDisplay.add(operator[3],3,1);
buttonDisplay.add(operator[4],2,3);
buttonDisplay.add(operator[5],2,2);
buttonDisplay.add(operator[6],2,1);
buttonDisplay.add(operator[7],1,3);
buttonDisplay.add(operator[8],1,2);
buttonDisplay.add(operator[9],1,1);
buttonDisplay.add(operator[10],1,4);
buttonDisplay.add(operator[11],2,4);
buttonDisplay.add(operator[12],3,4);
buttonDisplay.add(operator[13],4,4);
buttonDisplay.add(operator[14],4,1);
buttonDisplay.add(operator[15],4,3);
buttonDisplay.add(operator[16],5,1);
buttonDisplay.add(operator[17],5,2);
buttonDisplay.add(operator[18],5,3);
buttonDisplay.add(operator[19],5,4);
uj5u.com熱心網友回復:
當我運行您的代碼 [部分] 時,以下行引發了例外:
buttonDisplay.add(operator[0],4,2);
這是我得到的堆疊跟蹤的[部分]:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: illegal component position
at java.desktop/java.awt.Container.addImpl(Container.java:1115)
at java.desktop/java.awt.Container.add(Container.java:1033)
您正在呼叫的方法是這樣的:

uj5u.com熱心網友回復:
JLabel 不是用于放置純文本或影像的容器。但我知道您需要一個可以容納所有按鈕的容器。所以,你應該使用JPanel。
這是對您有很大幫助的代碼。
import java.awt.Color;
import javax.swing.JPanel;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import static javax.swing.JFrame.EXIT_ON_CLOSE;
public class Calculator extends javax.swing.JFrame {
JFrame frame = new JFrame();
JPanel buttonContainer = new JPanel();
JButton operator[] = new JButton[20];
public static void main(String args[]) {
new Calculator();
}
public Calculator() {
operator[0] = new JButton("0");
operator[1] = new JButton("1");
operator[2] = new JButton("2");
operator[3] = new JButton("3");
operator[4] = new JButton("4");
operator[5] = new JButton("5");
operator[6] = new JButton("6");
operator[7] = new JButton("7");
operator[8] = new JButton("8");
operator[9] = new JButton("9");
operator[10] = new JButton(" ");
operator[11] = new JButton("-");
operator[12] = new JButton("*");
operator[13] = new JButton("/");
operator[14] = new JButton(".");
operator[15] = new JButton("=");
operator[16] = new JButton("AC");
operator[17] = new JButton("C");
operator[18] = new JButton("TAX ");
operator[19] = new JButton("TAX-");
setSize(500, 500);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
buttonContainer.setLayout(new GridLayout(5, 4,5,5));
buttonContainer.setBackground(Color.red);
for (int i = 0; i < 20; i ) {
buttonContainer.add(operator[i]);
}
add(buttonContainer);
setVisible(true);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/486079.html
上一篇:意外輸出-從陣列中選擇最小的數字
