2017-03-05 6 views
0

達成したいのは非常に簡単です。 私は2つのクラスを持っています。 "SpeedingTicket" & "SpeedingTicket GUI"。 私のGUIの中には、1つのテキストボックス名txtSpeedLimit &ボタンがあります。 私のSpeedingTicketクラスの中に変数 "int speedingTicket"があります。 私のSpeedingTicketクラスの中には、 "speedingTicket"のメソッドを&に設定しています。Java - 別のクラス変数とJTextField変数をリンクする

は私が取得し、のJTextFieldを使用してテキストを設定する方法を知っているが、私はできるようにしたい:

は「txtSpeedLimit」からの入力を受けて、「txtSpeedLimit」インスタンス変数にその値を格納します"SpeedTicket"クラス。私は車の速度を追加するときに検証などを確認することができます。

おそらく、これはこのプログラムを処理する最も効率的な方法ではありません。たぶん、私は、SpeedingTicketのインスタンス変数を取り除き、GUIですべてそれを処理する必要があります。

アドバイスをいただければ幸いです。

基本的に私は何をしようとしているがこれです:

class confirmHandler implements ActionListener{ 
    public void actionPerformed(ActionEvent e){ 
     String val = txtSpeedLimit.getText(); 
     int realNum = speed.getSpeedLimit() = txtSpeedLimit; < but obviously that doesn't work, but I want the textbox link to the variable. 

EDIT:私たちは離れてGUIを取る場合、私は私のプログラムが何をしたいすべては以下の通りです: 速度制限:50 <は経由しenterdテキストフィールド スピード:60 <スピードがblah blahの場合はテキストフィールド を入力してください(これはすでにコード化されています)。結果を自分のラベルの1つに出力します。 GUIを作成せずにコンソールベースのみにすることでこれを実現しましたが、ユーザーがコンソールから入力するのではなく、テキストフィールドで入力します。

テキストフィールドに入力される値は、SpeedingTicketクラスの2つの変数(speedおよびspeedlimit)に格納する必要があります。

+0

:によって

public class SpeedingTicket { int speedingTicket; public SpeedingTicket() { speedingTicket = 500; } public int getSpeedingTicket() { return speedingTicket; } } 

をhttp://stackoverflow.com/questions/3953208/value-change -listener-to-jtextfieldを作成し、衣装リスナー「SpeedChangeListener」を作成します –

+0

スイングUIコンポーネントのモデルを使用する方法については、こちらをご覧ください。 – GhostCat

+0

[*ペインを別のペインに結ぶ方法*](http://stackoverflow.com/q/10523343/230513)。 – trashgod

答えて

0

あなたは内の値に更新することができます:あなたがここのようなテキストの変更を確認することができ

public class SpeedingTicketGUI extends JPanel{ 

    SpeedingTicket st; 

    SpeedingTicketGUI() { 

     st = new SpeedingTicket(); 
     setLayout(new FlowLayout(FlowLayout.LEFT)); 
     JTextField txtField = new JTextField(10); 
     txtField.setText(""+st.getSpeedingTicket()); 
     add(txtField); 

     JButton btn = new JButton("Update"); 
     btn.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       setSpeedingTicket(txtField.getText()); 
      } 
     }); 
     add(btn); 
    } 

    private void setSpeedingTicket(String text) { 

     try { 
      int speedTicket = Integer.parseInt(text); 
      st.setSpeedingTicket(speedTicket); 
      System.out.println("Speeding ticket set to " +st.getSpeedingTicket()); 
     } catch (NumberFormatException ex) { 
      System.out.println("Invalid value " +text); 
      ex.printStackTrace(); 
     } 
    } 

    public static void main(String[] args){ 

     JFrame frame = new JFrame("Speeding Ticket"); 
     frame.setSize(400,100); 
     frame.add(new SpeedingTicketGUI()); 
     frame.setVisible(true); 
    } 
} 
+0

GUIクラスのテキストボックスに値を入力すると元のSpeedingTicketクラスにリンクするドキュメントリスナーが必要ですか? – TLG123

+0

いいえ 'SpeedingTicketGUI'が' SpeedingTicket'の値を 'SpeedingTicket'(例えばボタンを押すことによって)に変更したい場合は、' SpeedingTicketGUI'にリスナーが必要です。あなたが達成しようとしていることを明確にするために質問を編集してください。 – c0der

+0

まあまあ。私も編集しました。 – TLG123

0

JTextまたは任意のGUIコンポーネントに値を格納する必要はありません。 グローバル静的変数を使用します。例:

public static int speed_limit;

などあなたがいずれかの方法からこの変数にアクセスすることができます

、クラス、

+0

静的変数は必要な場合にのみ使用してください。この場合、リスナーモデルはより役に立ちます –

0

それを行うには、複数の方法があります。

DocumentListenerを使用してテキストフィールドの変更を検出することも、KeyListenerで(推奨されない)テキストフィールドの変更を検出することもできます。

リスナーは、guiクラスまたは他のクラスによって直接実装できます。あなたのSpeedChangeListenerは非常に単純なことができ、あなたがより多くの抽象化をしたい場合は、あなたのGUIクラスでDocumentListenerを実装し、方法

public void addSpeedChangeListener(SpeedChangeListener scl) { 

    this.speedChangeListeners.add(scl); 
} 

を作成することができます。

public interface SpeedChangeListener { 

    public void speedChanged(int value); 
} 

次に、あなたの第二のクラスはSpeedChangeListenerを実装し、addSpeedChangeListener(this)上を呼び出し、あなたのGUIクラス。 Guiクラスの中で、ドキュメント・リスナーは登録されたすべてのリスナーに対してspeedChanged(val)を呼び出します。

EDIT また、ボタンを使用してActionListeneractionPerformedメソッド内のすべてのリスナーにspeedChangedを呼び出すことができます。

0

ボタンをクリックしたときにポップアップするJOptionDialogを使用する方が簡単だと思います。これにより、簡単に入力を取得し、入力をすぐに検証することができます。

関連する問題