【发布时间】:2020-07-27 14:00:20
【问题描述】:
我对这个级别的编程相当陌生,我想知道是否有人可以帮助我。
所以我正在尝试使用 Java 创建一个货币兑换应用程序,但我在更新 GUI 上的值以反映 API 上的新值时遇到了问题。本质上,这些值经常更改并显示在控制台上,但是,GUI 值永远不会更新并保持不变。
我认为 ActionListener 可以帮助解决这个问题,但要么我没有正确实施它,要么我没有用谷歌搜索并正确提出解决方案。
提前感谢您的帮助:)
这是我的代码: GUI.java
public class GUI extends JFrame {
static Arb arb = new Arb();
private JPanel contentPane;
public static void main(String[] args) throws IOException, InterruptedException {
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
try {
arb.runUpdate_fx("anAPI");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
Timer timer = new Timer(100 ,taskPerformer);
timer.setRepeats(true);
timer.start();
Thread.sleep(5000);
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
GUI frame = new GUI();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public GUI() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 1121, 765);
contentPane = new JPanel();
contentPane.setBackground(Color.BLACK);
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JTextPane FXRate = new JTextPane();
FXRate.setForeground(new Color(255, 255, 255));
FXRate.setBackground(new Color(0, 0, 0));
FXRate.setEditable(false);
FXRate.setFont(new Font("Tahoma", Font.BOLD, 11));
panel_1.setLayout(new FlowLayout(FlowLayout.LEADING, 5, 5));
FXRate.setText("FX Rates\r\n\r\nEUR-AUD FX Rate: " + arb.fxEURAUD + "\r\nEUR-USD FX Rate: " + arb.fxEURUSD);
panel_1.add(FXRate);
}
}
结果: 欧元兑澳元:1.646659 一段时间后 欧元兑澳元:1.646659
预期结果: 欧元兑澳元:1.646659 一段时间后 欧元兑澳元:1.80102
【问题讨论】:
-
嗯,你永远在任何地方更新你的用户界面。您需要调用 FXrate.setText("My new string");在其上设置新文本。在设置初始字符串之后,你永远不会这样做。
-
Dwarsaw,我冒昧地编辑了您在请求中包含的 data.fixer.io API 密钥。这很可能是偶然的,但您应该非常小心,切勿将任何 API 密钥发布到任何公共场所的任何服务。这包括在 Github 源代码和 Stack Overflow 问题中。公开此类 APÏ 密钥可能会让其他人以您的名义提出请求,并可能会花费您大量的服务成本。
-
@Nzall Gotcha,我刚刚注册了一个免费帐户,并没有真正为它费心,但谢谢,以后不会再使用它了。
-
@Dwarsaw 否。更新变量的内容根本不会更新面板上的文本。你真的需要打电话给
JTextPane.SetText("my New String");设置另一个文本。引用是按值传递的,而不是作为指针传递的。 -
@Dwarsaw 你可能想看看codereview.stackexchange.com