2015-05-15 2 views
4

Я создаю (ну, уже созданный) калькулятор платежей по кредиту с использованием графического интерфейса пользователя на Java. Некоторые из расчетов ошибочны, и я их исправлю, поэтому не обращайте на них внимания. То, что мне действительно нужно, - это проверка правильности ввода пользователем. Я пробовал использовать блок try/catch, но в NetBeans я все краснею, где исключение catch. Почему я получаю подчеркивания и это правильный тип проверки? Дайте мне знать, требуется ли больше кода или информации. Вот основной код класса/драйвера:Проверка ввода (java) с использованием GUI

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

public class LoanCalculator extends JFrame { 
// Create text fields for interest rate, years 
// loan amount, monthly payment, and total payment 


private static final JTextField INTEREST_RATE = new JTextField(); 
private static final JTextField LOAN_YEARS = new JTextField(); 
private static final JTextField LOAN_AMOUNT = new JTextField(); 
private static final JTextField MONTHLY_PAYMENT = new JTextField(); 
private static final JTextField TOTAL_PAYMENT = new JTextField(); 

// Create a Compute Payment button 
private static final JButton LOAN_COMPUTE = new JButton("Compute Payment"); 

public LoanCalculator() { 
    // Panel p1 to hold labels and text fields 
    //setSize (FRAME_WIDTH, FRAME_HEIGHT); 
    JPanel labelPanel = new JPanel(new GridLayout(6, 2)); 
    labelPanel.add(new JLabel("Annual Interest Rate")); 
    labelPanel.add(INTEREST_RATE); 
    labelPanel.add(new JLabel("Number of Years")); 
    labelPanel.add(LOAN_YEARS); 
    labelPanel.add(new JLabel("Loan Amount")); 
    labelPanel.add(LOAN_AMOUNT); 
    labelPanel.add(new JLabel("Monthly Payment")); 
    labelPanel.add(MONTHLY_PAYMENT); 
    labelPanel.add(new JLabel("Total Payment")); 
    labelPanel.add(TOTAL_PAYMENT); 
    labelPanel.setBorder(new TitledBorder("Enter loan amount, interest rate, and years")); 

    // Panel p2 to hold the button 
    JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); 
    buttonPanel.add(LOAN_COMPUTE); 

    // Add the panels to the frame 
    add(labelPanel, BorderLayout.CENTER); 
    add(buttonPanel, BorderLayout.SOUTH); 

    // Register listener 
    LOAN_COMPUTE.addActionListener(new ButtonListener()); 
} 

/** 
* Handle the Compute Payment button 
*/ 
private class ButtonListener implements ActionListener { 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     // Get values from text fields 
    try{ 
     double interest = Double.parseDouble(INTEREST_RATE.getText()); 
     int year = Integer.parseInt(LOAN_YEARS.getText()); 
     double loanAmount = Double.parseDouble(LOAN_AMOUNT.getText()); 

     // Create a loan object 
     Loan loan = new Loan(interest, year, loanAmount); 

     // Display monthly payment and total payment 
     MONTHLY_PAYMENT.setText(String.format("%.2f", loan.getMonthlyPayment())); 
     TOTAL_PAYMENT.setText(String.format("%.2f", loan.getTotalPayment())); 
    }catch (Exception ex){ 
     JOptionPane.showMessageDialog(this, ex.getMessage(), "Error," , JOptionPane.ERROR_MESSAGE)); 
    }   

    } 
} 

public static void main(String[] args) { 
    LoanCalculator frame = new LoanCalculator(); 
    frame.pack(); 
    frame.setTitle("LoanCalculator"); 
    frame.setLocationRelativeTo(null); // Center the frame 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 
} 

}

+0

Сообщение об ошибке сообщит вам, почему вы получаете подчеркивания. Что это говорит вам? –

+0

: «getMessage в классе Throwable не может применяться к заданным типам – kandaspohn

+0

извините, случайно нажмите Enter. Также говорит« Обязательные аргументы: нет »и« найден: LoanCalculator.ButtonListener, String, String, int » – kandaspohn

ответ

1

Первый параметр метода JOptionPane showMessageDialog должен быть графический компонент, и ваш не так, как это вместо того, чтобы внутренний класс слушателя. Так это изменить:

JOptionPane.showMessageDialog(this, ex.getMessage(), 
     "Error,", JOptionPane.ERROR_MESSAGE)); 

к этому:

JOptionPane.showMessageDialog(LoanCalculator.this, ex.getMessage(), 
     "Error", JOptionPane.ERROR_MESSAGE); // extra parenthesis removed 

Как и в сторону, это, как правило, не отличная идея, чтобы просто поймать Exception, как бы бросая свой улов сеть на слишком большой площади. Гораздо лучше было бы поймать конкретные и, возможно, ожидаемые исключения.

Кроме того, урок, который следует извлечь из этого вопроса, заключается в том, что вы захотите внимательно прочитать все сообщения об ошибках и исключениях, поскольку они обычно сообщают вам, что именно не так и где и обычно не так сложно понять.

+0

Пробовал это, и я все еще получаю то же сообщение об ошибке – kandaspohn

+0

@kandaspohn: нет, вы получите другое сообщение об ошибке - у вас слишком много конечных скобок '))' 'на конце метода JOptionPane д. Снова прочитайте критические сообщения об ошибках. –

+0

@kandaspohn: Я исправил это в своем коде ответа. –

Смежные вопросы