1

このコードは mysql に接続し、JFrame でテーブルを表示します。まず、試しframe.add(table)てみましたが機能しませんでしたがframe.setcontentpane(table) 、このコードでは機能しており、mysql でテーブルを表示できます。

form.getContentPane().add(table);

空のテーブルも表示されていますが、機能していません。

addsetcontentpaneの違いを知りたいですか?

add が機能しないのはなぜですか?

GUIでもボタンをドラッグしてJFrameに表示したかったのですが、コンテンツペインを設定すると、その後ボタンを表示できません

学生の JFrame のようなデザイン フレーム (右クリック -> 新しい Jframe) が必要です クラスを作成してデザインをコーディングしたくない GUI ビルダーを使用したいので、コンポーネントをドラッグし、ドラッグしたコンポーネントを使用します

Main.java:

     Vector columnNames = new Vector();
     Vector data = new Vector();
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        Connection con =DriverManager.getConnection("jdbc:mysql://localhost:3306/school", "colorway", "colorway");
        String sql = "Select name,lname from student";
        Statement statement = con.createStatement();
        ResultSet resultSet = statement.executeQuery(sql);
        ResultSetMetaData metaData = resultSet.getMetaData();
        int columns = metaData.getColumnCount();
    for (int i = 1; i <= columns; i++) {
        columnNames.addElement(metaData.getColumnName(i));
    }

    while (resultSet.next()) {
        Vector row = new Vector(columns);
        for (int i = 1; i <= columns; i++) {
            row.addElement(resultSet.getObject(i));
        }
        data.addElement(row);
    }
    resultSet.close();
    statement.close();
    Students form=new Students();
    JTable  table=new JTable(data, columnNames);
    form.setContentPane(table);
    form.setVisible(true);

学生.java:

public class Students extends javax.swing.JFrame {
//somecode
    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTable1;
    // End of variables declaration    

    public JPanel getjpanel(){
        return this.jPanel1;
    }

    public JScrollPane getJscrollPane()
    {
        return this.jScrollPane1;
    }

    public JTable getJTable()
    {
        return this.jTable1;
    }
}
4

1 に答える 1

3

setContentPaneコンポーネントの追加には使用しないでください。contentPane代わりに、コンポーネントを追加する必要がある場所です。これを行うsetContentPaneと、実際にそのコンテナを目的のコンポーネントに置き換えますadd

次を使用してコンポーネントを追加しますadd

form.getContentPane().add(table);

デフォルトでは、コンテナには がありBorderLayout、中央にテーブルが追加されます。次に、次を使用して下にボタンを追加できます。

form.getContentPane().add(button, BorderLayout.SOUTH);

この記事を見て、レイアウトを変更する方法と、コンポーネントを希望どおりに配置するために存在するさまざまなタイプのレイアウトを確認してください。

編集:わかりました、これがどのように機能するかを理解するのに役立つ作業テーブルのSSCCEです:

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class MyFrame extends JFrame {
    public MyFrame () {

        String[] columns = {"one", "two", "three"};
        String[][] data = {
            {"a1", "a2", "a3"},
            {"b1", "b2", "b3"},
        };

        JTable table = new JTable(data, columns);

        getContentPane().add(new JScrollPane(table));
        getContentPane().add(new JButton("Hello"), BorderLayout.SOUTH);

        pack();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
                @Override
                    public void run() { new MyFrame(); }
            });
    }
}

ここで使用している唯一のトリックは、スクロール ペイン内にテーブルを追加して、データがいっぱいになったときにテーブルがスクロール可能になるようにすることですが、レイアウトは説明したとおりです。

最終更新: NetBeans GUI ビルダーを使用している場合は、コンポーネントがどこに追加されているかを気にする必要はありませんcontentPane。Visual Editor がそれを処理します。JFrame フォームのレイアウトを変更する場合は、右クリックして選択し、必要なレイアウトを選択します。setContentPaneaddSet Layout

ただし、あなたがやろうとしていると思われることは (ただし、これは私が行っている小さな情報で推測しています)、データをリロードするたびに新しいテーブルを追加することです。これを行うべきではありません。TableModelテーブルの内容を更新するには、 を使用する必要があります。

于 2012-09-28T08:10:30.473 に答える