如何在JLabel和Jext框中显示数据java swing从属性文件动态运行,而不知道属性文件中的数据

如何在JLabel和Jext框中显示数据java swing从属性文件动态运行,而不知道属性文件中的数据,java,swing,properties,core,Java,Swing,Properties,Core,我正在开发一个JavaSwing模块,我想将数据返回到JavaSwing文本框和标签中 文本框和JLabel应根据数据检索动态变化,我不知道属性名称及其值……但我必须从属性文件中检索数据,而不知道属性名称及其值进入JLabel和jtextboxs …它们应该根据数据的不同而有所不同…例如属性名称应该进入Jlabel,它的值应该进入jtextboxs 我使用了收集框架的set接口,所以我将属性文件中的所有数据都输入到它的key和key的值中…但我不知道如何在Jlabel和JTextBoxs中显示它

我正在开发一个JavaSwing模块,我想将数据返回到JavaSwing文本框和标签中

文本框和
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());
}