1

GUIにJtableを表示させることができません。なぜかわからず、エラーが発生せず、画面に何かを印刷すると9列になります。だから私はデータを取得します。しかし、私が間違っていることは私にはわかりません。

私の GUIOdreHandler は次のようになります

public GUIOrdreHandler(){

            KaldSQL ks = new KaldSQL();
            ResultSet rs;

        }

        public static DefaultTableModel buildTableModel(ResultSet rs)
                throws SQLException {

            java.sql.ResultSetMetaData metaData = rs.getMetaData();

            // names of columns
            Vector<String> columnNames = new Vector<String>();
            int columnCount = metaData.getColumnCount();
            for (int column = 1; column <= columnCount; column++) {
                columnNames.add(metaData.getColumnName(column));
                System.out.println(columnCount);
            }

            // data of the table
            Vector<Vector<Object>> data = new Vector<Vector<Object>>();
            while (rs.next()) {
                Vector<Object> vector = new Vector<Object>();
                for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {
                    vector.add(rs.getObject(columnIndex));
                }
                data.add(vector);
            }

            return new DefaultTableModel(data, columnNames);

            }

そして、私の GUIHentOrdre は次のようになります

public GUIHentOrdre(){

        try {
            con = ks.connectNow();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


        JPanel info = new JPanel();
        info.setLayout(new BorderLayout());
        button = new JButton("button");
        info.add(button, BorderLayout.CENTER);
        add(button);
        ResultSet rs = ks.Hentalleordreliste(con);
        GUIOrdreHandler gh = new GUIOrdreHandler();

        try {
            table = new JTable(gh.buildTableModel(rs));

            System.out.println(table);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        info.add(table, BorderLayout.CENTER);
        add(table);
    }
}

私はグーグルを試してみましたが、北向きの本はうまくいきますので、助けてください:D

4

1 に答える 1

1

コードの間違いについてのみ

JPanel info = new JPanel();
info.setLayout(new BorderLayout());
button = new JButton("button");
info.add(button, BorderLayout.CENTER);
add(button);
  • についてのコード行を削除add(button);します(コードは正確には話していません)

  • またはinfo.add(button, BorderLayout.CENTER);に変更NORTHSOUTH

  • JTableに(でJScrollPane) をJPanel正しく追加していない

疑似コード

JPanel info = new JPanel();
info.setLayout(new BorderLayout());
button = new JButton("button");
info.add(button, BorderLayout.SOUTH);
JTable table = new JTable (ClassOrVoidOrModelNameReturnsTableModel)
JScrollPane scroll = new JScrollPane(table)
info.add(scroll, BorderLayout.CENTER);
  • しかし、あなたの問題はいくつかの例外から来たはずなので、これは何かを解決するために上記のものではありませんJDBC

    1. JComponent内部に sを作成しないでくださいtry-catchブロックし、Object前にこれを準備してください。local variable

    2. 内部XxxModelで for sを作成しないでください-ブロックし、前にこれを準備してください。JComponenttrycatchObjectlocal variable

    3. initializeXxxModelとその JComponent、次に から にデータをロードJDBCするXxxModel

    4. ブロックrs.close()に追加( - - )finallytrycatchfinally

  • 車輪を再発明するのではなく、使用してください

    1. ResultSetTableModel

    2. @camickr によるデータベースからのテーブル

于 2012-12-05T22:01:27.760 に答える