使用按钮使界面更好(java)

时间:2018-12-09 14:50:03

标签: java swing jbutton

我是一名新的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-我在代码中实现了按钮,但是在我运行代码时这些按钮没有出现。

1 个答案:

答案 0 :(得分:1)

  

现在,用户必须输入一个数字才能执行这些操作之一(即输入1以打印数组中的元素),但是我试图这样做,以便功能可以与按钮一起使用。

GUI应用程序与基于文本的应用程序不同。一方面,您无需使用while loop来监听用户输入。

  

基本上,现在,代码获取一个数组列表

在GUI应用程序中,您也不能直接与ArrayLists一起显示数据。而是使用Swing组件,该组件将使用Model来保存数据。因此,“模型”将替换ArrayList。那就是对模型的所有添加/删除都完成了。

因此,我建议您从头开始并重新设计应用程序的结构以使用GUI,而不要尝试将现有代码适合GUI结构。

首先阅读How to Use Lists上Swing教程中的部分。 ListDemo的示例向您展示了创建GUI所需的一切,该GUI使用按钮来添加/删除ListModel的{​​{1}}中的项目。