我在使用帶有RMI的表時遇到了一個很奇怪的問題。 客戶端是一個時隙預訂系統的實現,我已經將 實現爲一個表。JTextField和RMI的GUI問題Java
我面臨兩個問題。 第一個在更改完成後導致表更新。 溶液似乎
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等,我是,但它會是 偉大的,如果這是那些容易修復之一。
編輯 - 更多信息
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();
}
}
你應該看發佈的SSCCE。 – camickr 2013-04-05 02:58:57
你能否提供顯示問題的[SSCCE](http://sscce.org/)(最好沒有RMI) – MadProgrammer 2013-04-05 02:59:00
我同意 - 我認爲我們需要看到更多代碼才能更好地理解發生了什麼事情。我懷疑是線程問題,也可能是一個參考問題。 – 2013-04-05 02:59:27