GUI保存功能,以便在GUI关闭时,重新打开时,它具有相同的数据可见。现在GUI工作正常,逻辑段未完成,但这不会影响手头的问题。谢谢小伙子们。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.NumberFormat;
import java.lang.Math;
public class abdul {
public static void main(String[] args) {
JFrame frame = new FutureValueFrame();
frame.setVisible(true); } }
class FutureValueFrame extends JFrame {
public FutureValueFrame() {
setTitle("Loan Calculator");
setSize(300, 300);
centerWindow(this);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new FutureValuePanel();
this.add(panel); }
private void centerWindow(Window w) {
Toolkit tk = Toolkit.getDefaultToolkit();
Dimension d = tk.getScreenSize();
setLocation((d.width-w.getWidth())/2, (d.height-w.getHeight())/2); } }
class FutureValuePanel extends JPanel implements ActionListener {
private JTextField paymentText, rateText, yearsText, loanText;
private JLabel paymentLabel, rateLabel, yearsLabel, loanLabel;
private JButton calculateButton, exitButton, paymentButton, loanButton;
public FutureValuePanel() { // display panel
JPanel displayPanel = new JPanel();
displayPanel.setLayout( new FlowLayout(FlowLayout.RIGHT));
loanLabel = new JLabel("Loan Amount:");
displayPanel.add(loanLabel);
//hello
loanText = new JTextField(10);
displayPanel.add(loanText);
//////
///////
rateLabel = new JLabel("Yearly Interest Rate:");
displayPanel.add(rateLabel);
rateText = new JTextField(10);
displayPanel.add(rateText);
////////
yearsLabel = new JLabel("Number of Years:");
displayPanel.add(yearsLabel);
yearsText = new JTextField(10);
displayPanel.add(yearsText);
////////
paymentLabel = new JLabel("Monthly Payment:");
displayPanel.add(paymentLabel);
//hello
paymentText = new JTextField(10);
displayPanel.add(paymentText);
// button panel
JPanel buttonPanel = new JPanel();
JPanel alphaPanel = new JPanel();
;
buttonPanel.setLayout( new FlowLayout(FlowLayout.RIGHT));
alphaPanel.setLayout( new FlowLayout(FlowLayout.RIGHT));
// calculate button
calculateButton = new JButton("Calculate");
calculateButton.addActionListener(this);
buttonPanel.add(calculateButton);
paymentButton = new JButton("Monthly Payment");
paymentButton.addActionListener(this);
alphaPanel.add(paymentButton);
loanButton = new JButton("Loan Amount");
loanButton.addActionListener(this);
alphaPanel.add(loanButton);
// exit button
exitButton = new JButton("Exit");
exitButton.addActionListener(this);
buttonPanel.add(exitButton);
// add panels to main panel
this.setLayout(new BorderLayout());
this.add(displayPanel, BorderLayout.CENTER);
this.add(buttonPanel, BorderLayout.SOUTH);
this.add(alphaPanel, BorderLayout.NORTH);
}
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if(source == exitButton) {
System.exit(0);}
if (source == paymentButton){
paymentText.setEditable(false);
paymentText.setFocusable(false);
paymentText.setText(null);
loanText.setEditable(true);
loanText.setFocusable(true);
}
if (source == loanButton){
loanText.setEditable(false);
loanText.setFocusable(false);
loanText.setText(null);
paymentText.setEditable(true);
paymentText.setFocusable(true);
}
if (source == calculateButton){
NumberFormat currency = NumberFormat.getCurrencyInstance();
// paymentText.setText(currency.format(Double.parseDouble(loanText.getText())));
if()
String the = currency.format(Double.parseDouble(loanText.getText()));
paymentText.setText(the);
}
}
}
答案 0 :(得分:1)
您需要将WindowListener
附加到FutureValueFrame
并监控windowClosing
事件。
发生这种情况时,您需要编写要保留的设置。
加载应用程序后,您只需阅读这些设置并将其应用到您的应用程序
查看How to write Window Listeners了解详情
至于实际存储,你有很多选择...
您可以使用具有Properties
和save
功能的load
API,但它基于简单的键/值对API。
您还可以使用Preferences
API,它具有更多功能(存储基元),但您无法控制数据的存储位置(或多或少)
选择将取决于您想要实现的目标以及您想要的工作量
答案 1 :(得分:0)
当我制作一个简单的java代码(文本)编辑器时,我尝试过这个。 我想存储首选项,以便突出显示的单词在所有会话中都具有用户选择的颜色等。
我使用了Window Listener(我上面的答案解释得相当不错)并使首选项成为xml-ish形式,如:
<preferences>
<fontcolor = "blue">
<fontsize = "11">
...
</preferences>
所以你可以做的是(在窗口监听器代码中)格式化你想要存储的数据:
<LastState>
<textfield1 = "textfield_1 value at last exit">
<radioButtonGroup1 = "2">
...
</LastState>
并使用标准IO库(流)将它们保存在文件中(例如“lastSession.dat”或“lastSession.xml” - 如果您希望它可由文本编辑器修改)
您可以使用此功能之类的东西来帮助您
String xmlForm(String tag, String data){
return "<\"+tag = \""+data+"\">";
}
在tag参数中,您可以传递一个小部件字符串名称,在“数据”中,显然是它的当前状态。
然后,每次你的程序启动时,你必须做一些读取该文件的例程(如果这样的文件存在)并将值设置回小部件。 (某种xml解析器)。
此方法绝对稳定,可以完全控制文件的位置(提高可移植性)和文件格式(您可以选择文件包含的内容以及如何将其转换回小部件值 - 您可以使用任何你想要的格式)。 最后,它是完全可重用的,因为xml是一个非常标准且非常适合代码的文本格式!您可以在具有类似需求的其他项目中附加此(几乎未触及的)代码!
希望我帮助!!!