简体   繁体   English

Java ArrayList不保留元素

[英]Java ArrayList not keeping elements

I wrote a simple program where the user can make squares. 我编写了一个简单的程序,用户可以在其中进行正方形运算。 I have a JOptionPane class that gives the user 3 options: 1. make a square, 2. show the made squares and 0. quit. 我有一个JOptionPane类,为用户提供3个选项:1.制作一个正方形; 2.显示制作的正方形; 0。退出。 I want to store all the squares in an ArrayList so when the user chooses 2 it returns all the made squares, with a format() method. 我想将所有平方存储在ArrayList中,以便当用户选择2时,它使用format()方法返回所有已制成的平方。 So the JOptionPane class has a static arraylist, but it never keeps the stored squares. 因此,JOptionPane类具有静态的arraylist,但从不保留存储的正方形。 This JOptionPane class is called by the main method class Launcher. 主方法类Launcher调用此JOptionPane类。 But when I press 2 to show all the squares it returns nothing. 但是,当我按2显示所有正方形时,它什么也不返回。 There is also a really simple class Position that sets a certian position with an x and y value. 还有一个非常简单的Position类,它用x和y值设置一个检出位置。

Class square: 班级广场:

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 class: 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 square\n2. Show squares\n\n0. Quit\nMake 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;
    }

}

And the main method class Launcher: 以及主要的方法类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());
        }
    }   
}

I think either (1) you confuses static with persistent , or (2) your main method should be implemented in a loop. 我认为要么(1)您将static持久性混淆,要么(2)您的main方法应在循环中实现。

With static one means you don't store the state of an object into another object, but shared over all objects of the same type. 使用static一个意味着您不将一个对象的状态存储到另一个对象中,而是在相同类型的所有对象上共享。 Persistent storage means you store the state of an object such that it is accessible the next time you call the program. 持久存储意味着您存储对象的状态,以便下次调用程序时可以访问该对象。 In that case you need to serialize the data; 在这种情况下,您需要序列化数据。 and store it into a file (or webserver,...) 并将其存储到文件(或网络服务器等)中

Another possibility is to make the program query the user multiple times; 另一种可能性是使程序多次查询用户。 like: 喜欢:

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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM