0

私は jFrame ウィッチに右パネルと左パネルの 2 つのパネルが含まれています (両方とも分割パネルの一部です)。

右側のパネルにはカード レイアウトがあります。

p1=new AddPanel();
p2=new DeletePanel();
c2=new CardLayout(); 
right.setLayout(c2);
right.add(p1,"Add");
right.add(p2,"Delete");

左パネルには、2 つのボタン (ADD、DELETE) があります。

left.add(new JButton("Add");
left.add(new JButton("DELETE");

ADD ボタンを押すと、新しいパネル (AddPanel) が LeftPanel に表示されます。

 private void addActionPerformed(java.awt.event.ActionEvent evt) {                                    
   c2.show(right,"Add");

} 

AddPanel にはさまざまなテキストフィールドがあり、値をデータベースに書き込みます。

DELETE ボタンを押すと、LeftPanel に新しいパネル (DeletePanel) が表示されます。

private void deleteActionPerformed(java.awt.event.ActionEvent evt) {                                     
   c2.show(right,"Delete");
}                                    

DeletePanel には、データベースからこれらすべての値を取得するさまざまなテキスト フィールドもあり、3 つのボタンがあります:- 次へ、前へ、削除。

ユーザーは、[次へ]、[前へ] ボタンを使用して mysql レコードを上下に移動したり、[削除] ボタンを押してレコードを削除したりできます。実行時にのみ更新されます。つまり、[削除] ボタンで SELECT ステートメントを再度呼び出すと、削除されたレコードは再び表示されません。 DELETEPanel を呼び出します。これはすべて機能しています。

ADD ボタンを再度クリックし、新しいレコードを送信して、JFRAME の左パネルの DELETE ボタンを押してレコードを表示しようとすると、問題が発生します。

「DELETE」ボタンを押すたびに(jFrameの左パネルから)、データベースから更新された結果を取得するようにDeletePanelが再度作成されるようにするにはどうすればよいですか。

私が直面している問題は、以前に DELETE ボタンが呼び出されたため、以前に DELETE PANEL が作成されたため、OLD STATE を維持しているためです。DELETE PANEL を再初期化する方法。データベースから新しい更新されたレコードを取得できません。アプリケーションを再度再起動した場合にのみ機能します。
助けてください。

4

1 に答える 1

0

最終的に回答が見つかり、ここに回答が投稿されました。回答は、コンポーネント リスナーを使用して、表示されるたびにパネルを再初期化することです.....

public クラス DeletePanel は ComponentListener を実装します

そして、パネル、つまり DELETEPANEL を listnener に追加するには、私の質問で必要です。この行を使用します。

this.addComponentListner(これ); // deletepanel コンストラクター内。

次に、オーバーライドされた Component Shown メソッドを定義して、初期化します。EX-私の場合のselect文のように。

@Override
public void componentShown(ComponentEvent e) {
     try {
        Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/online", "root","");
        st = con.prepareStatement("select question,op1,op2,op3,op4 from java");
        rs = st.executeQuery();
    } catch (ClassNotFoundException | SQLException ex) {
  }
}

これは 100% 動作します

于 2013-07-14T18:49:27.547 に答える