0

私がやりたいことはJTable、ユーザーがボタンをクリックして正しく動作するときにいくつかのデータを表示することですが、奇妙なことが起こっています。最初はボタンをクリックしても何も起こりませんが、フレームを最大化するとテーブルが表示されます!

ActionListener

b2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                boolean state = external.isSelected();
                DefaultTableModel model = new DefaultTableModel(ManhattanTable(values), Headers(values));
                   JTable table = new JTable(model);
                   table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
                   container.add(new JScrollPane(table));
                   table.setVisible(false);
                if(state) {
                    PrintStream out = null;
                    try {
                        out = new PrintStream(new FileOutputStream("output.txt"));
                    } catch (FileNotFoundException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                    System.setOut(out);
                    long start= System.currentTimeMillis();
                    Manhattan(values);
                    long end=System.currentTimeMillis();
                    out.println("time: "+(end-start)+" milliseconds");
                    out.println("Number of input data: "+values.size());    
                } else {
                     table.setVisible(true);
                }           
            }
        }); 

なぜこの奇妙な振る舞いをするのか、誰もが知っていますか?

4

2 に答える 2

6

テーブルを追加した後、呼び出しますcontainer.revalidate()

于 2012-10-20T03:41:06.893 に答える
2

問題は、テーブルを作成してプロパティを設定したにもかかわらず、ウィンドウにそのコンポーネントを再描画するように指示しなかったことです。ウィンドウのサイズを変更すると、強制的に再描画されます。

于 2012-10-20T05:32:17.543 に答える