Java - 将 JTextField 变量与另一个 class 变量链接
Java - Linking a JTextField variable with another class variable
我想实现的很简单。
我有 2 classes。 "SpeedingTicket" & "SpeedingTicket GUI"。
在我的 GUI 中,我有 1 个文本框名称 txtSpeedLimit 和一个按钮。
在我的 SpeedingTicket class 中,我有一个变量 "int speedingTicket"。
在我的 SpeedingTicket class 中,我还有一个用于 "speedingTicket".
的获取和设置方法
我知道如何使用 JTextFields 获取和设置文本,但我希望能够:
receive input from the "txtSpeedLimit", and store that value into the "txtSpeedLimit" instance variable in the "SpeedTicket" class. I can then check for validation etc when I come to adding the vehicle speed.
也许这不是处理此程序的最有效方法。也许我应该放弃 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 < 通过文本框输入
速度:60 < 通过文本框输入
如果速度是等等等等(我已经对此进行了编码).. 然后将结果输出到我的标签之一。
我在没有制作 GUI 并使其仅基于控制台的情况下实现了这一点,但我希望用户通过文本字段输入而不是用户通过控制台输入。
输入到文本字段中的值应存储在 SpeedingTicket class.
中的两个变量(速度和速度限制)中
您不需要在 JText 或任何 GUI 组件中存储值...
使用全局静态变量。例如:
public static int speed_limit;
您可以通过任何方法访问此变量,class,等等
有多种方法可以做到这一点。
您可以使用 DocumentListener or if you want (not recommended) by a KeyListener.
检测文本字段更改
Listener 可以通过您的 gui class 或您的其他 class 直接实现。如果你想要更多的抽象,你可以通过你的 gui class 实现 DocumentListener 并创建一个方法
public void addSpeedChangeListener(SpeedChangeListener scl) {
this.speedChangeListeners.add(scl);
}
您的 SpeedChangeListener 可以非常简单:
public interface SpeedChangeListener {
public void speedChanged(int value);
}
然后你的第二个 class 实现 SpeedChangeListener 并在你的 gui class 上调用 addSpeedChangeListener(this)
。在 gui class 中,您的文档侦听器会为每个注册的侦听器调用 speedChanged(val)
。
编辑
您还可以使用 Button 并在 ActionListener
.
的 actionPerformed
方法内的每个侦听器上调用 speedChanged
我认为使用单击按钮时弹出的 JOptionDialog 会更容易。这样您就可以轻松获得输入并立即验证输入。
您可以更新以下值:
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);
}
}
我想实现的很简单。 我有 2 classes。 "SpeedingTicket" & "SpeedingTicket GUI"。 在我的 GUI 中,我有 1 个文本框名称 txtSpeedLimit 和一个按钮。 在我的 SpeedingTicket class 中,我有一个变量 "int speedingTicket"。 在我的 SpeedingTicket class 中,我还有一个用于 "speedingTicket".
的获取和设置方法我知道如何使用 JTextFields 获取和设置文本,但我希望能够:
receive input from the "txtSpeedLimit", and store that value into the "txtSpeedLimit" instance variable in the "SpeedTicket" class. I can then check for validation etc when I come to adding the vehicle speed.
也许这不是处理此程序的最有效方法。也许我应该放弃 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 < 通过文本框输入 速度:60 < 通过文本框输入 如果速度是等等等等(我已经对此进行了编码).. 然后将结果输出到我的标签之一。 我在没有制作 GUI 并使其仅基于控制台的情况下实现了这一点,但我希望用户通过文本字段输入而不是用户通过控制台输入。
输入到文本字段中的值应存储在 SpeedingTicket class.
中的两个变量(速度和速度限制)中您不需要在 JText 或任何 GUI 组件中存储值... 使用全局静态变量。例如:
public static int speed_limit;
您可以通过任何方法访问此变量,class,等等
有多种方法可以做到这一点。
您可以使用 DocumentListener or if you want (not recommended) by a KeyListener.
检测文本字段更改Listener 可以通过您的 gui class 或您的其他 class 直接实现。如果你想要更多的抽象,你可以通过你的 gui class 实现 DocumentListener 并创建一个方法
public void addSpeedChangeListener(SpeedChangeListener scl) {
this.speedChangeListeners.add(scl);
}
您的 SpeedChangeListener 可以非常简单:
public interface SpeedChangeListener {
public void speedChanged(int value);
}
然后你的第二个 class 实现 SpeedChangeListener 并在你的 gui class 上调用 addSpeedChangeListener(this)
。在 gui class 中,您的文档侦听器会为每个注册的侦听器调用 speedChanged(val)
。
编辑
您还可以使用 Button 并在 ActionListener
.
actionPerformed
方法内的每个侦听器上调用 speedChanged
我认为使用单击按钮时弹出的 JOptionDialog 会更容易。这样您就可以轻松获得输入并立即验证输入。
您可以更新以下值:
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);
}
}