Я работаю над приложением качания и решил решить, что может быть лучшим способом сохранить значения большого количества JTextFields. Приложение считывает файл свойств из некоторого сетевого местоположения. Файл свойств имеет около 10-12 свойств для каждого конкретного пользователя. Например, свойствоA_1 является свойством для пользователя 1 и propertA_2 для пользователя 2. В свойствах будет около 10-12 пользователей, поэтому для отображения значений будет около 80 JTextField. Свойства каждого пользователя будут показаны на JTabbedPane. Теперь я хочу сказать, что когда пользователь меняет значение любого JTextField для любого пользователя, отображаемого в каждой JTabbedPane, и нажимает кнопку «Сохранить», значение свойства должно быть сохранено. Скажите, что может быть лучшим способом обработки большого количества JtextField. Я думаю, что вы делаете это 2 путиЗахват смены текста большого количества JTextFields
- При нажатии кнопки «Сохранить» сохраняйте каждое значение свойства, получая значение из всех JTextFields.
- Определенный способ получить только те JTextFields, для которых текст изменен и сохранить их значения.
Я не уверен, как это сделать по варианту 2. Но я думаю, что это лучший способ.
Вот мой код:
public class IOSAutomationTool1 implements ActionListener {
JButton saveButton = new JButton("Click to Save");
/**
* @param args the command line arguments
*/
public void Test() throws IOException {
File file = new File("C:\\Documents and Settings\\test\\Desktop\\test.properties");
if(file != null){
Properties property = new Properties();
property.load(new FileInputStream(file));
JFrame frame = new JFrame("IOSAutomationToolFourthPage");
frame.setLayout(new FlowLayout());
JPanel framePanel = new JPanel();
JPanel buttonPanel = new JPanel();
framePanel.setSize(700,700);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
String numberOfClients = property.getProperty("numberOfClients");
System.out.println("number of clients: "+numberOfClients);
saveButton.addActionListener(this);
buttonPanel.add(saveButton);
if (!numberOfClients.isEmpty()) {
int numberOfClientNumb = Integer.parseInt(numberOfClients);
System.out.println("numberOfClientNumb ::" + numberOfClientNumb);
JTabbedPane tab = new JTabbedPane();
// JTabbedPane tab2 = new JTabbedPane();
for(int i=1; i<=numberOfClientNumb; i++){
JPanel panel = new JPanel();
panel.setSize(400, 400);
panel.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(1, 1, 1, 1);
gbc.fill = GridBagConstraints.BOTH;
gbc.weightx = 0;
gbc.gridx = 0;
//Remote IP
JLabel remoteIPLbl = new JLabel("Remote IP : ");
panel.add(remoteIPLbl,gbc);
JLabel userNameLbl = new JLabel("User Name : ");
panel.add(userNameLbl,gbc);
JLabel remotePasswordLbl = new JLabel("Remote Password : ");
panel.add(remotePasswordLbl,gbc);
JLabel remotePathLbl = new JLabel("Remote Path : ");
panel.add(remotePathLbl,gbc);
JLabel deviceOrSimulatorLbl = new JLabel("Device or Simulator : ");
panel.add(deviceOrSimulatorLbl,gbc);
gbc.gridx = 1;
gbc.weightx = 1;
String remoteIPVal = property.getProperty("remoteIP_"+i);
JTextField remoteIPField = new JTextField(remoteIPVal);
//remoteIPLbl.setBounds(50, 100, 2, 2);
remoteIPField.setBounds(200, 100, 2, 2);
remoteIPField.setColumns(30);
panel.add(remoteIPField,gbc);
//Remote User Name
String userNameVal = property.getProperty("remoteUserName_"+i);
JTextField userNameField = new JTextField(userNameVal);
// userNameLbl.setBounds(50, 200, 2, 2);
userNameField.setBounds(200, 200, 2, 2);
userNameField.setColumns(20);
panel.add(userNameField,gbc);
//Remote Password
String remotePasswordVal = property.getProperty("remotePassword_"+i);
JTextField remotePasswordField = new JTextField(remotePasswordVal);
// remotePasswordLbl.setBounds(50, 300, 2, 2);
remotePasswordField.setBounds(200, 300, 2, 2);
remotePasswordField.setColumns(20);
panel.add(remotePasswordField,gbc);
//Remote Path
String remotePathVal = property.getProperty("remotePath_"+i);
JTextField remotePathField = new JTextField(remotePathVal);
// remotePathLbl.setBounds(50, 400, 2, 2);
remotePathField.setBounds(200, 400, 2, 2);
remotePathField.setColumns(100);
panel.add(remotePathField,gbc);
//deviceOrSimulator
String deviceOrSimulatorVal = property.getProperty("deviceOrSimulator_"+i);
JTextField deviceOrSimulatorField = new JTextField(deviceOrSimulatorVal);
//deviceOrSimulatorLbl.setBounds(50, 500, 2, 2);
deviceOrSimulatorField.setBounds(200, 500, 2, 2);
deviceOrSimulatorField.setColumns(1);
panel.add(deviceOrSimulatorField,gbc);
tab.add("Client "+i,panel);
System.out.println(""+i);
}
framePanel.add(tab);
frame.add(framePanel);
// frame.setLayout(new Lay);
}
//frame.add(saveButton);
frame.add(buttonPanel);
frame.setSize(800, 800);
frame.pack();
frame.setVisible(true);
}
}
@Override
public void actionPerformed(ActionEvent e) {
//throw new UnsupportedOperationException("Not supported yet.");
if(e.getSource() == saveButton){
System.out.print("button clicked...........");
}
}
public static void main(String[] args) throws IOException{
IOSAutomationTool1 obj = new IOSAutomationTool1();
obj.Test();
}
}
Я не уверен, что нашел ответ, хотя, как вы описали свою ситуацию, вы тоже ответили на него. Когда вы читаете из файла свойств, я думаю, вы делаете это с помощью ключа, чтобы получить значение, связанное с этим ключом, поэтому почему вы не можете просто применить это как ВАРИАНТ 2, установите этот ключ как имя ' JTextField' и просто обновите значение этого ключа нажатием кнопки. –
Как вы можете это кодировать? Как узнать, изменяется ли значение JTextField при нажатии кнопки Jbutton (событие нажатия кнопки). Поскольку я хочу обновлять только те значения, которые были изменены, остальное останется таким, каким оно есть. –
Существует еще один подход, который вы можете посмотреть, чтобы класс сказал 'USER', теперь, когда вы извлекаете значения из' DATABASE', помещаете их внутри этого класса, теперь, когда вы нажимаете кнопку «Сохранить», создайте другой объект этого класса скажем, 'updatedUser' и скопировать текущие значения' JTextField' в этот новый экземпляр, теперь сравните два значения, измените только измененные, оставите остальные. AFAIK, вычислительные значения в соответствующей системе намного быстрее, а затем обновляют всю базу данных за одну модификацию. –