2011-07-18 79 views
1

我有這個應用程序的很多問題。我一整天都在這裏,無法弄清楚這一點。我有一個Java應用程序是爲一個類。我遇到的問題是試圖讓JRadioButtons分配給數組中的變量,然後將它們傳遞到公式中。如果有人能幫助我會很感激。pl拍賣計算器圖形用戶界面問題

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將數組作爲對各組類字段我爲每個JRadioButton集羣使用了一個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); 

更新:它是不是太遠了挽救。我已經按照Eels的建議合併了ButtonGroup,並使其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); 
    } 
}