[英]Using JTextField for user input
感謝您的幫助...現在程序可以正常運行了,但是我還有2個問題。 1.如何將輸出獲取到JTestField t4或t5中2.如何使用JButton Buton關閉應用程序
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.JButton;
import javax.swing.JFrame;
public class TriangleFarfan{
JFrame Triangle = new JFrame("Triangle Calculator");
JButton Button1 = new JButton ("Area");
JButton Button2 = new JButton("Perimeter");
JButton Button3 = new JButton("Close");
JTextField t1 = new JTextField(20);
String t1TextBox = t1.getText();
double side1 = Double.parseDouble(t1TextBox);
JPanel j1 = new JPanel (new FlowLayout());
JLabel l1 = new JLabel("Enter side 1:");
JTextField t2 = new JTextField();
String t2TextBox = t2.getText();
double side2 = Double.parseDouble(t2TextBox);
JPanel j2 = new JPanel (new FlowLayout());
JLabel l2 = new JLabel("Enter side 2:");
JTextField t3 = new JTextField();
String t3TextBox = t3.getText();
double side3 = Double.parseDouble(t3TextBox);
JPanel j3 = new JPanel (new FlowLayout());
JLabel l3 = new JLabel("Enter side 3:");
JTextField t4 = new JTextField();
JPanel j4 = new JPanel (new FlowLayout());
JLabel l4 = new JLabel("Area Result");
JTextField t5 = new JTextField(20);
JPanel j5 = new JPanel (new FlowLayout());
JLabel l5 = new JLabel("Perimeter Result");
public TriangleFarfan()
{
j1.add(l1);
j1.add(t1);
j2.add(l2);
j2.add(t2);
j3.add(l3);
j3.add(t3);
j4.add(l4);
j4.add(t4);
j5.add(l5);
j5.add(t5);
Triangle.add(j1);
Triangle.add(j2);
Triangle.add(j3);
Triangle.add(j4);
Triangle.add(j5);
Triangle.add(Button1);
Button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
double Area = (side1 * side2)/2;
//Execute when button is pressed
System.out.println(Area);
}
});
Triangle.add(Button2);
Button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
//Execute when button is pressed
System.out.println("You clicked the Perimeter Button");
}
});
Triangle.add(Button3);
Button3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
//Execute when button is pressed
System.out.println("You clicked the Close Button");
}
});
Triangle.setLayout(new FlowLayout());
Triangle.setSize(450,400);
Triangle.setVisible(true);
Triangle.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
正如Reimeus所指出的,除了缺少主要方法外,您的指令順序也是錯誤的。 您試圖在屏幕上什至沒有顯示任何內容之前以及甚至在創建對象之前讀取用戶輸入。 例如,這一行:
String t1TextBox = t1.getText();
嘗試從尚未添加到尚未創建的面板的TextBox中獲取文本。
為了解決這個問題,您需要重新考慮程序的邏輯。 這里有一些提示:
避免在方法之外進行賦值。 而不是寫作
JFrame Triangle = new JFrame("Triangle Calculator");
在類主體中聲明變量,如下所示:
JFrame Triangle;
並像下面這樣在構造函數中分配它:
Triangle = new JFrame("Triangle Calculator");
構建整個UI,然后擔心偵聽器。 這樣,可以確保在獲取用戶輸入時不會引用不存在的UI元素。
在偵聽器內部獲取用戶輸入,如下所示:
Button1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // get the size of side1 from the textbox String t1TextBox = t1.getText(); double side1 = Double.parseDouble(t1TextBox); // get the size of side2 from the textbox String t2TextBox = t2.getText(); double side2 = Double.parseDouble(t2TextBox); // now we can calculate the area double Area = (side1 * side2)/2; //Execute when button is pressed System.out.println(Area); }
});
添加一個main
方法:
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new TriangleFarfan();
}
});
}
報關單
JTextField t1 = new JTextField(20);
不會將JTextField
的值設置為20
。 而是設置JTextComponent
的列數,但使用空String
。 因此線
double side1 = Double.parseDouble(t1TextBox);
在啟動時將拋出NumberFormatException
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.