RMI でテーブルを使用すると、非常に奇妙な問題が発生します。クライアントは、テーブルとして実装したタイムスロット予約システムの実装です。
私は2つの問題に直面しています。最初のものは、変更が行われた後にテーブルを更新させていました。解決策のように見えた
private void cleanUp() {
panel.removeAll();
panel.setVisible(false);
panel.revalidate();
showTable();
}
そして、それは機能しているようです。(または、私の問題を引き起こしているのかもしれませんが、わかりません)
私が今抱えている問題は、実際の予約を呼び出すメソッド内の JTextField を処理することです。
private JTextField txtClientname;
txtClientname = new JTextField();
txtClientname.setText("ClientName");
そして、確認ボタンのリスナーで -
callBookingSlot(buttonAction, txtClientname.getText());
本当に奇妙なことは、これが最初に一度だけ機能することです。機能するとは、JTextField から抽出された正しい値をテーブルに入れることを意味します。最初のラウンドでは、ユーザーがフィールドに入力した値が入力されます。それ以降はすべて、文字列「ClientName」にのみ配置されます
誰にもアイデアはありますか?この問題は RMI 関連ではないようです。RMI なしで試してみましたが、テキスト フィールドから取得した値は同じように動作します。私はおそらくfireTableUpdatedなどを見なければならないことを知っていますが、これが簡単に修正できるものの1つである場合は素晴らしいでしょう.
編集 - 詳細情報
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
public class StackOverFlowGUI {
private static JFrame frame;
private static JTable table;
private static JPanel panel;
private JTextField txtClientname;
private static JFrame bookingPopup = new JFrame();
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
StackOverFlowGUI window = new StackOverFlowGUI();
window.frame.setVisible(true);
}
});
}
public StackOverFlowGUI() {
initialize();
}
private void initialize() {
panel = new JPanel();
frame = new JFrame();
frame.setBounds(100, 100, 700, 751);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
panel.setBounds(10, 11, 674, 576);
frame.getContentPane().add(panel);
showTable();
}
private void showTable() {
table = new JTable();
panel.add(table);
panel.setVisible(true);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setCellSelectionEnabled(true);
showBookingPopup(2, 2);
}
private void showBookingPopup(int row, int col) {
bookingPopup.setBounds(100, 100, 220, 185);
bookingPopup.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
bookingPopup.getContentPane().setLayout(null);
txtClientname = new JTextField();
txtClientname.setText("ClientName");
txtClientname.setBounds(10, 11, 184, 20);
bookingPopup.getContentPane().add(txtClientname);
txtClientname.setColumns(10);
bookingPopup.setVisible(true);
JPanel panel = new JPanel();
panel.setBounds(10, 65, 184, 33);
bookingPopup.getContentPane().add(panel);
JButton btnSubmit = new JButton("Submit");
btnSubmit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//Here - works first time
System.out.println(txtClientname.getText());
//Continues to work if I don't call cleanUp - but then main window will not update
cleanUp();
}
});
btnSubmit.setBounds(10, 113, 89, 23);
bookingPopup.getContentPane().add(btnSubmit);
}
private void cleanUp() {
panel.removeAll();
panel.setVisible(false);
panel.revalidate();
showTable();
}
}