2016-10-01 9 views
1

私は簡単にShop Billingアプリを作成しようとしました。すべては今のところ良いですが、私は今問題に固執しています。元のソースコードは大きすぎるため、混乱する可能性があります。だから私は自分の問題を記述するためのサンプルコードを作った。ここにコードがあります。私はEnterキーを押したときに、私はfruitsのArrayListのインデックスを入力することができ入力が与えられる前に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){} 
} 

はそう、新しいJTextFieldが作成されます。しかしJLabelを作成して、JTextFieldに入力したインデックスに対応するフルーツの名前を表示したいと考えています。この作業を行う方法はありますか?

+0

すべての「Enter'を使用すると、 'fruitsindex.add(新しいJTextFieldの(15))による追加' JTextfield'を作成; 'あなたが何をしようとしています達成するために? – 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'を使用します。それは大丈夫ですか? –

関連する問題