2011-07-18 2 views
1

У меня возникло много проблем с этим приложением. Я был весь этот день и не могу понять это. У меня есть приложение Java, предназначенное для класса. Проблема, с которой я столкнулась, заключается в том, чтобы получить JRadioButtons, назначенный переменным в массиве, а затем передать их в формулу. Если бы кто-то мог помочь, я был бы очень благодарен.plMortgage Calculator GUI Issue with A Lot

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

import javax.swing.*; 
import javax.swing.border.*; 
import javax.swing.JRadioButton; 

public class MortgageCalculatorGUI8 extends JFrame { 

    JPanel panel1 = new JPanel(); 

    double Principal; 
    double [] Interest = {5.35, 5.5, 5.75}; 
    double temp_Interest; 
    int [] Length = {7, 15, 30}; 
    int temp_Length; 
    boolean ok = false; 


    public MortgageCalculatorGUI8(){ 

     getContentPane().setLayout (null); 
     setSize (400,400); 

     panel1.setLayout (null); 
     panel1.setBounds (0, 0, 2000, 800); 
     add (panel1); 

     JLabel mortgageLabel = new JLabel("Mortgage Amount $", JLabel.LEFT); 
     mortgageLabel.setBounds (15, 15, 150, 30); 
     panel1.add (mortgageLabel); 

     final JTextField mortgageText = new JTextField(10); 
     mortgageText.setBounds (130, 15, 150, 30); 
     panel1.add (mortgageText); 

     JLabel termLabel = new JLabel("Mortgage Term (Years)", JLabel.LEFT); 
     termLabel.setBounds (340, 40, 150, 30); 
     panel1.add (termLabel); 

     JTextField termText = new JTextField(3); 
     termText.setBounds (340, 70, 150, 30); 
     panel1.add (termText); 

     JLabel intRateLabel = new JLabel("Interest Rate (%)", JLabel.LEFT); 
     intRateLabel.setBounds (340, 94, 150, 30); 
     panel1.add (intRateLabel); 

     JTextField intRateText = new JTextField(5); 
     intRateText.setBounds (340, 120, 150, 30); 
     panel1.add (intRateText); 

     JLabel mPaymentLabel = new JLabel("Monthly Payment $", JLabel.LEFT); 
     mPaymentLabel.setBounds (550, 40, 150, 30); 
     panel1.add (mPaymentLabel); 

     JTextField mPaymentText = new JTextField(10); 
     mPaymentText.setBounds (550, 70, 150, 30); 
     panel1.add (mPaymentText); 

//  JLabel paymentLabel = new JLabel ("Payment #"); 
//  JLabel balLabel = new JLabel (" Balance"); 
//  JLabel ytdPrincLabel = new JLabel (" Principal"); 
//  JLabel ytdIntLabel = new JLabel (" Interest"); 

     JTextArea textArea = new JTextArea(10, 31); 
     textArea.setBounds (550, 100, 150, 30); 
     panel1.add (textArea); 
     JScrollPane scroll = new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
     scroll.setBounds (450, 200, 300, 150); 
     panel1.add (scroll); 


    public void rbuttons(){ 

     JLabel tYears = new JLabel("Years of Loan Amount"); 
     tYears.setBounds (30, 35, 150, 30); 
     panel1.add (tYears); 
     JRadioButton b7Yr = new JRadioButton("7 Years",false); 
     b7Yr.setBounds (30, 58, 150, 30); 
     panel1.add (b7Yr); 
     JRadioButton b15Yr = new JRadioButton("15 Years",false); 
     b15Yr.setBounds (30, 80, 150, 30); 
     panel1.add (b15Yr); 
     JRadioButton b30Yr = new JRadioButton("30 Years",false); 
     b30Yr.setBounds (30, 101, 150, 30); 
     panel1.add (b30Yr); 


     JLabel tInterest = new JLabel("Interest Rate Of the Loan"); 
     tInterest.setBounds (175, 35, 150, 30); 
     panel1.add(tInterest); 
     JRadioButton b535Int = new JRadioButton("5.35% Interest",false); 
     b535Int.setBounds (178, 58, 150, 30); 
     panel1.add (b535Int); 
     JRadioButton b55Int = new JRadioButton("5.5% Interest",false); 
     b55Int.setBounds (178, 80, 150, 30); 
     panel1.add (b55Int); 
     JRadioButton b575Int = new JRadioButton("5.75% Interest",false); 
     b575Int.setBounds (178, 101, 150, 30); 
     panel1.add (b575Int); 
    } 

     JButton calculateButton = new JButton("CALCULATE"); 
     calculateButton.setBounds (30, 400, 120, 30); 
     panel1.add (calculateButton); 

     calculateButton.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent e) 
      { 


        if(e.getSource() == b7Yr){ 
         b7Yr = Length[0]; 
        } 
        if(e.getSource() == b15Yr){ 
         b15Yr = Length[1]; 
        } 
        if(e.getSource() == b30Yr){ 
         b30Yr = Length[2]; 
        } 
        if(e.getSource() == b535Int){ 
         b535Int = Interest[0]; 
        } 
        if(e.getSource() == b55Int){ 
         b55Int = Interest[1]; 
        } 
        if(e.getSource() == b575Int){ 
         b575Int = Interest[2]; 
        } 


       double Principal; 
//    double [] Interest; 
//    int [] Length; 
       double M_Interest = Interest /(12*100); 
       double Months = Length * 12; 

       Principal = Double.parseDouble (mortgageText.getText()); 

       double M_Payment = Principal * (M_Interest/(1 - (Math.pow((1 + M_Interest), - Months)))); 

       NumberFormat Money = NumberFormat.getCurrencyInstance(); 



      } 
      }); 




     JButton clearButton = new JButton("CLEAR"); 
     clearButton.setBounds (160, 400, 120, 30); 
     panel1.add (clearButton); 

     clearButton.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent e) 
      { 
       mortgageText.setText (null); 
       b7Yr.setSelected (false); 
       b15Yr.setSelected (false); 
       b30Yr.setSelected (false); 
       b535Int.setSelected (false); 
       b55Int.setSelected (false); 
       b575Int.setSelected (false); 
      } 
      }); 


     JButton exitButton = new JButton("EXIT"); 
     exitButton.setBounds (290, 400, 120, 30); 
     panel1.add (exitButton); 

     exitButton.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent e) 
      { 
       System.exit(0); 
      } 
      }); 


    } 

    public static void main(String[] args) { 

     MortgageCalculatorGUI8 frame = new MortgageCalculatorGUI8(); 
     frame.setBounds (400, 200, 800, 800); 
     frame.setTitle ("Mortgage Calculator 1.0.4"); 
     frame.setDefaultCloseOperation (EXIT_ON_CLOSE); 
     frame.setVisible (true); 



    } 
} 
+1

Сначала убедитесь, что код скомпилирован. Я бы предположил, что вы знаете лучше, чем пытаться вставить метод в тело конструктора, не так ли? Во-вторых, не догадывайтесь об этом. Запланируйте заранее, что вы хотите, чтобы ваш код делал, прежде чем пытаться его написать. –

+0

Нет, мой код не компилируется. Это было до того, как я попытался включить часть вычисления. Я новичок в программировании на Java и не получаю большую помощь от моего инструктора или других в моем классе. Вот почему я прошу о помощи здесь. Я планировал заранее, но мой план был неправильным, и теперь я в беспорядке. Мне просто нужна помощь. – David

+2

Продолжая свой код, я задаюсь вопросом, слишком ли ушло в спасение, что вам лучше отказаться от этого и перезапустить. Если вы это сделаете, и вы не используете IDE, то вам обязательно захочется компилировать ранние и часто, как правило, после добавления каждой новой строки кода. Тогда, если у вас есть какие-либо ошибки компиляции, не добавляйте больше строк, пока эти ошибки не будут исправлены. Сделайте это таким образом, и вам почти гарантировано, что у вас будет исправленное количество ошибок, а не то, что у вас есть сейчас. –

ответ

3

Стреляй, я покажу вам в качестве примера того, что я имел в виду в своем последнем комментарии:

Myself, я бы создать массив JRadioButton, как класс поля для каждой группы, Я использовал также объект ButtonGroup для каждого кластера JRadioButtons. Затем в моем вычислении ActionListener JButton я бы выбрал выбранную радиообъект, либо перейдя через массив переключателей, либо из метода getSelection ButtonGroups (обратите внимание, что это возвращает объект ButtonModel или null, если ничего не выбрано).

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class InfoFromRadioBtns extends JPanel { 
    private static final long serialVersionUID = 1L; 
    private int[] foobars = {1, 2, 5, 10, 20}; 
    private JRadioButton[] foobarRButtons = new JRadioButton[foobars.length]; 
    private ButtonGroup foobarBtnGroup = new ButtonGroup(); 

    public InfoFromRadioBtns() { 
     // jpanel to hold one set of radio buttons 
     JPanel radioBtnPanel = new JPanel(new GridLayout(0, 1)); 
     radioBtnPanel.setBorder(BorderFactory 
       .createTitledBorder("Choose a Foobar")); 

     // iterate through the radio button array creating buttons 
     // and adding them to the radioBtnPanel and the 
     // foobarBtnGroup ButtonGroup 
     for (int i = 0; i < foobarRButtons.length; i++) { 
     // string for radiobutton to dislay -- just the number 
     String buttonText = String.valueOf(foobars[i]); 
     JRadioButton radiobtn = new JRadioButton("foobar " + buttonText); 
     radiobtn.setActionCommand(buttonText); // one way to find out which 
               // button is selected 
     radioBtnPanel.add(radiobtn); // add radiobutton to its panel 
     foobarBtnGroup.add(radiobtn); // add radiobutton to its button group 

     // add to array 
     foobarRButtons[i] = radiobtn; 
     } 

     // one way to get the selected JRadioButton 
     JButton getRadioChoice1 = new JButton("Get Radio Choice 1"); 
     getRadioChoice1.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      ButtonModel seletedModel = foobarBtnGroup.getSelection(); 
      if (seletedModel != null) { 
       String actionCommand = seletedModel.getActionCommand(); 
       System.out.println("selected foobar: " + actionCommand); 
      } else { 
       System.out.println("No foobar selected"); 
      } 
     } 
     }); 

     // another way to get the selected JRadioButton 
     JButton getRadioChoice2 = new JButton("Get Radio Choice 2"); 
     getRadioChoice2.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      String actionCommand = ""; 
      for (JRadioButton foobarRButton : foobarRButtons) { 
       if (foobarRButton.isSelected()) { 
        actionCommand = foobarRButton.getActionCommand(); 
       } 
      } 
      if (actionCommand.isEmpty()) { 
       System.out.println("No foobar selected"); 
      } else { 
       System.out.println("selected foobar: " + actionCommand); 
      } 

     } 
     }); 

     JPanel jBtnPanel = new JPanel(); 
     jBtnPanel.add(getRadioChoice1); 
     jBtnPanel.add(getRadioChoice2); 

     // make main GUI use a BordeLayout 
     setLayout(new BorderLayout()); 
     add(radioBtnPanel, BorderLayout.CENTER); 
     add(jBtnPanel, BorderLayout.PAGE_END); 
    } 

    private static void createAndShowUI() { 
     JFrame frame = new JFrame("InfoFromRadioBtns"); 
     frame.getContentPane().add(new InfoFromRadioBtns()); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowUI(); 
     } 
     }); 
    } 
} 

Что бы вы ни делали, не пытайтесь копировать и вставлять любой из этого кода в вашу программу, потому что он просто не будет работать таким образом (по назначению). Он был опубликован только для иллюстрации концепций, которые я обсуждал выше.

+0

Это помогает, но я не знаю, как реализовать это в моем существующем состоянии. Я попытался создать публичный класс внутри MortgageCalculatorGUI8(), и это не сработает. Если я переведу его на улицу и попробую вызвать методы из MortgageCalculatorGUI8(), которые дают мне «не найти символы». – David

+1

Прошу прощения, но ваш вопрос/комментарий выше не дает мне достаточной информации, чтобы иметь возможность дать ответ, так как «не работает» мало мне подсказывает. Если у вас есть какие-то конкретные вопросы, спросите их, но вам нужно будет дать немного больше информации и, возможно, отредактировать свое оригинальное сообщение, показывая новый код. –

1

Я бы расширил JRadioButton, чтобы создать класс, способный удерживать нужные переменные. Вы можете сделать это как внутренний класс, чтобы все было просто.

private double pctinterest; 
private int numyears; // within scope of your containing class 

private class RadioButtonWithYears extends JRadioButton { 
    final private int years; 
    private int getYears() { return years; } 
    public RadioButtonWithYears(int years) { 
     super(years + " years",false); 
     this.years = years; 
     addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       numyears = getYears(); 
      } 
     }); 
    } 
} 

// elsewhere 
RadioButtonWithYears b7Yr = new RadioButtonWithYears(7); 
RadioButtonWithYears b15Yr = new RadioButtonWithYears(15); 
RadioButtonWithYears b30Yr = new RadioButtonWithYears(30); 

// then later 
double M_Interest = java.lang.Math.pow((pctinternet/100)+1, numyears); 

Update: Это не слишком далеко, чтобы спасти. Я включил ButtonGroup в соответствии с предложением Eels и сделал часть этого GUI работы (хотя вам придется исправлять макет) и отмечен там, где вам нужно разобраться в расчете.

package stack.swing; 

import java.awt.*; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import java.math.BigDecimal; 
import java.text.NumberFormat; 

import javax.swing.*; 
import javax.swing.border.*; 
import javax.swing.JRadioButton; 

public class MortgageCalculatorGUI8 extends JFrame { 

    JPanel panel1 = new JPanel(); 

    Integer Principal; 
    boolean ok = false; 

    private BigDecimal temp_Interest; 
    private int temp_Length; // within scope of your containing class 

    private class JRadioButtonWithYears extends JRadioButton { 
     final private int years; 
     private int getYears() { return years; } 
     public JRadioButtonWithYears(int years) { 
      super(years + " years",false); 
      this.years = years; 
      addActionListener(new ActionListener() { 
       public void actionPerformed(ActionEvent e) { 
        temp_Length = getYears(); 
       } 
      }); 
     } 
    } 

    private class JRadioButtonWithPct extends JRadioButton { 
     final private BigDecimal pct; 
     private BigDecimal getPct() { return pct; } 
     public JRadioButtonWithPct(String pct) { 
      super(pct + "%",false); 
      this.pct = new BigDecimal(pct); 
      addActionListener(new ActionListener() { 
       public void actionPerformed(ActionEvent e) { 
        temp_Interest = getPct(); 
       } 
      }); 
     } 
    } 

    public MortgageCalculatorGUI8() { 

     getContentPane().setLayout (null); 
     setSize (400,400); 

     panel1.setLayout (null); 
     panel1.setBounds (0, 0, 2000, 800); 
     add (panel1); 

     JLabel mortgageLabel = new JLabel("Mortgage Amount $", JLabel.LEFT); 
     mortgageLabel.setBounds (15, 15, 150, 30); 
     panel1.add (mortgageLabel); 

     final JTextField mortgageText = new JTextField(10); 
     mortgageText.setBounds (130, 15, 150, 30); 
     panel1.add (mortgageText); 

     JLabel termLabel = new JLabel("Mortgage Term (Years)", JLabel.LEFT); 
     termLabel.setBounds (340, 40, 150, 30); 
     panel1.add (termLabel); 

     JTextField termText = new JTextField(3); 
     termText.setBounds (340, 70, 150, 30); 
     panel1.add (termText); 

     JLabel intRateLabel = new JLabel("Interest Rate (%)", JLabel.LEFT); 
     intRateLabel.setBounds (340, 94, 150, 30); 
     panel1.add (intRateLabel); 

     JTextField intRateText = new JTextField(5); 
     intRateText.setBounds (340, 120, 150, 30); 
     panel1.add (intRateText); 

     JLabel mPaymentLabel = new JLabel("Monthly Payment $", JLabel.LEFT); 
     mPaymentLabel.setBounds (550, 40, 150, 30); 
     panel1.add (mPaymentLabel); 

     JTextField mPaymentText = new JTextField(10); 
     mPaymentText.setBounds (550, 70, 150, 30); 
     panel1.add (mPaymentText); 

//  JLabel paymentLabel = new JLabel ("Payment #"); 
//  JLabel balLabel = new JLabel (" Balance"); 
//  JLabel ytdPrincLabel = new JLabel (" Principal"); 
//  JLabel ytdIntLabel = new JLabel (" Interest"); 

     JTextArea textArea = new JTextArea(10, 31); 
     textArea.setBounds (550, 100, 150, 30); 
     panel1.add (textArea); 
     JScrollPane scroll = new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
     scroll.setBounds (450, 200, 300, 150); 
     panel1.add (scroll); 

     // jpanel to hold one set of radio buttons 
     JPanel yearsPanel = new JPanel(new GridLayout(0, 1)); 
     yearsPanel.setBorder(BorderFactory 
       .createTitledBorder("Years of Loan Amount")); 
     yearsPanel.setBounds(30, 55, 150, 150); 
     panel1.add (yearsPanel); 
     final ButtonGroup yearsGroup = new ButtonGroup(); 

     int years[] = { 7, 15, 30 }; 
     for (int i = 0; i < years.length; i++) { 
      JRadioButtonWithYears radiobtn = new JRadioButtonWithYears(years[i]); 
      yearsPanel.add(radiobtn); // add radiobutton to its panel 
      yearsGroup.add(radiobtn); // add radiobutton to its button group 
     } 

     // jpanel to hold one set of radio buttons 
     JPanel pctPanel = new JPanel(new GridLayout(0, 1)); 
     pctPanel.setBorder(BorderFactory 
       .createTitledBorder("Interest Rate Of the Loan")); 
     pctPanel.setBounds(175, 55, 180, 150); 
     panel1.add (pctPanel); 
     final ButtonGroup pctGroup = new ButtonGroup(); 

     String pct[] = { "5.35", "5.5", "5.75" }; 
     for (int i = 0; i < pct.length; i++) { 
      JRadioButtonWithPct radiobtn = new JRadioButtonWithPct(pct[i]); 
      pctPanel.add(radiobtn); // add radiobutton to its panel 
      pctGroup.add(radiobtn); // add radiobutton to its button group 
     } 

     final JButton calculateButton = new JButton("CALCULATE"); 
     calculateButton.setBounds (30, 400, 120, 30); 
     panel1.add (calculateButton); 

     calculateButton.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       double M_Interest = temp_Interest.doubleValue() /(12*100); 
       double Months = temp_Length * 12; 

       Principal = Integer.parseInt(mortgageText.getText()); 

       double M_Payment = Principal * (M_Interest/(1 - (Math.pow((1 + M_Interest), - Months)))); 

       NumberFormat Money = NumberFormat.getCurrencyInstance(); 

       /** MORE STUFF TO HAPPEN HERE */ 
      } 
      }); 

     JButton clearButton = new JButton("CLEAR"); 
     clearButton.setBounds (160, 400, 120, 30); 
     panel1.add (clearButton); 

     clearButton.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       mortgageText.setText (null); 
       yearsGroup.clearSelection(); 
       pctGroup.clearSelection(); 
      } 
      }); 

     JButton exitButton = new JButton("EXIT"); 
     exitButton.setBounds (290, 400, 120, 30); 
     panel1.add (exitButton); 

     exitButton.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       System.exit(0); 
      } 
      }); 
    } 

    public static void main(String[] args) { 
     MortgageCalculatorGUI8 frame = new MortgageCalculatorGUI8(); 
     frame.setBounds (400, 200, 800, 800); 
     frame.setTitle ("Mortgage Calculator 1.0.4"); 
     frame.setDefaultCloseOperation (EXIT_ON_CLOSE); 
     frame.setVisible (true); 
    } 
}