我正在编程一个GUI(银行账户)。一切正常;但面对在JPanel中显示当前余额的问题,它应该在我点击提交按钮时显示余额。我尝试过许多不同的方法,但仍然不成功。
我的信息在JTextArea中正确显示。
但是我不能让它在第三个JGroup(“当前金额”)中显示金额。我在JTextField中输入的金额并单击提交,它应该显示在JGroup(“当前金额”)中。
每当我输入一个人的相同id并单击提交按钮时,金额就会更新。我在构建逻辑方面真的有问题。我已经发布了整个编码。请参阅下面的编码:
//帐户类别
public class Account
{
private String id;
private double balance;
private String name;
private double withdraw;
private double deposit;
public Account(String id, double balance, String name, double withdraw, double deposit)
{
this.id = id;
this.balance = balance;
this.name = name;
this.withdraw = withdraw;
this.deposit = deposit;
}
public Account()
{
}
public void setId(String acID)
{
this.id = acID;
}
public void deposit(double sum)
{
this.balance = this.balance + sum;
}
public void withdraw(double sum)
{
this.balance = this.balance - sum;
}
public String getId()
{
return this.id;
}
public void setBalance(double blnc)
{
this.balance = blnc;
}
public double getBalance()
{
return this.balance;
}
public String getName()
{
return this.name;
}
public void setName(String a)
{
this.name = a;
}
public double getWithdraw()
{
return this.withdraw;
}
public double getDeposit()
{
return this.deposit;
}
public String toString()
{
return " " + getId()
+ " - " + getName()
+ " - " + getBalance();
}
}
//银行类
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.List;
import java.util.ArrayList;
public class Bank implements ActionListener,ItemListener
{
private List<Account> store;
DefaultListModel listModel = new DefaultListModel();
JList list = new JList(listModel);
FlowLayout flow = new FlowLayout();
ButtonGroup group = new ButtonGroup();
JFrame frame = new JFrame("Lexus Bank");
JPanel p = new JPanel();
JPanel p2 = new JPanel();
JPanel p3 = new JPanel();
JPanel p4 = new JPanel();
JRadioButton a = new JRadioButton("Savings");
JRadioButton b = new JRadioButton("Current");
JRadioButton c = new JRadioButton("Deposit");
JRadioButton d = new JRadioButton("Withdraw");
JLabel l1 = new JLabel("A/C No:");
JLabel l2 = new JLabel("A/C Name:");
JTextField accID = new JTextField(10);
JTextField accName = new JTextField(10);
JLabel l3 = new JLabel();
JLabel l4 = new JLabel();
JLabel l5 = new JLabel("Amount: " );
JLabel l6 = new JLabel("Current \n Amount: " );
JLabel currentBal = new JLabel();
JTextField amount = new JTextField(10);
JButton button = new JButton("Submit");
JTextArea area = new JTextArea(10,30);
public Bank()
{
store = new ArrayList<Account>();
//Setting values for JFrame
frame.setSize(800,600);
frame.add(p);
frame.add(p2);
frame.add(p3);
frame.add(p4);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Adding the buttons in group
group.add(a);
group.add(b);
group.add(c);
group.add(d);
//Setting value for panel 1
frame.getContentPane().setLayout(flow);
p.setPreferredSize(new Dimension(100,100));
p.setLayout(new GridLayout(2,1));
p.add(a);
p.add(b);
p.setBorder(BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(),"A/C Type"));
//Setting value for panel 2
p2.setPreferredSize(new Dimension(300,100));
p2.setLayout(new GridLayout(4,3));
p2.add(l1);
p2.add(accID);
p2.add(l2);
p2.add(accName);
p2.setBorder(BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(),"Account Details"));
p2.setVisible(false);
//Setting value for panel 3
p3.setPreferredSize(new Dimension(300,150));
p3.setLayout(new FlowLayout());
p3.add(l3);
p3.add(c);
p3.add(l4);
p3.add(d);
p3.add(l5);
p3.add(amount);
p3.add(button);
p3.setBorder(BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(),"Transaction"));
p3.add(l6);
p3.setVisible(false);
//Setting value for panel 4
p4.setLayout(new GridLayout(1,2));
p4.add(area);
p4.setBorder(BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(),"Transaction History"));
p4.setVisible(false);
//Creating Actions
a.addItemListener(this);
b.addItemListener(this);
c.addActionListener(this);
d.addActionListener(this);
button.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
Object source = e.getSource();
if(source == button)
{
Account amnt = new Account();
amnt.setBalance(Integer.parseInt(amount.getText()));
//currentBal.append(amnt.getBalance());
store.add(amnt);
}
if(e.getSource() == button)
{
if(c.isSelected())
{
Account acnt = new Account();
acnt.setId(accID.getText());
acnt.setName(accName.getText());
acnt.setBalance(Integer.parseInt(amount.getText()));
//store.add(ad);
area.append("\nDP-"+ acnt.toString());
store.add(acnt);
}
if(d.isSelected())
{
Account acnt = new Account();
acnt.setId(accID.getText());
acnt.setName(accName.getText());
acnt.setBalance(Integer.parseInt(amount.getText()));
area.append("\nWD-"+acnt.toString());
store.add(acnt);
}
}
}
public void itemStateChanged(ItemEvent e)
{
Object source = e.getSource();
if(source == a)
{
p2.setVisible(true);
p3.setVisible(true);
p4.setVisible(true);
}
if(source == b)
{
p2.setVisible(true);
p3.setVisible(true);
p4.setVisible(true);
}
}
}
//运行程序的驱动程序类
public class BankTest {
public static void main(String[] args)
{
Bank test = new Bank();
}
}
你有一些工作要做...
我可以给你一些建议:
actionPerform
中,您不应该每次按下按钮时都创建一个新的帐户acnt
。相反,您应该有一个hashmap
(或类似),包括帐户
对象作为值和帐户号
作为查找键。帐户
的全局实例,您就需要使用acnt.setBalance
方法实际执行加法和减法。下面是一个代码示例,它基本上改变了您的代码,使其只适用于一个帐户,但它正确地执行了减法和加法:
Account acnt = new Account();
public void actionPerformed(ActionEvent e)
{
Object source = e.getSource();
if(source == button)
{
}
if(e.getSource() == button)
{
if(c.isSelected())
{
acnt.setId(accID.getText());
acnt.setName(accName.getText());
acnt.setBalance(acnt.getBalance()+Integer.parseInt(amount.getText()));
//store.add(ad);
area.append("\nDP-"+ acnt.toString());
store.add(acnt);
}
if(d.isSelected())
{
acnt.setId(accID.getText());
acnt.setName(accName.getText());
acnt.setBalance(acnt.getBalance()-Integer.parseInt(amount.getText()));
area.append("\nWD-"+acnt.toString());
store.add(acnt);
}
}
}
要实际显示帐户的当前余额,可以使用:
area.append("\nBalance="+acnt.getBalance());
我知道同样的问题已经被问过很多次了,但是我似乎真的没有在我的代码中发现阻碍JPanel类型的对象显示在JFrame中的错误。下面是扩展JFrame的类的构造函数: 当我运行main方法(这里没有显示)时,它只显示框架和按钮。如果有人能在这方面给点提示,我会非常感谢的。
我直接从书上抄了这些例子。代码应该在JFrame上绘制一些东西,但没有显示任何东西(除了JFrame),这里是带有main方法的类 下面是JPanel的一个子类
我有一个带有卡布局组件的JFrame。我正在使用卡布局在应用程序执行的不同时刻在不同的JPanel之间切换。在某些时候,我正在使用摇摆工人对象来生成一些XML文件。在这段时间里,我想在我的窗口中显示另一个JPanel,告诉用户等待。在这个JPanel上,我想在3个标签之间切换。 吉列布尔1会说:“请稍候。 吉拉贝尔2会说:“请稍候..” 吉拉贝尔3会是:“请稍候...” 现在代码如下: Swing
我有一个扩展JFrame的类。它使用以下代码将180个图像加载到数组中 更新:我尝试使用一个JLabel而不是我的ImagePanel类。JLabel似乎也有同样的问题。当我使用JPEG时,它会显示,但当我使用PNG时,它什么也不显示。
问题内容: 我是的新手。在我的应用程序中,我想在或中显示。 谁能帮我吗? 问题答案:
问题内容: 在JPanel上显示jpg图像(从本地文件夹加载)的最合适的图像类型是什么? 干杯。 问题答案: