2017-03-05 67 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会更容易。这样,您可以轻松获得输入,并且可以立即验证输入。