0

table を表示しようとしていて、 for ループで行データを動的に入力して show 、これをボタンをクリックします。これが私のコードです。誰か助けてください。

public class GetQuotes {

    private JTextField wtField = new JTextField(10);
    private JTextField htField = new JTextField(10);
    private JTextField lnField = new JTextField(10);
    private JTextField wiField = new JTextField(10);
    final JPanel gui = new JPanel(new BorderLayout(2,3));
    JPanel labelFields = new JPanel(new BorderLayout(2,2));
    JTable table;
    JPanel guiCenter = new JPanel(new BorderLayout(2,3));
    //default constructor
    public GetQuotes(){

    labelFields.setBorder(new TitledBorder("Enter Inputs"));

    JPanel labels = new JPanel(new GridLayout(0,1,1,1));
    //labels.setBorder(new TitledBorder("GridLayout"));
    JPanel fields = new JPanel(new GridLayout(0,1,1,1));

     labels.add(new JLabel("Weight"));
     labels.add(new JLabel("Length"));
     labels.add(new JLabel("Width"));
     labels.add(new JLabel("Height"));

     fields.add(wtField);
     fields.add(lnField);
     fields.add(wiField);
     fields.add(htField);

      labelFields.add(labels,BorderLayout.CENTER);
      labelFields.add(fields,BorderLayout.EAST);


     JPanel buttonConstrsint = new JPanel(new FlowLayout(FlowLayout.CENTER));
     JButton getQuotesButton = new JButton("Get Quotes..");

      getQuotesButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                   Quote[] data = getData();

                    table = new JTable(generateTableModel(data));
                    table.setModel(generateTableModel(data));

                    JScrollPane pane = new JScrollPane(table);
                    guiCenter.add(pane, BorderLayout.SOUTH);

                    gui.add(guiCenter,BorderLayout.CENTER);


               }

            }
        });

    buttonConstrsint.add(getQuotesButton);
    guiCenter.add(buttonConstrsint,BorderLayout.NORTH);

    gui.add(labelFields,BorderLayout.NORTH);
    gui.add(guiCenter,BorderLayout.CENTER);

    JOptionPane.showMessageDialog(null, gui);


    }

    private Quote[] getData(){

        //this function returns the needed data

    }

    //test the class
    public static void main(String[]args) throws Exception{
        SwingUtilities.invokeLater(new Runnable(){
            public void run(){
                new GetQuotes();
            }
        });

        }

    public static TableModel generateTableModel(Quote[] dataa) {

        String[][] data = new String[100][2] ;
          String[] colNames = {"col1","col2"};

        //here how to add another column data  dataa[j].getPrice 
          for(int i=0; i<colNames.length; i++){
          for(int j=0; j<dataa.length; j++){
              data[j][i] = dataa[j].getServiceName();

          }
          }

        return new DefaultTableModel(data, colNames);
    }
}

1) generateTableModel 関数の for ループに rowData を入力する際に​​助けが必要です。現時点では、1 つの列のデータを入力できます。2 番目の列のデータを作成する方法です。

2) ここでテーブルを作成し、上記の actionperformed 関数に戻ります。ここで、jscrollpanel と guicenterpanel にテーブルを追加します。しかし、どういうわけかそれは表を示していません。

誰か助けてください。

4

1 に答える 1

2

部分的な答え:

table = new JTable(generateTableModel(data));
// table.setModel(generateTableModel(data));  // *** this is redundant

JScrollPane pane = new JScrollPane(table);
guiCenter.add(pane, BorderLayout.SOUTH);

gui.add(guiCenter,BorderLayout.CENTER);

// don't forget to revalidate and repaint your container:
gui.revalidate();
gui.repaint();

冗長なコード行を取り除き、コンポーネントを追加または削除した後、コンテナーを再検証して再描画することを忘れないでください。


それにかんする:

1) generateTableModel 関数の for ループに rowData を入力する際に​​助けが必要です。現時点では、1 つの列のデータを入力できます。2 番目の列のデータを作成する方法です。

これに答えるのに十分な情報があるかどうか確信が持てません。現在のコードは何をしますか? 2列のJTableを作成しますか? それは何で満たされていますか?コードをデバッグしましたか?

于 2013-10-12T14:01:48.590 に答える