Java 如何停止通过单独的方法调用丢失数组数据?
我正在寻找一个数组,可以使用多种方法。我试图通过创建一个全局数组来实现这一点。但我们发现,一旦将数据添加到数组的方法运行并终止,数据就会丢失,所有内容都将再次为空 数组在此处初始化:Java 如何停止通过单独的方法调用丢失数组数据?,java,arrays,Java,Arrays,我正在寻找一个数组,可以使用多种方法。我试图通过创建一个全局数组来实现这一点。但我们发现,一旦将数据添加到数组的方法运行并终止,数据就会丢失,所有内容都将再次为空 数组在此处初始化: package book; import book.BookIO; import java.awt.BorderLayout; import java.awt.*; import javax.swing.*; import java.awt.GridBagLayout; import java.awt.GridB
package book;
import book.BookIO;
import java.awt.BorderLayout;
import java.awt.*;
import javax.swing.*;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
/**
*
*
*/
public class UserInterface implements ActionListener {
int j=0;
int i;
//Containers
String hello;
JFrame frame = new JFrame("Java Program");
JPanel toppane = new JPanel(new GridBagLayout());
JPanel bottomPane = new JPanel(new GridBagLayout());
//Buttons
JButton processItem = new JButton("Process Item #1");
JButton confirmItem = new JButton("Confirm Item #1");
JButton viewOrder = new JButton("View Order");
JButton finishOrder = new JButton("Finish Order ");
JButton newOrder = new JButton("New Order");
JButton exit = new JButton("Exit");
//TextFields
JTextField amount = new JTextField();
JTextField id = new JTextField();
JTextField quantity = new JTextField();
JTextField info = new JTextField("");
JTextField total = new JTextField();
//Labels
JLabel num = new JLabel("Enter Number of Items in this Order:");
JLabel bookID = new JLabel("Enter Book ID for Item #1:");
JLabel quantityItem = new JLabel("Enter Quantity for Item #1:");
JLabel itemInfo = new JLabel("Item #1:");
JLabel subtotal = new JLabel("Order subtotal for 0 Items(s):");
public String[] order = new String[i];
int k = 0;
public void startUI() {
UserInterface gui = new UserInterface();
gui.bookingUI();
}
public void bookingUI() {
//sets windows, and pane in the UI
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GridBagConstraints c = new GridBagConstraints();
frame.setSize(800, 300);
//adding the labels to the panel
c.insets = new Insets(5, 0, 0, 0);
c.gridx = 2;
c.gridy = 1;
toppane.add(num, c);
c.gridx = 2;
c.gridy = 2;
toppane.add(bookID, c);
c.gridx = 2;
c.gridy = 3;
toppane.add(quantityItem, c);
c.gridx = 2;
c.gridy = 4;
toppane.add(itemInfo, c);
c.gridx = 2;
c.gridy = 5;
toppane.add(subtotal, c);
toppane.setBackground(Color.GREEN);
frame.add(toppane);
//add textfield to panel
c.ipadx = 400;
c.insets = new Insets(5, 10, 0, 0);
c.gridx = 3;
c.gridy = 1;
toppane.add(amount, c);
c.gridx = 3;
c.gridy = 2;
toppane.add(id, c);
c.gridx = 3;
c.gridy = 3;
toppane.add(quantity, c);
c.gridx = 3;
c.gridy = 4;
toppane.add(info, c);
c.gridx = 3;
c.gridy = 5;
toppane.add(total, c);
//----------------------------------------------------------BUTTOM PANE-------------------------
//adding the buttons to the pane.---------------------------------------------------------------
GridBagConstraints b = new GridBagConstraints();
b.insets = new Insets(5, 5, 5, 5);
b.ipadx = 10;
b.ipady = 10;
b.gridx = 1;
b.gridy = 0;
bottomPane.add(processItem, b);
processItem.addActionListener(this);
b.gridx = 2;
b.gridy = 0;
bottomPane.add(confirmItem, b);
confirmItem.setEnabled(false);
confirmItem.addActionListener(this);
b.gridx = 3;
b.gridy = 0;
bottomPane.add(viewOrder, b);
viewOrder.setEnabled(true);
viewOrder.addActionListener(this);
b.gridx = 4;
b.gridy = 0;
bottomPane.add(finishOrder, b);
finishOrder.setEnabled(true);
finishOrder.addActionListener(this);
b.gridx = 5;
b.gridy = 0;
bottomPane.add(newOrder, b);
newOrder.addActionListener(this);
b.gridx = 6;
b.gridy = 0;
bottomPane.add(exit, b);
exit.addActionListener(this);
bottomPane.setBackground(Color.BLUE);
frame.add(bottomPane, BorderLayout.SOUTH);
frame.setSize(810, 310);
frame.setVisible(true);
}
//action listener for the buttons
public void actionPerformed(ActionEvent e) {
int i = Integer.valueOf(amount.getText());
order = new String[i];
if (e.getSource() == processItem) {
processItem();
} else if (e.getSource() == confirmItem) {
confirmItem();
setProcessItemBtn();
} else if (e.getSource() == viewOrder) {
System.out.println(order.length);
} else if (e.getSource() == finishOrder) {
} else if (e.getSource() == newOrder) {
newOrder();
} else if (e.getSource() == exit) {
System.exit(0);
}
}
//Creating getters and setters to change the text for the buttons and labels, as well as getting text from the textfields.
public void setProcessItemBtn() {
processItem.setText("Process Item #");
processItem.validate();
processItem.repaint();
}
public void setConfirmItemBtn(int num) {
confirmItem.setText("Confirm Item #" + num);
confirmItem.validate();
confirmItem.repaint();
}
public void setViewOrderBtn(String title) {
viewOrder.validate();
viewOrder.repaint();
}
public void setInfo(String title, String price) {
info.setText(title + " " + price);
info.validate();
info.repaint();
}
public String getAmount() {
String str = amount.getText();
return str;
}
public void confirmItem(){
i = Integer.valueOf(amount.getText());
int amountOrdered = Integer.valueOf(quantity.getText());
System.out.println(k);
for (k = 0; k < amountOrdered; k++){
order[j] = id.getText() + " " + info.getText();
j++;
}
System.out.println(order[2]);
System.out.println(k);
if ((i-1)<j){
processItem.setEnabled(false);
confirmItem.setEnabled(false);
}else{
processItem.setEnabled(true);
confirmItem.setEnabled(false);
}
}
public void processItem(){
boolean ifFound = false;
confirmItem.setEnabled(true);
processItem.setEnabled(false);
BookIO findInfo = new BookIO();
ifFound = findInfo.readFile(id.getText(), this);
if (ifFound == true)
JOptionPane.showMessageDialog(null, "Found it");
else {
JOptionPane.showMessageDialog(null, "Book ID " + id.getText() + " not found in file");
confirmItem.setEnabled(false);
processItem.setEnabled(true);
}
}
public void newOrder(){
amount.setText(" ");
id.setText(" ");
quantity.setText(" ");
info.setText(" ");
total.setText(" ");
}
}
包装书;
导入book.BookIO;
导入java.awt.BorderLayout;
导入java.awt.*;
导入javax.swing.*;
导入java.awt.GridBagLayout;
导入java.awt.GridBagConstraints;
导入java.awt.Insets;
导入java.awt.event.ActionListener;
导入java.awt.event.ActionEvent;
/**
*
*
*/
公共类UserInterface实现ActionListener{
int j=0;
int i;
//容器
串你好;
JFrame=新的JFrame(“Java程序”);
JPanel-toppane=newjpanel(newgridbaglayout());
JPanel bottomPane=newjpanel(newgridbaglayout());
//钮扣
JButton processItem=新JButton(“过程项#1”);
JButton confirmItem=新JButton(“确认项目1”);
JButton视图顺序=新JButton(“视图顺序”);
JButton finishOrder=新JButton(“完成订单”);
JButton newOrder=新JButton(“新订单”);
JButton exit=新JButton(“exit”);
//文本字段
JTextField金额=新的JTextField();
JTextField id=新的JTextField();
JTextField数量=新的JTextField();
JTextField info=新的JTextField(“”);
JTextField总计=新的JTextField();
//标签
JLabel num=新的JLabel(“按此顺序输入项目数:”);
JLabel bookID=新JLabel(“为项目1输入图书ID”);
JLabel quantityItem=新的JLabel(“为项目输入数量#1:”);
JLabel itemInfo=新JLabel(“项目1:”);
JLabel小计=新JLabel(“0项订单小计”);
公共字符串[]顺序=新字符串[i];
int k=0;
公共空间startUI(){
UserInterface gui=新的UserInterface();
gui.bookingUI();
}
公开作废簿记(){
//在UI中设置窗口和窗格
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GridBagConstraints c=新的GridBagConstraints();
框架设置尺寸(800300);
//将标签添加到面板
c、 插图=新插图(5,0,0,0);
c、 gridx=2;
c、 gridy=1;
添加(数量,c);
c、 gridx=2;
c、 gridy=2;
添加(bookID,c);
c、 gridx=2;
c、 gridy=3;
添加(数量项目c);
c、 gridx=2;
c、 gridy=4;
添加(项目信息,c);
c、 gridx=2;
c、 gridy=5;
添加(小计,c);
顶面.立根面(颜色.绿色);
框架。添加(toppane);
//将文本字段添加到面板
c、 ipadx=400;
c、 插图=新插图(5,10,0,0);
c、 gridx=3;
c、 gridy=1;
添加(数量,c);
c、 gridx=3;
c、 gridy=2;
添加(id,c);
c、 gridx=3;
c、 gridy=3;
添加(数量,c);
c、 gridx=3;
c、 gridy=4;
添加(信息,c);
c、 gridx=3;
c、 gridy=5;
添加(总计,c);
//----------------------------------------------------------按钮窗格-------------------------
//将按钮添加到窗格中---------------------------------------------------------------
GridBagConstraints b=新的GridBagConstraints();
b、 插图=新插图(5,5,5,5);
b、 ipadx=10;
b、 ipady=10;
b、 gridx=1;
b、 gridy=0;
底部窗格。添加(processItem,b);
processItem.addActionListener(此);
b、 gridx=2;
b、 gridy=0;
底部窗格。添加(确认项,b);
confirmItem.setEnabled(false);
confirItem.addActionListener(此);
b、 gridx=3;
b、 gridy=0;
底部窗格。添加(视图顺序,b);
viewOrder.setEnabled(true);
viewOrder.addActionListener(此);
b、 gridx=4;
b、 gridy=0;
底部窗格。添加(finishOrder,b);
finishOrder.setEnabled(true);
finishOrder.addActionListener(这个);
b、 gridx=5;
b、 gridy=0;
底部窗格。添加(newOrder,b);
addActionListener(这个);
b、 gridx=6;
b、 gridy=0;
底部窗格。添加(出口,b);
exit.addActionListener(this);
底部窗格。背景(颜色。蓝色);
框架。添加(底部窗格,边框布局。南部);
帧设置大小(810310);
frame.setVisible(true);
}
//按钮的操作侦听器
已执行的公共无效操作(操作事件e){
int i=Integer.valueOf(amount.getText());
顺序=新字符串[i];
如果(例如getSource()==processItem){
processItem();
}else if(e.getSource()==confirItem){
确认项();
setProcessItemBtn();
}else if(例如getSource()==viewOrder){
系统输出打印项次(订单长度);
}else if(e.getSource()==finishOrder){
}else if(例如getSource()==newOrder){
新秩序();
}else if(例如getSource()=退出){
系统出口(0);
}
}
//创建getter和setter来更改按钮和标签的文本,以及从textfields获取文本。
public void setProcessItemBtn(){
processItem.setText(“processItem#”);
processItem.validate();
processItem.repaint();
}
公共void setconfirimitembtn(int num){
confirmItem.setText(“确认项目”#“+num);
confirmItem.validate();
confirmItem.repaint();
}
公共无效setViewOrderBtn(字符串标题){
validate();
viewOrder.repaint();
}
public void setInfo(字符串标题、字符串价格){
信息设置文本(标题+价格);
info.validate();
info.repaint();
}
公共字符串getAmount(){
String str=amount.getText();
order = new String[i];
String[] newOrder = new String[newLength];
System.arraycopy(order, 0, newOrder, 0, order.length);
order = newOrder;
order = java.util.Arrays.copyOf(order, order.length + 1); // increase array length by 1