2017-03-05 82 views
0

我想實現的目標非常簡單。 我有2個班。 「SpeedingTicket」&「SpeedingTicket GUI」。 在我的GUI中我有1個文本框名稱txtSpeedLimit & a button。 在我的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. 

編輯:如果我們帶走的GUI,我要我的程序做的是以下幾點: 速度限制:50 <通過照耀處textfield 速度:60 <通過文本框輸入 如果速度是等等等等(我已經編碼了這個)..然後將結果輸出到我的標籤之一。 我在沒有製作GUI的情況下實現了這一點,並且僅使它成爲基於控制檯,而不是通過控制檯輸入,而是希望通過文本字段輸入。

輸入到文本字段中的值應存儲在SpeedingTicket類中的兩個變量(speed和speedlimit)中。

+0

您可以檢查文本更改喜歡這裏:http://stackoverflow.com/questions/3953208/value-change -listener-to-jtextfield並創建一個服裝監聽器「SpeedChangeListener」 –

+0

您想了解如何使用swing UI組件的模型。 – GhostCat

+0

[*如何將一個窗格連接到另一個窗格*](http://stackoverflow.com/q/10523343/230513)可能存在重複。 – trashgod

回答

0

您可以更新的值:由

public class SpeedingTicket { 

    int speedingTicket; 

    public SpeedingTicket() { 

     speedingTicket = 500; 
    } 

    public int getSpeedingTicket() { 
     return speedingTicket; 
    } 
} 

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來檢測文本字段更改。

Listener可以直接由你的gui類或其他類實現。如果您想了解更多的抽象,你可以通過你的GUI類實現的DocumentListener並創建一個方法

public void addSpeedChangeListener(SpeedChangeListener scl) { 

    this.speedChangeListeners.add(scl); 
} 

你SpeedChangeListener可以很簡單:

public interface SpeedChangeListener { 

    public void speedChanged(int value); 
} 

那麼你的第二類實現SpeedChangeListener並呼籲addSpeedChangeListener(this)你的貴族班。在gui類中,您的文檔偵聽器爲每個已註冊的偵聽器調用speedChanged(val)

編輯 您還可以使用該按鈕並撥打speedChanged上每一個聽衆的ActionListeneractionPerformed方法中。

0

我認爲使用點擊按鈕時會彈出的JOptionDialog會更容易。這樣,您可以輕鬆獲得輸入,並且可以立即驗證輸入。