如何在JLabel和Jext框中显示数据java swing从属性文件动态运行,而不知道属性文件中的数据
我正在开发一个JavaSwing模块,我想将数据返回到JavaSwing文本框和标签中 文本框和如何在JLabel和Jext框中显示数据java swing从属性文件动态运行,而不知道属性文件中的数据,java,swing,properties,core,Java,Swing,Properties,Core,我正在开发一个JavaSwing模块,我想将数据返回到JavaSwing文本框和标签中 文本框和JLabel应根据数据检索动态变化,我不知道属性名称及其值……但我必须从属性文件中检索数据,而不知道属性名称及其值进入JLabel和jtextboxs …它们应该根据数据的不同而有所不同…例如属性名称应该进入Jlabel,它的值应该进入jtextboxs 我使用了收集框架的set接口,所以我将属性文件中的所有数据都输入到它的key和key的值中…但我不知道如何在Jlabel和JTextBoxs中显示它
JLabel
应根据数据检索动态变化,我不知道属性名称及其值……但我必须从属性文件中检索数据,而不知道属性名称及其值进入JLabel
和jtextboxs
…它们应该根据数据的不同而有所不同…例如属性名称应该进入Jlabel
,它的值应该进入jtextboxs
我使用了收集框架的set接口,所以我将属性文件中的所有数据都输入到它的key和key的值中…但我不知道如何在Jlabel
和JTextBox
s中显示它
public class ConfigSwingDemo extends JFrame
{
private File configFile = new File("momark.properties");
private Properties configProps;
private JButton buttonSave = new JButton("Save");
static List<JLabel> listOfLabels = new ArrayList<JLabel>();
static List<JTextField> listOfTextFields = new ArrayList<JTextField>();
public ConfigSwingDemo()
{
super("Properties Configuration Demo");
setLayout(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints();
constraints.gridx = 0;
constraints.gridy = 0;
constraints.insets = new Insets(10, 10, 5, 10);
constraints.anchor = GridBagConstraints.WEST;
constraints.gridy = 1;
constraints.gridx = 0;
constraints.gridwidth = 2;
constraints.anchor = GridBagConstraints.CENTER;
add(buttonSave, constraints);
buttonSave.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
try {
saveProperties();
JOptionPane.showMessageDialog(ConfigSwingDemo.this,
"Properties were saved successfully!");
} catch (IOException ex) {
JOptionPane.showMessageDialog(ConfigSwingDemo.this,
"Error saving properties file: " + ex.getMessage());
}
}
});
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
try {
loadProperties();
} catch (IOException ex) {
JOptionPane.showMessageDialog(this, "The momark.properties file does not exist, default properties loaded.");
}
Set<Object> keys = configProps.keySet();
for(Object k:keys){
String key = (String)k;
System.out.println(key+": "+configProps.getProperty(key));
}
}
/////////////////
private void loadProperties() throws IOException {
Properties defaultProps = new Properties();
// sets default properties
configProps = new Properties(defaultProps);
// loads properties from file
InputStream inputStream = new FileInputStream(configFile);
configProps.load(inputStream);
inputStream.close();
}
private void saveProperties() throws IOException {
//configProps.setProperty("server.url", textUrl.getText());
OutputStream outputStream = new FileOutputStream(configFile);
configProps.store(outputStream, "properties setttings");
outputStream.close();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new ConfigSwingDemo();
}
});
}
}
我想在Jlabel和Jtext字段中动态显示输出,而不知道属性数据。因此,如果属性增加,Jlabel和textbox也会根据属性增加*/好的,那么您有一个键/值对的属性,假设键代表标签和文本的值,您可以使用propertyNames获取枚举并遍历列表。。。这将允许您创建标签/字段
GridBagConstraints constraints = new GridBagConstraints();
constraints.gridx = 0;
constraints.gridy = 0;
constraints.insets = new Insets(10, 10, 5, 10);
constraints.anchor = GridBagConstraints.WEST;
Set<Object> keys = configProps.keySet();
for (Object k : keys) {
JLabel label = new JLabel(k.toString());
JTextField field = new JTextField(configProps.getProperty(k.toString()), 10);
constraints.gridx = 0;
add(label, constraints);
constraints.gridx++;
add(field, constraints);
constraints.gridy++;
}
constraints.gridx = 0;
constraints.gridwidth = 2;
constraints.anchor = GridBagConstraints.CENTER;
add(buttonSave, constraints);
将值复制回属性
并保存
说到这里,我建议您使用JTable
,因为您已经有了一个基本模型(在属性中有键/值对),它会简单得多
有关更多详细信息,请参见好的,因此您在键/值对中有一个Properties
,假设键代表标签和文本的值,您可以使用propertyNames
获取枚举
并在列表上迭代。。。这将允许您创建标签/字段。但是您可能需要另一个Map
来将键/标签映射到字段……先生,您可以为此编写代码吗,因为我不知道如何在我的代码中使用这些……您知道如何创建和JLabel
和JTextField
?很明显,你知道如何使用GridBagLayout
,你打开了保存按钮…我知道,但静态而非动态我正在互联网上搜索,但我没有得到正确的答案。。。。但如果我使用循环来创建Llables和jTextField,那么仍然会有问题,那么我不能在循环中使用键和值有什么区别?创建一个实例,然后将其添加到容器中。问题在于维护键值和字段之间的链接,这可以通过某种类型的映射来实现
GridBagConstraints constraints = new GridBagConstraints();
constraints.gridx = 0;
constraints.gridy = 0;
constraints.insets = new Insets(10, 10, 5, 10);
constraints.anchor = GridBagConstraints.WEST;
Set<Object> keys = configProps.keySet();
for (Object k : keys) {
JLabel label = new JLabel(k.toString());
JTextField field = new JTextField(configProps.getProperty(k.toString()), 10);
constraints.gridx = 0;
add(label, constraints);
constraints.gridx++;
add(field, constraints);
constraints.gridy++;
}
constraints.gridx = 0;
constraints.gridwidth = 2;
constraints.anchor = GridBagConstraints.CENTER;
add(buttonSave, constraints);
public class ConfigSwingDemo extends JFrame {
private Map<String, JTextField> fieldsMap = new HashMap<>(25);
//...
for (Object k : keys) {
JLabel label = new JLabel(k.toString());
JTextField field = new JTextField(configProps.getProperty(k.toString()), 10);
fieldsMap.put(k.toString(), field);
configProps.clear();
for (String key : fieldsMap.keySet()) {
JTextField field = fieldsMap.get(key);
configProps.setProperty(key, field.getText());
}