2016-10-01 51 views
1

我做了一個簡單的嘗試來製作Shop Billing應用程序。現在一切都很好,但我現在陷入了一個問題。原始的源代碼太大,因此可能會令人困惑。所以我做了一個示例代碼來描述我的問題。這是代碼。JTextField在獲得輸入前被讀取

package experiement; 

import java.awt.Container; 
import java.awt.event.ActionEvent; 
import javax.swing.JFrame; 
import javax.swing.JTextField; 
import javax.swing.JLabel; 
import java.awt.event.ActionListener; 
import java.awt.event.KeyEvent; 
import java.util.ArrayList; 
import java.awt.event.KeyListener; 

public class Experiment extends JFrame implements ActionListener,KeyListener { 

ArrayList<JTextField> fruitsindex; 
ArrayList<JLabel>fruits; 
int serial =0; 
public Experiment(){ 
fruitsindex=new ArrayList<JTextField>();   
fruits=new ArrayList<JLabel>(); 
addKeyListener(this); 
fruits.add(new JLabel("Apple")); 
fruits.add(new JLabel("Orange")); 
fruits.add(new JLabel("Mango")); 
fruits.add(new JLabel("Pomegranate")); 
fruits.add(new JLabel("Guava")); 
fruits.add(new JLabel("Papapya")); 
fruits.add(new JLabel("Banana")); 

setSize(800,800); 
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
setVisible(true); 
} 
public static void main(String[] args) { 
Experiment e=new Experiment();   
} 

@Override 
public void actionPerformed(ActionEvent e) {} 

@Override 
public void keyTyped(KeyEvent e) {} 

@Override 
public void keyPressed(KeyEvent e) { 
    int c=e.getKeyCode(); 
    switch(c){ 
     case KeyEvent.VK_ENTER: 
     fruitsindex.add(new JTextField(15)); 
     for(int i=0;i<fruitsindex.size();i++){ 
     fruitsindex.get(i).setBounds(30,20*i,50,25); 
     getContentPane().add(fruitsindex.get(i)); 
     } 
     getContentPane().repaint(); 
     break; 
    } 
} 
@Override 
public void keyReleased(KeyEvent e){} 
} 

所以,當我按下Enter鍵,一個新的JTextField創建在那裏我可以進入fruits ArrayList中的索引。但我想創建JLabel,顯示與在JTextField中鍵入的索引對應的水果名稱。有什麼辦法可以做這個任務嗎?

+0

隨着每一個「Enter'您'fruitsindex.add創建一個額外的'JTextfield'(新的JTextField,(15));'你到底實現 ? – c0der

+0

當我在'JTextField'中鍵入某個數字時,應該在它的旁邊創建一個顯示水果名稱(對應於作爲索引的數字)的'JLabel'。 –

+0

你是否必須用'Enter'創建***或者只是讓它顯示? – c0der

回答

1

請參閱以下,並要求澄清需要:

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 
import java.util.ArrayList; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JTextField; 

public class Experiment extends JFrame { 

    ArrayList<JTextField> fruitsindex; 
    ArrayList<String>fruits; //use to keep fruit name 
    int serial =0; 

    private JTextField userInput; 
    private JLabel fruitName; 

    public Experiment(){ 

     fruits=new ArrayList<String>(); 
     fruits.add("Apple"); 
     fruits.add("Orange"); 
     fruits.add("Mango"); 
     fruits.add("Pomegranate"); 
     fruits.add("Guava"); 
     fruits.add("Papapya"); 
     fruits.add("Banana"); 

     //initialize user input JtextFiield 
     userInput = new JTextField(2); 
     userInput.setPreferredSize(new Dimension(15,40)); 
     userInput.setToolTipText("Enter fruit index (0-6)"); 
     //add key listener 
     userInput.addKeyListener(new KeyListener() { 

      @Override 
      public void keyTyped(KeyEvent e) { 
       // TODO Auto-generated method stub 
      } 

      @Override 
      public void keyReleased(KeyEvent e) { 
       // TODO Auto-generated method stub 
      } 

      @Override 
      public void keyPressed(KeyEvent e) { 
       int c=e.getKeyCode(); 
       if(c == KeyEvent.VK_ENTER) { 
        processInput(); 
       } 
      } 

     }); 
     add(userInput, BorderLayout.WEST); 

     //initialize fruit name label 
     fruitName = new JLabel("Enter fruit index"); 
     fruitName.setPreferredSize(new Dimension(140,40)); 
     add(fruitName, BorderLayout.EAST); 

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

    private void processInput() { 

     //error msg will be over written if input is valid 
     fruitName.setText("Wrong input"); 

     try { 
      String inputString = userInput.getText(); 
      int inputInt = Integer.valueOf(inputString); 
      if((inputInt >=0) && (inputInt < fruits.size())) { 

       fruitName.setText(fruits.get(inputInt)); 
       userInput.setText(""); //clear input 

      } 
     } catch (NumberFormatException ex) { 
      ex.printStackTrace(); 
     } 

     repaint(); 
    } 

    public static void main(String[] args) { 
     //no need to keep a reference if you don't use it 
     //Experiment e= 
     new Experiment(); 
    } 
} 
+0

您是否使用邊界佈局? –

+0

是的,是我默認的'JFrame' – c0der

+0

我在原始程序中使用'Null layout',因爲我喜歡絕對定位。這可以嗎? –