0

Jtable と World_info_object "info" を持つ pageA があります。そのテーブルは人々からのデータを示しています(人々は世界の情報にあります)。「情報」を編集して、各人に編集ボタンがあり、このページにも「+NEW」ボタンがあるようにしたい。これらのボタンにはアクションリスナーがあります: (編集はほぼ同じです)

 newPerson.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent arg0) {

        personFrame=new PersonPage( getInfo() , null );

        Thread closing =new Thread( new Runnable() {

            @Override
            public void run() {

                while(true){
                    if(personFrame.getConfirmed()==true){

                        setWorldInfo(personFrame.getInfo());
                        personFrame.setVisible(false);
                        personFrame.dispose();
                        System.out.println("closed");
                        updateTableData(); // repaint table !

                        break;
                    }
                    System.out.println("open...");
                }   

            }
        }, "closingWindow");




        closing.start();


    }
});

ここでわかるように、スレッドは確認されたブール値の変更を探します。これは、ユーザーが personFrame の [OK] または [キャンセル] ボタンを押したときに true になります。目的は、personFrame から getInfo() を取得し、ここで PageA (最初のフレーム) に設定することです。これで完了ですが、このスレッドでは " Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 5 >= 5 " が発生します。

この例外を解決する方法、または閉じる直前に他のページから送信されたデータを設定する方法を知っている人がいる場合は、教えてください... (または、テーブルに問題がある可能性があります)

例外: http://i.stack.imgur.com/UnZnd.png

** アップデート

私がやりたいのは、pageAからpageBを作成し、それに情報を送信して(これは完了です)、pageBを確認または閉じた後、関数update()を実行することです。ページAで!何か案が ?:)

**

// ほぼ解決済みのプログラム:

public class PageA extends JFrame {

private static HashMap<Integer, String>info=new HashMap<Integer,String>();
private JPanel contentPane;

/**
 * Launch the application.
 */
public static void main(String[] args) {


    info.put(1, "Sofia");
    info.put(2, "XSR");


    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                PageA frame = new PageA();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */
public PageA() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(80, 80, 450, 300);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);


    JButton btnNewButton = new JButton("Open pageB");
    btnNewButton.setBounds(126, 11, 160, 23);
    btnNewButton.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent arg0) {

            final PageB pageB=new PageB(info);
            pageB.addWindowListener(new WindowAdapter(){ // add listener to detect 
                 public void windowClosing(WindowEvent e){

                     setInfo(pageB.getInfo());
                     System.out.println("xxxx");

                 }
             });



        }
    });
    contentPane.add(btnNewButton);



}

public void setInfo(HashMap<Integer, String> uinfo){

    this.info=info;
}

}

public class PageB extends JFrame {

private JPanel contentPane;
private HashMap<Integer, String> info;

public PageB(HashMap<Integer, String> info) {

    this.info=info;

    this.info.put(113, "Alfred");
    this.info.put(314, "Alfa");
    this.info.put(13, "Luter");

    setBounds(100, 100, 450, 300);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    final PageB that=this;

    JButton btnOkayDone = new JButton("Okay , Done");
    btnOkayDone.setBounds(34, 228, 130, 23);
    btnOkayDone.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            // add event for closing
            that.dispatchEvent(new WindowEvent(that, WindowEvent.WINDOW_CLOSING));

        }
    });
    contentPane.add(btnOkayDone);

    this.setVisible(true);



}


public HashMap<Integer, String> getInfo(){

    return info;


}

}

4

2 に答える 2

0

エラー メッセージは、レイアウトの適用中にエラーが発生したことを示しています。コンポーネントが見つかるはずでしたが、何も見つかりませんでした。personFrame.dispose();これは、要素が 1 つ少ないことを考慮してレイアウトを更新せずに を不適切に使用したことが原因である可能性があります。

于 2014-12-25T09:57:28.643 に答える