2011-10-08 47 views
0

時,我有由數字combobox1= 1 to 5和c ombobox2= 1 to 6.的JComboBox如何來計算兩個整數從兩個JComboBox中,並有導致JTextField中單擊一個JButton

的2 JComboBox,當我點擊我的JButton,我希望兩個要添加和顯示在一個Textfield.

選擇號碼我已經有完整的代碼除了計算和如何有結果在textfield.

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


public class exer1 extends JFrame{ 

    JFrame form = new JFrame ("haay"); 
    JButton btn = new JButton ("Compute"); 
    JTextField txt = new JTextField (10); 
    JComboBox cb1 = new JComboBox(); 
    JComboBox cb2 = new JComboBox(); 


public exer1(){ 

    form.getContentPane().setLayout(null); 
    form.setSize (500,550); 

    form.getContentPane().add(txt); 
    form.getContentPane().add(btn); 
    form.getContentPane().add(cb1); 
    form.getContentPane().add(cb2); 

    cb1.addItem(new Integer(1)); 
    cb1.addItem(new Integer(2)); 
    cb1.addItem(new Integer(3)); 
    cb1.addItem(new Integer(4)); 
    cb1.addItem(new Integer(5)); 
    cb2.addItem(new Integer(1)); 
    cb2.addItem(new Integer(2)); 
    cb2.addItem(new Integer(3)); 
    cb2.addItem(new Integer(4)); 
    cb2.addItem(new Integer(5)); 
    cb2.addItem(new Integer(6)); 

    txt.setBounds(150,90,100,30); 
    btn.setBounds(40,170,100,40); 
    cb1.setBounds(190,140,50,30); 
    cb2.setBounds(190,190,50,30); 

    btn.addActionListener(new ActionListener(){ 
      public void actionPerformed (ActionEvent e){ 


      } 
     }); 



    form.show(); 

} 




    public static void main (String args []){ 
     exer1 xx = new exer1(); 

    } 

} 

請幫忙。

+0

Swing教程[如何使用組合框](http://download.oracle.com/javase/tutorial/uiswing/components/combobox.html)解釋瞭如何完成所有這些 - 使用方法getSelectedItem ()'。你有什麼嘗試?請不要給我們一個截止日期。這是你的問題不是我們的問題。 –

+0

卡羅爾將來會使用「家庭作業」標籤。無論如何,每個人都知道,大多數人更渴望幫助誰是誰。 :) –

+0

請學習java命名約定並堅持使用它們 – kleopatra

回答

-1

使用form.setVisible(true);

則:

btn.addActionListener(new ActionListener() { 

     public void actionPerformed(ActionEvent e) { 
      int cb1Int = Integer.parseInt(cb1.getSelectedItem().toString()); 
      int cb2Int = Integer.parseInt(cb2.getSelectedItem().toString()); 
      txt.setText(String.valueOf(cb1Int + cb2Int)); 
     } 
    }); 

祝你的功課。 ;)

+0

這些項目已經是Integer對象了,所以不需要再做String然後再解析成int。只需將從'getSelectedItem()'返回的對象轉換爲Integer。更好的是,她試圖首先自己解決這個問題。 –

+0

是的,你對鑄造是正確的,但我傾向於避免擺脫原則。我並不完全同意你需要用3行代碼來哄騙這個孩子。她很清楚地寫下了其餘部分,這很糟糕。 ;):P –

+0

請更正您的代碼。 –

3

我有種改寫整個腳本(抱歉的任何不便)...

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

public class exer1 extends JFrame implements ActionListener { 
    JPanel row1 = new JPanel(); 
    JLabel first = new JLabel("Select the first number:", JLabel.RIGHT); 
    JComboBox fNum = new JComboBox(); 
    JPanel row2 = new JPanel(); 
    JLabel second = new JLabel("Select the second number:", JLabel.RIGHT); 
    JComboBox sNum = new JComboBox(); 
    JPanel row3 = new JPanel(); 
    JButton comp = new JButton("Compute"); 
    JTextField total = new JTextField(5); 

    public exer1() { 
     super("Calculator"); 
     row1.add(first); 
     fNum.addItem("1"); 
     fNum.addItem("2"); 
     fNum.addItem("3"); 
     fNum.addItem("4"); 
     fNum.addItem("5"); 
     fNum.addItem("6"); 
     row1.add(fNum); 
     add(row1); 
     row2.add(second); 
     sNum.addItem("1"); 
     sNum.addItem("2"); 
     sNum.addItem("3"); 
     sNum.addItem("4"); 
     sNum.addItem("5"); 
     sNum.addItem("6"); 
     row2.add(sNum); 
     add(row2); 
     comp.addActionListener(this); 
     row3.add(comp); 
     total.setEditable(false); 
     row3.add(total); 
     add(row3); 
     setLayout(new FlowLayout()); 
     setSize(500, 550); 
     setVisible(true); 
    } 

    public void actionPerformed(ActionEvent event) { 
     int num1 = Integer.parseInt(fNum.getSelectedItem().toString()); 
     int num2 = Integer.parseInt(sNum.getSelectedItem().toString()); 
     total.setText("" + (num1 + num2)); 
    } 

    public static void main(String[] args) { 
     exer1 xx = new exer1(); 
    } 
} 
+0

我可以看到'的Integer.parseInt()'不會拋出'NumberFormatException'因爲只有有效的'Integer'情況下都存在,但是這似乎令人費解 – trashgod

+0

@。 trashgod令人費解以什麼方式? – fireshadow52

+0

轉換'Integer'到'String',然後分析它。 – trashgod

4

提供的sscce顯然功課,但演習的目標不是那麼清楚。有幾件事值得注意。

  1. GUI應構建在event dispatch thread上。

  2. 按照慣例,類名以首字母大寫字母開頭。

  3. 爲了可讀性,應該考慮冗長的初始化。

  4. 添加到每個JComboBox的對象是Integer類的實例,它們模擬數學整數的子集。請注意爲什麼valueOf()「通常應優先於構造函數使用」。

  5. 有沒有必要轉換任何東西到String,直到需要更新actionPerformed()中的顯示。由於getSelectedItem()返回類型爲Object的值,因此結果必須轉換爲Integer;這在本地構建的數據的情況下是完全安全的。

  6. 一旦Integer值已恢復,很容易獲得該值作爲int值。

  7. sum最終轉換爲String作爲練習。提示:String有一個合適的方法,其名稱現在可能看起來很熟悉。

  8. A Visual Guide to Layout Managers成爲朋友永遠不會太早。

image

修訂例如:

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

public class Exercise1 extends JFrame { 

    JFrame form = new JFrame("Exercise1"); 
    JButton btn = new JButton("Compute"); 
    JTextField txt = new JTextField(10); 
    JComboBox<Integer> cb1 = new JComboBox<>(); 
    JComboBox<Integer> cb2 = new JComboBox<>(); 

    public Exercise1() { 
     form.setLayout(new GridLayout(0, 1)); 
     form.add(txt); 
     form.add(btn); 
     form.add(cb1); 
     form.add(cb2); 
     for (int i = 1; i <= 5; i++) { 
      cb1.addItem(Integer.valueOf(i)); 
      cb2.addItem(Integer.valueOf(i)); 
     } 
     cb2.addItem(new Integer(6)); 
     btn.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       Integer v1 = (Integer) cb1.getSelectedItem(); 
       Integer v2 = (Integer) cb2.getSelectedItem(); 
       int sum = v1.intValue() + v2.intValue(); 
       txt.setText("42"); // really should convert sum to a String 
      } 
     }); 

     form.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     form.pack(); 
     form.setVisible(true); 
    } 

    public static void main(String args[]) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       Exercise1 exercise1 = new Exercise1(); 
      } 
     }); 
    } 
} 

作爲參考,爪哇7引入ComboBoxModel<E>改進類型安全,儘管仍然getSelectedItem()向後兼容。