Java 我如何判断另一个类何时已更新?
我正在编写一个Java程序,它显示一个组合框,从属性文件中获取信息。有一个设置类,允许用户更新组合框中字段的名称。我的问题是,当调用和修改settings类时,我不知道如何用新设置更新组合框。我有一个方法,可以重新绘制整个面板并重新加载组合框。但我不知道在设置类中按下“应用”按钮时如何激活该方法 这是一个粗略而艰难的例子,说明了我正在努力实现的目标 主要类别:Java 我如何判断另一个类何时已更新?,java,swing,actionlistener,Java,Swing,Actionlistener,我正在编写一个Java程序,它显示一个组合框,从属性文件中获取信息。有一个设置类,允许用户更新组合框中字段的名称。我的问题是,当调用和修改settings类时,我不知道如何用新设置更新组合框。我有一个方法,可以重新绘制整个面板并重新加载组合框。但我不知道在设置类中按下“应用”按钮时如何激活该方法 这是一个粗略而艰难的例子,说明了我正在努力实现的目标 主要类别: package testing; import java.awt.*; import java.awt.event.*; import
package testing;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.Properties;
import javax.swing.*;
public class testConfigLoad extends JFrame
{
JButton apply = new JButton("Apply");
JButton set = new JButton("Settings");
Properties config = new Properties();
FileInputStream fis = null;
FileOutputStream fos = null;
final String configFile = "config.properties";
OptPanel opt;
public testConfigLoad() throws IOException
{
super("Test Program");
setSize(200, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout());
config();
opt = new OptPanel(config);
buildFrame();
}
public void buildFrame()
{
set.addActionListener(new setListener());
add(opt);
add(apply);
add(set);
setVisible(true);
}
public void config() throws IOException
{
try
{
fis = new FileInputStream(configFile);
config.load(fis);
}
catch (FileNotFoundException e)
{
System.out.println("File not found");
}
finally
{
if (fis != null)
{
fis.close();
}
}
}
private class setListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
settings set = new settings(config);
}
}
public static void main(String[] args) throws IOException
{
new testConfigLoad();
}
}
需要刷新的面板:
package testing;
import java.util.Properties;
import javax.swing.*;
public class OptPanel extends JPanel
{
String[] opts;
JLabel optLabel = new JLabel("Available Options");
Properties config;
public OptPanel(Properties p)
{
config = p;
opts = new String[3];
buildPanel();
}
public void buildPanel()
{
for (int i = 0; i < opts.length; i++)
{
opts[i] = config.getProperty("option." + i + ".name");
}
JComboBox optBox = new JComboBox(opts);
add(optLabel);
add(optBox);
}
public void refPanel()
{
removeAll();
this.buildPanel();
((JPanel) this).revalidate();
repaint();
}
}
配置文件名为config.properties,如下所示:
option.2.name=two
option.1.name=one
option.0.name=zero
一种方法是在
OptPanel
和设置
类之间使用回调。您可以提取出功能,将元素添加到属性JComboBox
到其自己的方法中:
public void updateProperties(Properties p) {
model.removeAllElements();
for (String s: p.stringPropertyNames()) {
model.addElement(p.getProperty(s));
}
}
其中,model
是一个defaultcomboxmodel
。然后你就可以打电话了
optPanel.updateProperties(config);
在成功存储属性之后
有几点:
- 首选方法是不使用多个
。一个选项是使用带有模式对话框的单个JFrames
。看这个JFrame
- 不要扩展JFrame,而是直接使用实例
- Java表示类名以大写字母开头,因此
将变成settings
settings
optPanel.updateProperties(config);