我是一名新的Java程序员,并且我有一些代码试图通过添加按钮来改善UI。基本上,现在,该代码获取一个数组列表,并允许用户使用它执行许多操作。用户可以将项目添加到阵列列表中,从阵列列表中删除项目,在阵列列表中的某个索引处设置项目,在阵列列表中打印项目,并在阵列的某个索引处获得项目。它几乎允许用户使用基本的数组列表功能(.add,.remove等)以一些基本方式与数组列表进行交互。
现在,用户必须输入数字才能执行这些操作之一(即输入1以打印数组中的元素),但我正在尝试使其能够与按钮一起使用。在过去大约一个小时的时间里,我一直在寻找按钮和动作侦听器的工作方式,我认为自己对此有所了解,但遇到了问题。我运行了代码,但按钮却没有显示出来,所以我对为什么发生这种情况感到困惑。
这是我的代码中最重要的部分:
import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class test
{
public static void main (String arg[]) throws IOException {
// * Main Variable Declaration (with any Initialization)
//
ArrayList<String> List = new ArrayList<String>();
boolean continueThisApp = true;
int userInput_MenuChoice;
Scanner scanner = new Scanner(System.in);
// * Main Code
//
while( continueThisApp )
{
// * Menu of Choices
//
JFrame frame = new JFrame();
JButton b1 = new JButton();
JButton b2 = new JButton();
JButton b3 = new JButton();
JButton b4 = new JButton();
JButton b5 = new JButton();
JButton b6 = new JButton();
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
print(items_ObsInArrLst);
}
});
b2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
add(items_ObsInArrLst);
}
});
b3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
remove(items_ObsInArrLst);
}
});
b4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
get(items_ObsInArrLst);
}
});
b5.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
set(items_ObsInArrLst);
}
});
b6.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("*** Thanks for Trying our App. :)");
}
});
frame.setSize(1000, 1000);
//b1
b1.setVisible(true);
b1.setText("Print elements");
frame.setLayout(new FlowLayout());
frame.add(b1);
//b2
b2.setVisible(true);
b2.setText("Add elements");
frame.add(b2);
//b3
b3.setVisible(true);
b3.setText("Remove elements");
frame.add(b3);
//b4
b4.setVisible(true);
b4.setText("Get elements");
frame.add(b4);
//b5
b5.setVisible(true);
b5.setText("Set elements");
frame.add(b5);
//b6
b6.setVisible(true);
b6.setText("Quit");
frame.add(b6);
// NOTE THAT THIS PART (THE OLD WAY WE DID IT) IS COMMENTED OUT
/*if( userInput_MenuChoice == 1 ){
print_Items_ObsInArrLst_Mth(items_ObsInArrLst);
}
else if( userInput_MenuChoice == 2 ){
scannerInputTo_AddLst_Mth (items_ObsInArrLst);
}
else if( userInput_MenuChoice == 3 ){
scannerInputTo_RemoveLst_Mth (items_ObsInArrLst);
}
else if( userInput_MenuChoice == 4 ){
scannerInputTo_GetLst_Mth (items_ObsInArrLst);
}
else if( userInput_MenuChoice == 5 ){
scannerInputTo_SetLst_Mth (items_ObsInArrLst);
}
else if( userInput_MenuChoice == 9 ){
continueThisApp_Bool = false;
System.out.println("*** Thanks for Trying our App. :)");
}
else{
System.out.println("*** Invalid Menu Choice. Retry.");
} */
}
}
动作侦听器内部的功能可以正常工作,但是按钮本身对我而言并不显示。我在问是否有人知道为什么按钮不出现。我确定我的代码还有其他问题,但是如果我知道按钮为什么不出现,我可能可以解决这些问题。如果有帮助,我目前正在使用BlueJ。
tl; dr-我在代码中实现了按钮,但是在我运行代码时这些按钮没有出现。
答案 0 :(得分:1)
现在,用户必须输入一个数字才能执行这些操作之一(即输入1以打印数组中的元素),但是我试图这样做,以便功能可以与按钮一起使用。
GUI应用程序与基于文本的应用程序不同。一方面,您无需使用while loop
来监听用户输入。
基本上,现在,代码获取一个数组列表
在GUI应用程序中,您也不能直接与ArrayLists一起显示数据。而是使用Swing组件,该组件将使用Model
来保存数据。因此,“模型”将替换ArrayList。那就是对模型的所有添加/删除都完成了。
因此,我建议您从头开始并重新设计应用程序的结构以使用GUI,而不要尝试将现有代码适合GUI结构。
首先阅读How to Use Lists上Swing教程中的部分。 ListDemo
的示例向您展示了创建GUI所需的一切,该GUI使用按钮来添加/删除ListModel
的{{1}}中的项目。