Java单选按钮

Java单选按钮,java,Java,我的单选按钮有问题。我可以同时点击这三个按钮。应该是当你点击其中一个的时候,另一个关闭了 我使用的是网格布局。所以当我尝试group.add时,它不起作用 例如: 我有这样的按钮声明 JRadioButton seven = new JRadioButton("7 years at 5.35%", false); JRadioButton fifteen = new JRadioButton("15 years at 5.5%", false); JRadioButton thirty = ne

我的单选按钮有问题。我可以同时点击这三个按钮。应该是当你点击其中一个的时候,另一个关闭了

我使用的是网格布局。所以当我尝试group.add时,它不起作用

例如:

我有这样的按钮声明

JRadioButton seven = new JRadioButton("7 years at 5.35%", false);
JRadioButton fifteen = new JRadioButton("15 years at 5.5%", false);
JRadioButton thirty = new JRadioButton("30 years at 5.75%", false);   

 ButtonGroup group = new ButtonGroup();           
 grid.add(seven);
 grid.add(fifteen);
 grid.add(thirty);
这是我的代码:

/*Change Request #6
Write the program in Java (with a graphical user interface) 
so that it will allow the user to select which way 
they want to calculate a mortgage: 
by input of the amount of the mortgage, 
the term of the mortgage, 
and the interest rate of the mortgage payment 
or by input of the amount of a mortgage and 
then select from a menu of mortgage loans:

 - 7 year at 5.35%
 - 15 year at 5.5 %
 - 30 year at 5.75%

In either case, display the mortgage payment amount 
and then, list the loan balance and interest paid 
for each payment over the term of the loan. 
Allow the user to loop back and enter a new amount
and make a new selection, or quit. 
Insert comments in the program to document the program.
 */



import java.text.NumberFormat;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class WK4 extends JFrame implements ActionListener
{

  int loanTerms[] = { 7, 15, 30 };
  double annualRates[] = { 5.35, 5.5, 5.75 };

  // Labels
  JLabel AmountLabel = new JLabel(" Loan Amount $ ");
  JLabel PaymentLabel = new JLabel(" Monthly Payment  ");
  JLabel InterestLabel = new JLabel(" Interest Rate %  ");
  JLabel TermLabel = new JLabel(" Years of Loan  ");

  // Text Fields
  JTextField mortgageAmount = new JTextField(6);
  JTextField Payment = new JTextField(6);
  JTextField InterestRate = new JTextField(3);
  JTextField Term = new JTextField(3);

   // Radio Buttons
   ButtonGroup radioGroup = new ButtonGroup();                             
  JRadioButton seven = new JRadioButton("7 years at 5.35%");
  JRadioButton fifteen = new JRadioButton("15 years at 5.5%");
  JRadioButton thirty = new JRadioButton("30 years at 5.75%");      

  // Buttons
  JButton exitButton = new JButton("Exit");
  JButton resetButton = new JButton("Reset");
  JButton calculateButton = new JButton("Calculate ");

  //  Text Area 
  JTextArea LoanPayments = new JTextArea(20, 50);
  JTextArea GraphArea = new JTextArea(20, 50);
  JScrollPane scroll = new JScrollPane(LoanPayments);

  public WK4(){

     super("Mortgage Calculator");



    //Window

     setSize(700, 400);
     setLocation(200, 150);
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

     JPanel pane = new JPanel(new GridLayout(2, 2));


     Container grid = getContentPane();
     grid.setLayout(new GridLayout(4, 10, 0, 12));  //rows, cols, hgap, vgap

     pane.add(grid);
     pane.add(scroll);

     grid.add(AmountLabel);
     grid.add(mortgageAmount);
     grid.add(InterestLabel);
     grid.add(InterestRate);
     grid.add(TermLabel);
     grid.add(Term);
     grid.add(PaymentLabel);
     grid.add(Payment);

     grid.add(Box.createHorizontalStrut(15));

     ButtonGroup group = new ButtonGroup(); 

     grid.add(seven);
     grid.add(fifteen);
     grid.add(thirty);

     grid.add(calculateButton);
     grid.add(resetButton);
     grid.add(exitButton);

     Payment.setEditable(false);
     setContentPane(pane);
     setContentPane(pane);
     setVisible(true);


     // Action Listeners

     mortgageAmount.addActionListener(this);
     InterestRate.addActionListener(this);
     Term.addActionListener(this);
     Payment.addActionListener(this);


     seven.addActionListener(this);
     fifteen.addActionListener(this);
     thirty.addActionListener(this);

     calculateButton.addActionListener(this);
     exitButton.addActionListener(this);
     resetButton.addActionListener(this);



      }

      public void actionPerformed(ActionEvent e) {

     Object command = e.getSource();

     if (command == exitButton) {
        System.exit(0);
     } 
     else if (command == seven) {
        calcLoan(loanTerms[0], annualRates[0]);
     } 
     else if (command == fifteen) {
        calcLoan(loanTerms[1], annualRates[1]);
     } 
     else if (command == thirty) {
        calcLoan(loanTerms[2], annualRates[2]);
     } 
     else if (command == calculateButton) {
        double years = 0;
        double rates = 0;
        try {
           years = Double.parseDouble(Term.getText());
           rates = Double.parseDouble(InterestRate.getText());
        } 
           catch (Exception ex) {
              LoanPayments.setText("Invalid Amount");
              return;

           }

        calcLoan(years, rates);
     } 
     else if (command == resetButton) {

        mortgageAmount.setText("");
        Payment.setText("");
        InterestRate.setText("");
        Term.setText("");
        LoanPayments.setText("");

     }

    }

    private void calcLoan(double years, double rates) {
     Term.setText(String.valueOf(years));
     InterestRate.setText(String.valueOf(rates));
     double amount = 0;
     try {
        amount = Double.parseDouble(mortgageAmount.getText());

     } 
        catch (Exception ex) {
           LoanPayments.setText("Invalid Amount");
           return;
        }
     double interestRate = rates;


     double intRate = (interestRate / 100) / 12;



     int months = (int) years * 12;


     double rate = (intRate / 12);


     double payment = amount * intRate
        / (1 - (Math.pow(1 / (1 + intRate), months)));


     double remainingPrincipal = amount;


     double MonthlyInterest = 0;


     double MonthlyAmt = 0;


     NumberFormat CurrencyFormatter = NumberFormat.getCurrencyInstance();
     Payment.setText(CurrencyFormatter.format(payment));
     LoanPayments.setText(" Month\tPrincipal\tInterest\tEnding Balance\n");


     int currentMonth = 0;
     while (currentMonth < months) {

        MonthlyInterest = (remainingPrincipal * intRate);


        MonthlyAmt = (payment - MonthlyInterest);


        remainingPrincipal = (remainingPrincipal - MonthlyAmt);


        LoanPayments.append((++currentMonth) + "\t"
           + CurrencyFormatter.format(MonthlyAmt) + "\t"
           + CurrencyFormatter.format(MonthlyInterest) + "\t"
           + CurrencyFormatter.format(remainingPrincipal) + "\n");

        GraphArea.append("" + remainingPrincipal);
      }
    }

  public static void main(String[] args) {
     new WK4();
    }

  }

您正在将单选按钮添加到网格中,但还需要将它们添加到您定义的按钮组中

也许是这样:

 ButtonGroup group = new ButtonGroup();           
 grid.add(seven);
 grid.add(fifteen);
 grid.add(thirty);
应该是这个吗???复制/粘贴错误

 ButtonGroup group = new ButtonGroup();           
 group.add(seven);
 group.add(fifteen);
 group.add(thirty);

或者你需要两者兼而有之。单选按钮必须属于容器和按钮组才能显示和正常工作。

您正在将单选按钮添加到网格中,但还需要将其添加到您定义的按钮组中

也许是这样:

 ButtonGroup group = new ButtonGroup();           
 grid.add(seven);
 grid.add(fifteen);
 grid.add(thirty);
应该是这个吗???复制/粘贴错误

 ButtonGroup group = new ButtonGroup();           
 group.add(seven);
 group.add(fifteen);
 group.add(thirty);

或者你需要两者兼而有之。单选按钮必须属于一个容器以及一个按钮组,才能显示和正常工作。

看起来像你,正在做同样的作业。看起来像你,正在做同样的作业。当我这样做时,它们消失了。当我这样做时,它们消失了