2011-07-18 12 views
1

このアプリケーションでは多くの問題が発生しています。私は一日中このままでしたが、これを理解することはできません。私はクラスのためのJavaアプリケーションを持っています。私が抱えている問題は、JRadioButtonsを配列内の変数に代入して数式に渡すことです。誰かが私がそれをたくさん感謝するのを助けることができたら。plmortgage電卓のGUIロットでの問題

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

シュート、私は私が私の最後のコメントに何を意味するかの例でお見せしましょう:

自分を、私はそのグループごとにクラスのフィールドとしてのJRadioButtonの配列を作成したいです私はJRadioButtonsの各クラスターにButtonGroupオブジェクトを使用しました。次に、私の計算JButtonのActionListenerで、ラジオボタン配列をループするか、ButtonGroupsのgetSelectionメソッドから選択したラジオボタンを取得します(これは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); 

更新:あまりにも遠くにサルベージに行っていません。私は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); 
    } 
}