【发布时间】:2017-10-15 01:22:20
【问题描述】:
我正在尝试创建一个简单的 GUI,它采用两个值并根据用户选择的按钮进行减法/加法/除法。我对我的代码感到满意,但由于某种原因,当我运行我的程序时,我没有看到任何可见的框架,也没有收到任何错误。
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JButton;
import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class Calc {
private JFrame frame;
private JTextField firstNumber;
private JTextField secondNumber;
private JTextField textField_2;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Calc window = new Calc();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public Calc() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setTitle("Simple Calculator");
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
firstNumber = new JTextField();
firstNumber.setBounds(28, 41, 156, 26);
frame.getContentPane().add(firstNumber);
firstNumber.setColumns(10);
secondNumber = new JTextField();
secondNumber.setBounds(28, 145, 156, 26);
frame.getContentPane().add(secondNumber);
secondNumber.setColumns(10);
JLabel lblNewLabel = new JLabel("First Number");
lblNewLabel.setBounds(28, 27, 110, 16);
frame.getContentPane().add(lblNewLabel);
JLabel lblNewLabel_1 = new JLabel("Second Number");
lblNewLabel_1.setBounds(28, 131, 110, 16);
frame.getContentPane().add(lblNewLabel_1);
JLabel answerLabel = new JLabel("ANSWER:");
answerLabel.setFont(new Font("Lucida Grande", Font.PLAIN, 20));
answerLabel.setBounds(216, 46, 190, 16);
frame.getContentPane().add(answerLabel);
JButton plusButton = new JButton("Add");
plusButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try{
int number1 = Integer.parseInt(firstNumber.getText());
}
catch (Exception exc){
JOptionPane.showMessageDialog(frame,"Error: bad first number.");
return;
}
try{
int number2 = Integer.parseInt(secondNumber.getText());
}
catch (Exception exc){
JOptionPane.showMessageDialog(frame,"Error: bad second number.");
return;
}
int number1 = 0, number2 = 0;
int answer = number1 + number2;
answerLabel.setText("The answer is: "+answer);
}
});
plusButton.setToolTipText("Adds first from second number");
plusButton.setBounds(28, 183, 117, 29);
frame.getContentPane().add(plusButton);
JButton subtractButton = new JButton("Subtract");
subtractButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try{
int number1 = Integer.parseInt(firstNumber.getText());
}
catch (Exception exc){
JOptionPane.showMessageDialog(frame,"Error: bad first number.");
return;
}
try{
int number2 = Integer.parseInt(secondNumber.getText());
}
catch (Exception exc){
JOptionPane.showMessageDialog(frame,"Error: bad second number.");
return;
}
int number1 = 0, number2 = 0;
int answer = number1 - number2;
answerLabel.setText("The answer is: "+answer);
}
});
subtractButton.setToolTipText("Subtracts first from second number");
subtractButton.setBounds(157, 183, 117, 29);
frame.getContentPane().add(subtractButton);
JButton divideButton = new JButton("Divide");
divideButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try{
int number1 = Integer.parseInt(firstNumber.getText());
}
catch (Exception exc){
JOptionPane.showMessageDialog(frame,"Error: bad first number.");
return;
}
try{
int number2 = Integer.parseInt(secondNumber.getText());
}
catch (Exception exc){
JOptionPane.showMessageDialog(frame,"Error: bad second number.");
return;
}
int number1 = 0, number2 = 0;
int answer = number1 / number2;
answerLabel.setText("The answer is: "+answer);
}
});
divideButton.setToolTipText("Divides first from second number");
divideButton.setBounds(289, 183, 117, 29);
frame.getContentPane().add(divideButton);
textField_2 = new JTextField();
textField_2.setBounds(216, 94, 130, 26);
frame.getContentPane().add(textField_2);
textField_2.setColumns(10);
}
}
【问题讨论】:
-
1) Java GUI 必须在不同的语言环境中使用不同的 PLAF 在不同的操作系统、屏幕尺寸、屏幕分辨率等上工作。因此,它们不利于像素完美布局。而是使用布局管理器,或combinations of them 以及white space 的布局填充和边框。 2) 它在 NetBeans 中运行良好(有趣的是 only 因为它支持这是一个 IDE 问题,正如您显然怀疑的那样。)
-
顺便说一句 - 另见calculator example。它使用
ScriptEngine来评估文本字段中的表达式。