0

ここに問題があります。顧客リストをすべてチェックしたいのです。したがって、ハッシュマップを使用して、ic num と名前を出力します。ターミナルを使用しようとすると、出力は正常に実行されます。

しかし今、これらのハッシュ マップの結果を GUI に出力したいと考えています。

これまでの私のコーディングは次のとおりです。viewNumCust のアクション イベントにスキップできます。そこで、haspmap を jtextarea に出力しようとしました。

import javax.swing.*;
import java.io.*;
import java.util.*;

import java.awt.*;
import java.awt.event.*;
import java.io.FileReader;
import java.util.HashMap;
import java.util.Scanner;
import java.util.StringTokenizer;

public class manageClientAccGui extends JFrame
{
ImageIcon image;
JLabel imgLabel,clientLabel,helloLabel,greetingLabel;
JButton createCustProfileButt,editClientAccButt,deleteClientButt,backClientButt,viewNumCust;
JPanel panel1,panel2,panel3,panel4,panel5,panel6,panel7;
JTextArea viewListCust;

public manageClientAccGui()
{

    super("Team Garoking Manage Customer");

    Container con = getContentPane();
    con.setLayout(new BorderLayout());

    image = new ImageIcon("images/garokingLogo.jpg");
    imgLabel = new JLabel(image);

    clientLabel = new JLabel("Manage Client Account");
    clientLabel.setForeground(Color.WHITE);

    helloLabel = new JLabel("Hello! ");
    helloLabel.setForeground(Color.WHITE);

    greetingLabel = new JLabel("What would you like to do? ");
    greetingLabel.setForeground(Color.WHITE);

    JScrollPane scrollPane = new JScrollPane(viewListCust,
            JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
            JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    scrollPane.setPreferredSize(new Dimension(100, 100));

    JLabel empty = new JLabel("");
    JLabel empty1 = new JLabel("");
    JLabel empty2 = new JLabel("");
    JLabel empty3 = new JLabel("");
    JLabel empty4 = new JLabel("");

    createCustProfileButt = new JButton("Create Customer");
    editClientAccButt = new JButton("Edit Customer Details");
    deleteClientButt = new JButton("Remove Customer");
    viewNumCust = new JButton("View Number of Customers");
    backClientButt = new JButton("Back");
    viewListCust = new JTextArea();
    viewListCust.setEditable(false);

    panel1 = new JPanel();
    panel2 = new JPanel(new GridLayout(12,3));
    panel3 = new JPanel(new GridLayout(12,3,0,3));
    panel4 = new JPanel();
    panel5 = new JPanel();

    panel6 = new JPanel(new GridLayout(1,2));
    panel7 = new JPanel(new GridLayout(1,2));

    panel1.add(imgLabel);
    panel1.setBackground(new Color(90,18,18));

    panel2.add(clientLabel);
    panel2.add(empty);
    panel2.add(createCustProfileButt);
    panel2.add(empty1);
    panel2.add(editClientAccButt);
    panel2.add(empty2);
    panel2.add(deleteClientButt);
    panel2.add(empty3);
    panel2.add(viewNumCust);    
    panel2.add(empty4);
    panel2.add(backClientButt);
    panel2.setBackground(new Color(90,18,18));

    panel6.add(helloLabel);
    panel6.setBackground(new Color(90,18,18));

    panel7.add(greetingLabel);
    panel7.setBackground(new Color(90,18,18));

    panel3.add(panel6);
    panel3.add(panel7);
    panel3.setBackground(new Color(90,18,18));
    panel3.add(scrollPane);

    panel5.add(panel3);
    panel5.setBackground(new Color(90,18,18));

    panel4.add(panel2);
    panel4.setBackground(new Color(90,18,18));

    con.add(panel4, BorderLayout.WEST);
    con.add(panel1, BorderLayout.NORTH);
    con.add(panel5, BorderLayout.CENTER);

    Action act = new Action();

    createCustProfileButt.addActionListener(act);
    editClientAccButt.addActionListener(act);
    deleteClientButt.addActionListener(act);
    backClientButt.addActionListener(act);
    viewNumCust.addActionListener(act);

    setVisible(true);
    Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
    setLocation(((dim.width-1024)/2), ((dim.height-650)/2));
    setSize(1024,650);

}

//  public static void main(String args[])
//  {
//      new manageClientAccGui();
//  }

class Action implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {   
            if(e.getSource() == createCustProfileButt)
            {
                dispose();
                new Log("Accessing create customer");
                new addCustGui();
            }

            if(e.getSource() == editClientAccButt)
            {
                dispose();
                new Log("Accessing edit customer");
                new editCustGui();
            }

            if(e.getSource() == deleteClientButt)
            {
                dispose();
                new Log("Accessing remove customer");
                new removeCustGui();
            }

            if(e.getSource() == backClientButt)
            {
                dispose();
                new Log("Accessing main menu");
                new menuGarokingGui();
            }

            if(e.getSource() == viewNumCust)
            {
                int enumer = 0;
                HashMap<String, String> map = new HashMap<String, String>();

                try
                {
                    Scanner scanner = new Scanner(new FileReader("IndividualDetails.txt"));

                    while (scanner.hasNextLine()) {
                        String[] columns = scanner.nextLine().split("\t");
                        map.put(columns[1,], columns[2])
                        enumer++;
                    }
                }catch (FileNotFoundException ex)
                    {
                    }
                    new Log("View latest");
                    viewListCust.append("The clients are : " + map.values());
                    viewListCust.append("The total number of clients are : " + enumer);         
            }
        }
    }
}
4

2 に答える 2

5

Map#valuesオブジェクトの を返しCollectionます。

呼び出しviewListCust.append("The clients are : " + map.values())は、返されたコレクションのメソッドを呼び出すだけCollection#toStringであり、コンテンツのきれいなビューを提供する可能性は低いです。

代わりに、コレクションを自分で反復処理する必要があります。

viewListCust.append("The clients are :");
for (String value : map.values()) {
    viewListCust.append("\n" + value);
}

ここで、ファイルを読み取ってコンテンツを追加している間は、イベント ディスパッチ スレッドをブロックしていることに注意してください。これにより、プログラムがハングしたように見えます。

SwingWorkerUI を更新する前に、 を利用してバックグラウンドでファイルをロードすることをお勧めします。Swing の同時実行性を確認する

于 2012-11-29T03:33:18.507 に答える
2

viewListCustなどに渡す前にインスタンス化する必要がありますJScrollPane

viewListCust = new JTextArea();
viewListCust.setEditable(false);

JScrollPane scrollPane = new JScrollPane(viewListCust,
                    JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                    JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPane.setPreferredSize(new Dimension(100, 100));

viewListCustJScrollPaneコンストラクターに渡すと、現在 null です。

于 2012-11-29T03:54:49.670 に答える