簡體   English   中英

使用帶有JList和靜態數組的ActionListener

[英]Using ActionListener w/ JList & static Arrays

今天,我再次為您正在工作的項目尋求幫助/支持。 現在,我已經創建了一個GUI,允許用戶上傳“ ach”格式的文件。 (這只是具有特定格式的文本文件)。 上傳后,該程序將使用緩沖的閱讀器將文本行分成四個可能的JList。 在每個文本文件中,最多有四個“批頭”(以5開頭的數字),以及任意數量的“條目詳細信息”(以6開頭的數字)。 ach文件可能如下所示:

500000000000000000001  
600000000000000000001  
600000000000000000002  
600000000000000000003  
555555555555555555551  
622222222222222222221
622222222222222222223
622222222222222222224

因此,第一個“五個”數字和后面的所有“六個”將是“批處理一個”並顯示在第一個JList中,第二個“五個”數字和后面的所有“六個”將顯示在第二個JList中。 在這種情況下,其他兩個JList將為空,因為只有兩個批處理。

現在這是我要完成的工作:

一旦用戶上傳了文件並填充了字段(我已經成功完成了),用戶就需要能夠單擊列表中“六個”數字之一。 一旦他們單擊它,JOptionsPane將詢問他們原因碼。 這是我的第一個問題,如何實現監聽器。 由於JList字段是使用字符串數組填充的,該字符串數組稍后會在程序中使用緩沖讀取器進行填充,因此我不確定如何完成此操作。

我現在不會關注第二個問題,因為我專注於此。 下面是我的代碼,任何幫助將不勝感激!

package nacha;

import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.border.Border;
import javax.swing.filechooser.FileNameExtensionFilter;

public class NachaVersion3 

{

    final static boolean RIGHT_TO_LEFT = false;
    final static boolean shouldFill = true;
    final static boolean shouldWeightX = true;
    static int entryDetailCountOne;
    static int entryDetailCountTwo;
    static int entryDetailCountThree;
    static int entryDetailCountFour;
    static String batchHeaderDisplayOne="                                                  ";
    static String batchHeaderDisplayTwo="                                                  ";
    static String batchHeaderDisplayThree="                                                  ";
    static String batchHeaderDisplayFour="                                                  ";
    static ArrayList<String> entryDetailListGUI = new ArrayList<String>();
    static ArrayList<String> entryDetailList = new ArrayList<String>(); 
    static ArrayList<String> entryDetailList2 = new ArrayList<String>();
    static ArrayList<String> entryDetailList3 = new ArrayList<String>();
    static ArrayList<String> entryDetailList4 = new ArrayList<String>();

    public static void addComponentsToPane(Container pane){
        if (RIGHT_TO_LEFT){
            pane.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
        }

        Border border = BorderFactory.createRaisedBevelBorder();

        JButton submit;

        JLabel labelTitle;
        JLabel labelEntryDetailHeader1;
        JLabel labelEntryDetailHeader2;
        JLabel labelEntryDetailHeader3;
        JLabel labelEntryDetailHeader4;
        final JList listEntryDetail1;
        JList listEntryDetail2;
        JList listEntryDetail3;
        JList listEntryDetail4;


        pane.setLayout(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();
        if (shouldFill){
            c.fill = GridBagConstraints.HORIZONTAL;
        }




        labelTitle = new JLabel("ACH File Converter");
        labelTitle.setBorder(border);
        labelTitle.setFont(new java.awt.Font("Arial", Font.BOLD, 60));
        labelTitle.setHorizontalAlignment(SwingConstants.CENTER);
        c.fill = GridBagConstraints.HORIZONTAL;
        c.gridwidth=3;
        c.gridx=0;
        c.gridy=0;
        pane.add(labelTitle, c);

        labelEntryDetailHeader1 = new JLabel("Entry Detail Files Under Header: "+batchHeaderDisplayOne.substring(0,50));
        labelEntryDetailHeader1.setBorder(border);
        labelEntryDetailHeader1.setFont(new java.awt.Font("Arial", Font.LAYOUT_LEFT_TO_RIGHT, 14));
        c.fill=GridBagConstraints.HORIZONTAL;
        c.gridwidth=1;
        c.gridx=0;
        c.gridy=1;
        pane.add(labelEntryDetailHeader1, c);

        labelEntryDetailHeader2 = new JLabel("Entry Detail Files Under Header: "+batchHeaderDisplayTwo.substring(0,50));
        labelEntryDetailHeader2.setBorder(border);
        labelEntryDetailHeader2.setFont(new java.awt.Font("Arial", Font.LAYOUT_LEFT_TO_RIGHT, 14));
        c.fill=GridBagConstraints.HORIZONTAL;
        c.gridwidth=1;
        c.gridx=1;
        c.gridy=1;
        pane.add(labelEntryDetailHeader2, c);

        listEntryDetail1 = new JList(entryDetailList.toArray());
        listEntryDetail1.setBorder(border);
        listEntryDetail1.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
        listEntryDetail1.setLayoutOrientation(JList.VERTICAL);
        listEntryDetail1.setVisibleRowCount(10);
        listEntryDetail1.setSize(200,200);
        c.fill = GridBagConstraints.HORIZONTAL;
        c.gridwidth=1;
        c.gridx=0;
        c.gridy=2;
        JScrollPane scrollPane1 = new JScrollPane(listEntryDetail1);
        pane.add(scrollPane1, c);

        listEntryDetail2 = new JList(entryDetailList2.toArray());
        listEntryDetail2.setBorder(border);
        listEntryDetail2.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
        listEntryDetail2.setLayoutOrientation(JList.VERTICAL);
        listEntryDetail2.setVisibleRowCount(10);
        listEntryDetail2.setSize(200,200);
        c.fill = GridBagConstraints.HORIZONTAL;
        c.gridwidth=1;
        c.gridx=1;
        c.gridy=2;
        JScrollPane scrollPane2 = new JScrollPane(listEntryDetail2);
        pane.add(scrollPane2, c);

        labelEntryDetailHeader3 = new JLabel("Entry Detail Files Under Header: "+batchHeaderDisplayThree.substring(0,50));
        labelEntryDetailHeader3.setBorder(border);
        labelEntryDetailHeader3.setFont(new java.awt.Font("Arial", Font.LAYOUT_LEFT_TO_RIGHT, 14));
        c.fill=GridBagConstraints.HORIZONTAL;
        c.gridwidth=1;
        c.gridx=0;
        c.gridy=3;
        pane.add(labelEntryDetailHeader3, c);

        labelEntryDetailHeader4 = new JLabel("Entry Detail Files Under Header: "+batchHeaderDisplayFour.substring(0,50));
        labelEntryDetailHeader4.setBorder(border);
        labelEntryDetailHeader4.setFont(new java.awt.Font("Arial", Font.LAYOUT_LEFT_TO_RIGHT, 14));
        c.fill=GridBagConstraints.HORIZONTAL;
        c.gridwidth=1;
        c.gridx=1;
        c.gridy=3;
        pane.add(labelEntryDetailHeader4, c);

        listEntryDetail3 = new JList(entryDetailList3.toArray());
        listEntryDetail3.setBorder(border);
        listEntryDetail3.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
        listEntryDetail3.setLayoutOrientation(JList.VERTICAL);
        listEntryDetail3.setVisibleRowCount(10);
        listEntryDetail3.setSize(200,200);
        c.fill = GridBagConstraints.HORIZONTAL;
        c.gridwidth=1;
        c.gridx=0;
        c.gridy=4;
        JScrollPane scrollPane3 = new JScrollPane(listEntryDetail3);
        pane.add(scrollPane3, c);

        listEntryDetail4 = new JList(entryDetailList4.toArray());
        listEntryDetail4.setBorder(border);
        listEntryDetail4.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
        listEntryDetail4.setLayoutOrientation(JList.VERTICAL);
        listEntryDetail4.setVisibleRowCount(10);
        listEntryDetail4.setSize(200,200);
        c.fill = GridBagConstraints.HORIZONTAL;
        c.gridwidth=1;
        c.gridx=1;
        c.gridy=4;
        JScrollPane scrollPane4 = new JScrollPane(listEntryDetail4);
        pane.add(scrollPane4, c);



        submit = new JButton("Submit");
        submit.setFont(new java.awt.Font("Arial", Font.BOLD, 40));
        submit.setHorizontalAlignment(SwingConstants.CENTER);
        submit.setVerticalAlignment(SwingConstants.CENTER);
        c.fill = GridBagConstraints.HORIZONTAL;
        c.gridwidth=2;
        c.gridheight=8;
        c.gridx=0;
        c.gridy=5;
        c.ipady=153;
        pane.add(submit,c);

    }


    private static void createAndShowGUI(){
        JFrame frame = new JFrame("ACH File Converter");
        frame.setSize(500,500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        addComponentsToPane(frame.getContentPane());

        frame.pack();
        frame.setVisible(true);

    }

    public static void main(String args[]){

        BufferedReader br = null;
        BufferedWriter bw = null;

        int countFive = 0;

        ArrayList<String> batchHeaderList = new ArrayList<String>();

        JFileChooser chooser = new JFileChooser();
        UIManager.put("ScrollPane.background", Color.BLACK);
        FileNameExtensionFilter filter = new FileNameExtensionFilter("ACH Files", "ach");
        chooser.setFileFilter(filter);
        chooser.setDialogTitle("Please choose ACH file to upload");
        int returnVal = chooser.showOpenDialog(chooser);
        if(returnVal == JFileChooser.APPROVE_OPTION)
        {

            try{
                String sCurrentLine;
                br = new BufferedReader(new FileReader(chooser.getSelectedFile()));
                bw = new BufferedWriter(new FileWriter(chooser.getCurrentDirectory()+"//NachaOutput.ACH"));


                while((sCurrentLine = br.readLine()) !=null)
                {

                    if (sCurrentLine.startsWith("5")){
                        batchHeaderList.add(sCurrentLine);
                        countFive++;
                        if (countFive == 1){
                            batchHeaderDisplayOne=sCurrentLine;
                        }else if (countFive ==2 ){
                            batchHeaderDisplayTwo=sCurrentLine;
                        }else if (countFive == 3){
                            batchHeaderDisplayThree=sCurrentLine;
                        }else if (countFive == 4){
                            batchHeaderDisplayFour=sCurrentLine;
                        }
                    }else if (sCurrentLine.startsWith("6") && countFive==1){
                        entryDetailList.add(sCurrentLine);
                    }else if (sCurrentLine.startsWith("6") && countFive==2){
                        entryDetailList2.add(sCurrentLine);
                    }else if (sCurrentLine.startsWith("6") && countFive==3){
                        entryDetailList3.add(sCurrentLine);
                    }


                }

            } catch (IOException e){
                e.printStackTrace();
            } finally {
                try {
                    br.close();
                    bw.close();
                } catch (IOException e){
                    e.printStackTrace();
                }
            }

        javax.swing.SwingUtilities.invokeLater(new Runnable(){
            public void run(){
                createAndShowGUI();
            }
        });

    }

    }
}

如果您想測試此代碼以幫助我,則需要從上方復制並粘貼ACH示例文本到文本文件中,並將其另存為.ACH。

那是我的第一個問題:如何實現監聽器。

向每個需要一個JList添加一個ListSelectionListener 在處理程序中,您可以根據選擇自定義原因代碼列表。 然后,在模式對話框中請求相關的原因代碼,如從對話框獲取用戶的輸入所示。

listEntryDetail.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
    @Override
    public void valueChanged(ListSelectionEvent e) {
        …
        String code = (String)JOptionPane.showInputDialog(…);
        …
    }
});

另請參見如何編寫列表選擇偵聽器以及這些示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM