我写了一个简单的程序,用户可以制作正方形。我有一个JOptionPane类,它为用户提供了3个选项:做一个正方形,2。显示制作好的正方形和0。辞职。我想把所有的方块存储在一个数组列表中,这样当用户选择2时,它会返回所有制作好的方块,使用format()方法。所以JOptionPane类有一个静态数组列表,但它从不保留存储的正方形。这个JOptionPane类由主方法类Launcher调用。但是当我按2显示所有的方块时,它什么也没有返回。还有一个非常简单的类Position,它可以用x和y值设置某个位置。
类广场:
package domain;
import java.awt.Color;
public class Square {
private Color color;
private int size;
private Position position;
public Square(Color color, int size, Position position) {
this.setColor(color);
this.setSize(size);
this.setPosition(position);
}
public Color getColor() {
return color;
}
public void setColor(Color color) {
this.color = color;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public Position getPosition() {
return position;
}
public void setPosition(Position position) {
this.position = position;
}
public String format() {
return "Square with size " + this.getSize() + " on " + this.getPosition().format();
}
}
JOptionPane类:
package ui;
import java.awt.Color;
import java.util.ArrayList;
import javax.swing.JColorChooser;
import javax.swing.JOptionPane;
import domain.Position;
import domain.Square;
public class JPaintMenu {
public static ArrayList<Square> squares = new ArrayList<Square>();
public int menu() {
String choice = JOptionPane.showInputDialog("1. Create squaren2. Show squaresnn0. QuitnMake your choice:n");
return Integer.parseInt(choice);
}
public Square newSquare() {
Color color = JColorChooser.showDialog(null, "Color of the square?", null);
String sizeString = JOptionPane.showInputDialog("Size of the square?");
int size = Integer.parseInt(sizeString);
String xString = JOptionPane.showInputDialog("X coordinate?");
int x = Integer.parseInt(xString);
String yString = JOptionPane.showInputDialog("Y coordinate?");
int y = Integer.parseInt(yString);
Position position = new Position(x, y);
Square square = new Square(color, size, position);
squares.add(square);
return square;
}
public String format() {
String result = "";
for(Square square : squares) {
result += square.format();
}
return result;
}
}
主方法类Launcher:
package ui;
import javax.swing.JOptionPane;
public class Launcher {
public static JPaintMenu menu = new JPaintMenu();
public static void main(String[] args) {
int result = menu.menu();
if(result == 1) {
menu.newSquare();
}
if (result == 2) {
JOptionPane.showMessageDialog(null, menu.format());
}
}
}
我认为(1)你混淆了静态和持久,或者(2)你的main
方法应该在循环中实现。
对于static
,一个意味着您不将一个对象的状态存储到另一个对象中,而是在相同类型的所有对象中共享。持久存储意味着您存储对象的状态,以便下次调用程序时可以访问它。在这种情况下,您需要序列化数据;并将其存储到文件(或web服务器,…)
另一种可能是让程序多次查询用户;如:
int result = -1;
do {
result = menu.menu();
if(result == 1) {
menu.newSquare();
}
if (result == 2) {
JOptionPane.showMessageDialog(null, menu.format());
}
} while(result == 1 || result == 2);