我正試圖使用Swing制作一個計算器,但在試圖將我的字串從文本欄位決議為整數,然后對其運行一個公式以計算x占y的百分比((x/y)*100)時,最初遇到了一些錯誤。
我意識到,我之所以會遇到一些問題,首先是因為我可能正在運行一個需要回傳雙數的方法,所以我修復了這個問題。然后我不得不將我的文本欄位預先填上 "1",因為當它們被設定為""時,我得到了錯誤。現在,當我試圖運行我的程式,比如說x=20,y=100的測驗案例,我仍然得到 "1是1的100%"。我認為由于某些原因,我的邏輯從文本欄位傳遞更新的值時出現了問題,所以它們沒有通過我的 calcdUp 方法運行。
為什么這個方法沒有收到這些值?是不是因為它在被呼叫之前就已經運行了呢?
package swingTest;
import java.awt.EventQueue。
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class swingWindow {
private JFrame frame;
private JTextField textField;
private JTextField textField_1;
/**。
*啟動應用程式。
*/
public static void main(String[] args){
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
swingWindow window = new swingWindow()。
window.frame.setVisible(true)。
} catch (Exception e) {
e.printStackTrace()。
}
}
});
}
public double calcdUp(double x, double y) {
double calcd = (x/y)*100;
return calcd;
}
/**。
*創建應用程式。
*/
public swingWindow() {
initialize()。
}
/**。
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300) 。
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)。
frame.getContentPane().setLayout(null)。
JLabel lblNewLabel = new JLabel("格式。X是Y的百分之多少? ")。)
lblNewLabel.setBounds(10, 11, 414, 14) 。
frame.getContentPane().add(lblNewLabel)。
JLabel lblNewLabel_1 = new JLabel("X。 ")。)
lblNewLabel_1.setBounds(10, 36, 46, 14) 。
frame.getContentPane().add(lblNewLabel_1)。
textField = new JTextField("1"/span>)。
textField.setBounds(66, 33, 86, 20) 。
frame.getContentPane().add(textField)。
textField.setColumns(10)。
double numX = Double.parseDouble(textField.getText())。
JLabel lblNewLabel_2 = = new JLabel("Y: ")。)
lblNewLabel_2.setBounds(10, 61, 46, 14) 。
frame.getContentPane().add(lblNewLabel_2)。
textField_1 = new JTextField("1"/span>)。
textField_1.setBounds(66, 58, 86, 20) 。
frame.getContentPane().add(textField_1)。
textField_1.setColumns(10)。
double numY = Double.parseDouble(textField_1.getText())。
JLabel results = new JLabel("結果將在這里顯示。 ...")。)
results.setBounds(10, 120, 414, 65) 。
frame.getContentPane().add(results)。
frame.revalidate();
frame.repaint()。
JButton submitBtn = new JButton("Calculate Percentage"/span>)。
submitBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
double result = calcdUp(numX,numY)。
results.setText(numX " 是 " result " 的百分比 " numY)。
}
});
submitBtn.setBounds(10, 86, 142, 23) 。
frame.getContentPane().add(submitBtn)。
}
uj5u.com熱心網友回復:
double numX = Double.parseDouble(textField.getText())。
...
double numY = Double.parseDouble(textField_1.getText() ) 。
上述陳述句沒有任何作用。你試圖在用戶輸入任何東西之前從文本欄位中獲取文本。
這些陳述句需要移到 ActionListener 中,因此你可以在點擊按鈕時獲得文本欄位中顯示的文本。
double numX = Double.parseDouble(textField.getText())。
double numY = Double.parseDouble(textField_1.getText() )。
double result = calcdUp(numX,numY)。
results.setText(numX " 是 " result " 的百分比 " numY)。
另外:
類名應該以大寫字母開始。以Java API的類名為例來學習。
不要使用空布局和setBounds(...)。Swing被設計為與布局管理器一起使用。
uj5u.com熱心網友回復:
當你在initialize()方法中創建textFields時,numX和numY變數被設定一次,為默認值。你需要在你的actionPerformed方法中創建numX和numY來獲得你的組件的當前狀態。
例如:
JButton submitBtn = new JButton("Calculate Percentage"/span>)。
submitBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
double numX = Double.parseDouble(textField.getText())。
double numY = Double.parseDouble(textField_1.getText() )。
double result = calcdUp(numX,numY)。
results.setText(numX " 是 " result " 的百分比 " numY)。
}
});
uj5u.com熱心網友回復:
JButton submitBtn = new JButton("Calculate Percentage"/span>)。
submitBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
double numX = !textField.getText() .isEmpty() ? Double.parseDouble(textField.getText() ) : 0。
double numY = !textField_1.getText().isEmpty() ? Double.parseDouble(textField_1.getText() ) 。0;
double result = calcdUp(numX,numY)。
results.setText(numX " 是 " result " 的百分比 " numY)。
}
});
submitBtn.setBounds(10, 86, 142, 23) 。
frame.getContentPane().add(submitBtn)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/310279.html
標籤:
上一篇:如何知道JMenuItem何時被顯示?添加一個ComponentListener并使用componentShown不起作用
