0

このプログラムでは、ユーザーがログインしてデータベースにアクセスするように要求する必要があります。次に、プログラムは接続オブジェクトを取得し、後で使用するために列名をベクトルに格納しているデータベースを検索します。問題は、ユーザーがデータベース内の特定の値を検索できるようにするテキストフィールドの実装にあります。

グリッドレイアウトを使用してチェックボックスとテキストフィールドを表示し、それらをパネルに追加できます。テキストフィールドを適切なチェックボックスに関連付けるにはどうすればよいですか?

それらをベクターに追加しようとしましたが、パネルにも追加できません。ループが列名を循環するときにテキストフィールドに名前を付ける方法を探しましたが、事前に宣言しないと実行できないようです。ユーザーが要求する属性を決定することは不可能であるため、これも実行できません。

ユーザーが情報を入力したかどうかをテストして必要なロジックを実行できるように、テキストフィールドの名前を知る必要があります。答えを出すために残りのコードを見る必要があるかどうか教えてください。しかし、うまくいけば、私が達成しようとしていることの一般的な考え方を理解できます。

UIの画像:

UIの画像:

 try {
        ResultSet r2 = con.getMetaData().getColumns("", "", rb.getText(), "");  
        colNames1 = new Vector<String>();  
        columns1 = new Vector<JCheckBox>();  
        while (r2.next()) {  
            colNames1.add(r2.getString(4));  
            JCheckBox cb = new JCheckBox(r2.getString(4));  
            JTextField tf = new JTextField(10);  
            columns1.add(cb);  
            p3.add(cb);  
            p3.add(tf);  
        }  
    }  
4

3 に答える 3

1

コンポーネント構成の例として、チェック ボックスとテキスト フィールドの両方を含むクラスで JPanel を拡張できます。これを使用して、独自の入力コンポーネントを最初から作成することなく、新しい動作を提供するカスタム コンポーネントを構築できます。

class CheckableTextField extends JPanel {
    JTextField textField;
    JCheckBox checkBox;

    public CheckableTextField(String label) {
        this.checkBox = new JCheckBox(label);
        this.textField = new JTextField(10);

        this.add(this.checkBox);
        this.add(this.textField);
    }

    public String getValue() {
        return this.textField.getText();
    }

    public isSelected() {
        return this.checkBox.isSelected();
    }
}

その後、個々の JTextField および JCheckBox オブジェクトの代わりに CheckableTextField を使用できます。Java には、まさにあなたが望むことを行うコンポーネントが付属しているかのように動作します。コンストラクター内のレイアウトを変更するなど、さまざまな方法でカスタム コンポーネントをさらにカスタマイズできます。

Swing (GUI アプリの場合) や JSF (Web アプリケーションの場合) などのオブジェクト指向フレームワークを使用して独自のコンポーネントを構築するためにコンポジションを使用することはかなり一般的です。

于 2012-12-08T23:01:35.687 に答える
0

GaragantuChet が述べたように、カスタム コンポーネントを作成するのが最善です。これにより、レイアウトとカスタム フォーカス トラバーサル戦略も容易になります。また、より複雑で動的な画面を簡単に作成できるようにする milayout を確認することをお勧めします。

http://www.miglayout.com/

これが完了すると、列名をキーとして、カスタム コンポーネントをマップに格納する準備が整います。

于 2012-12-09T07:18:51.077 に答える