- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在编写一个显示组合框的 Java 程序,该组合框从属性文件中获取信息。有一个设置类允许用户更新组合框中字段的名称。我的问题是当调用和修改设置类时,我无法弄清楚如何使用新设置更新组合框。我有一种方法可以重新绘制整个面板并重新加载组合框。但是我不知道如何在设置类中按下“应用”按钮时激活该方法。
这是我正在努力完成的一个粗略而艰难的例子。
主类:
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();
}
}
和设置类:
package testing;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
import javax.swing.*;
public class settings
{
Properties config;
final String configFile = "config.properties";
JFrame setFrame = new JFrame("Settings");
JLabel opt1 = new JLabel("Option 1");
JLabel opt2 = new JLabel("Option 2");
JLabel opt3 = new JLabel("Option 3");
JTextField text1 = new JTextField(15);
JTextField text2 = new JTextField(15);
JTextField text3 = new JTextField(15);
JButton apply = new JButton("Apply");
public settings(Properties p)
{
config = p;
setFrame.setSize(275, 200);
setFrame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
setFrame.setLayout(new FlowLayout());
buildSetFrame();
}
public void buildSetFrame()
{
text1.setText(config.getProperty("option.0.name"));
text2.setText(config.getProperty("option.1.name"));
text3.setText(config.getProperty("option.2.name"));
apply.addActionListener(new applyListener());
setFrame.add(opt1);
setFrame.add(text1);
setFrame.add(opt2);
setFrame.add(text2);
setFrame.add(opt3);
setFrame.add(text3);
setFrame.add(apply);
setFrame.setVisible(true);
}
private class applyListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
config.setProperty("option.0.name", text1.getText());
config.setProperty("option.1.name", text2.getText());
config.setProperty("option.2.name", text3.getText());
FileOutputStream fos = null;
try
{
fos = new FileOutputStream(configFile);
config.store(fos, null);
}
catch (IOException f)
{
System.out.println("Error");
}
finally
{
if (fos != null)
{
try
{
fos.close();
}
catch (IOException g)
{
System.out.println("Problem");
}
}
}
setFrame.setVisible(false);
// This is where I need to pass something back to the
// testConfigLoad class to tell it to
// run the refPanel method in the OptPanel class.
}
}
}
配置文件名为 config.properties,如下所示:
option.2.name=two
option.1.name=one
option.0.name=zero
最佳答案
一种方法是在 OptPanel
和 settings
类之间使用回调。您可以提取将元素添加到属性 JComboBox
到它自己的方法中的功能:
public void updateProperties(Properties p) {
model.removeAllElements();
for (String s: p.stringPropertyNames()) {
model.addElement(p.getProperty(s));
}
}
其中 model
是一个 DefaultComboBoxModel
。然后你可以简单地调用
optPanel.updateProperties(config);
成功存储属性后。
一些要点:
JFrames
。一种选择是将单个 JFrame
与模态对话框一起使用。看这个discussion .settings
将变为 Settings
关于java - 我如何知道另一个类何时更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14553304/
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 9年前关闭。 Improve this que
我有一堆 php 脚本计划在 CentOS 机器上的 cron 中每隔几分钟运行一次。我希望每个脚本在启动时自我检查它的前一个实例是否仍在运行,如果是则停止。 最佳答案 我这样做是为了管理任务并确保它
是否有 bash 命令、程序或 libusb 函数(尽管我没有找到)来指示 USB 设备的 OUT 或 IN 端点是什么? 例如,libusb_interface_descriptor(来自 libu
我如何知道 NSTextField 何时成为第一响应者(即当用户单击它来激活它时,但在他们开始输入之前)。我尝试了 controlTextDidBeginEditing 但直到用户键入第一个字符后才会
我怎么知道我的代码何时完成循环?完成后我还得再运行一些代码,但只有当我在那里写的所有东西都完成后它才能运行。 obj.data.forEach(function(collection) {
我正在使用音频标签,我希望它能计算播放了多少次。 我的代码是这样的: ; ; ; 然后在一个javascript文件中 Var n=0; function doing(onplaying)
我正在尝试向 Package-Explorer 的项目上下文菜单添加一个子菜单。但是,我找不到该菜单的 menuid。 所以我的问题是如何在 eclipse 中找到 menuid? 非常感谢您的帮助。
我有一个名为“下一步”的按钮,它存在于几个 asp.net 页面中。实际上它是在用户控件中。单击“下一步”时,它会调用 JavaScript 中的函数 CheckServicesAndStates。我
我正在尝试在 Visual Studio 中使用 C++ 以纳秒为单位计算耗时。我做了一些测试,结果总是以 00 结尾。这是否意味着我的处理器(Ryzen 7-1800X)不支持 ~1 纳秒的分辨率,
我有一个自定义 ListView ,其中包含一些元素和一个复选框。当我点击一个按钮时。我想知道已检查的元素的位置。下面是我的代码 public class Results extends ListAc
如何在使用 J2ME 编写的应用程序中获取网络运营商名称? 我最近正在尝试在 Nokia s40 上开发一个应用程序,它应该具有对特定网络运营商的独占访问权限。有没有这样的API或库? 最佳答案 没有
我使用服务器客户端组件,当在此组件的 TransferFile 事件中接收文件时,我使用警报消息组件。所以我希望,如果用户单击警报消息,程序将继续执行 TransferFile 事件中的代码,以在单击
如果我创建一个类A具有一些属性,例如 a, b, c我创建对象 A x1; A x2; A x3; ... A xN 。有没有办法在同一个类中创建一个方法来检索我创建的所有对象?我想创建类似 stat
我正在制作一个应用程序,其中包含相同布局的 81 个按钮。它们都被称为我创建的名为“Tile”的对象。问题是这些图 block 存储在数组中,因此我需要知道以 int 格式单击了哪个按钮才能调用图 b
UIProgressView有这个setProgress:animated: API。 有没有办法确切知道动画何时停止? 我的意思是这样的? [myProgress setProgress:0.8f
我正在使用两个 jQuery 队列,我希望其中一个队列在另一个队列完成后出队。我怎么知道第一个是否完成?我应该使用第三个队列吗?! 这是我所拥有的: var $q = $({}); $q.que
jQuery 中有没有一种方法可以知道是否至少有一个复选框已被选中? 我有一个包含很多复选框的表单,每个复选框都不同。 我需要一种 jQuery 的方式来表达这样的内容,这就是逻辑: If at le
给定 2 个选择 100 50 100 在这两种情况下,我都想在 .example 中获取数字,使用相同的选择器或者以某种方式知道 .no-text 和 之间的区别。带文字 执行
我在我的应用程序中使用 System.ComponentModel.BindingList 作为 DataGridView.DataSource。该列表非常大,需要几秒钟才能绘制到 DataGridV
我想知道用户在 Android 中选择的默认键盘。我知道我可以使用 InputMethodManager 访问已启用的输入法列表,但我想知道用户当前使用的是哪一个。 到目前为止,我已经尝试获取当前的输
我是一名优秀的程序员,十分优秀!