我是Java Swing的新手,在使用JTextField.getText()
时遇到了问题。基本上.getText()不会拾取我放入文本字段的任何字符串并返回一个空字符串。
我认为我得到一个空字符串的原因是JTextField与按钮位于不同的面板中,但不知道如何让它工作......任何帮助都将受到高度赞赏!
这是我的逻辑
(1)创建一个JFrame,将其称为框架
(2)创建几个JPanels和frame.add(JPanel)
(3)用JButton和JTextField填充面板。请注意,文本字段位于与按钮不同的面板中。
(4)调用button.addActionListener(...)并使用JTextField.getText()
这是我的代码:
package GUI;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class aaaaa {
// Class attributes
// Overall class attributes
private JFrame frame = new JFrame("Simulation App");
// Class attributes for method setTextFieldPar
private JPanel panelThetaCh = new JPanel();
private JPanel panelSetButton = new JPanel();
private JTextField textFieldThetaCh = new JTextField();
private String StringThetaCh;
// Class attributes for method setButton
private JButton buttonSetPar;
// ========================================================================================================================
// Class methods
// Text field of all simulation parameters
public void setTextFieldPar(JPanel panel, JTextField textField, String latexString){
// Panel layout - FlowLayout
panel.setLayout(new FlowLayout());
panel.setMinimumSize(new Dimension(300, 100));
frame.add(panel);
panel.setAlignmentX(Component.CENTER_ALIGNMENT);
JLabel labelText = new JLabel("text");
panel.add(labelText);
// Create text field
textField = new JTextField(13);
panel.add(textField);
}
// Button "Set Parameters"
public void setButton (JPanel panel){
panel.setLayout(new GridLayout(4, 0));
panel.setMaximumSize(new Dimension(200, 100));
frame.add(panel);
panel.setAlignmentX(Component.CENTER_ALIGNMENT);
buttonSetPar = new JButton("Set Parameters");
panel.add(buttonSetPar);
}
// Monitor input in text field
public void monitorTextField() {
buttonSetPar.addActionListener(new ActionListener() {
public void actionPerformed (ActionEvent e) {
// Extract numbers entered in text field for the parameters
StringThetaCh = textFieldThetaCh.getText();
if (StringThetaCh.equals("")) {
JFrame errorWindow = new JFrame("Error");
errorWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
errorWindow.setLocationRelativeTo(null);
JOptionPane.showMessageDialog(errorWindow, "At least one text field is empty, please enter numerical values");
}
}
});
}
// Constructor
public aaaaa(){
frame.setSize(350, 800);
frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));
// Text field for parameters
setTextFieldPar(panelThetaCh, textFieldThetaCh, "\\theta_{CH}");
// Button for set parameter
setButton(panelSetButton);
// Monitoring input in text field
monitorTextField();
}
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
aaaaa window2 = new aaaaa();
window2.frame.setVisible(true);
}
});
}
}
答案 0 :(得分:2)
您已经在类声明中创建了文本字段:
private JTextField textFieldThetaCh = new JTextField();
然后将其传递给方法setTextFieldPar
,然后在那里创建另一个添加到面板的文本字段:
textField = new JTextField(13);
panel.add(textField);
因此,类变量textFieldThetaCh
不是添加到面板的类变量,因此用户无法访问。
只需删除setTextFieldPar
中新文本字段的创建即可。
以下是正在发生的事情的直观表示:
答案 1 :(得分:1)
我只是直接使用textFieldThetaCh而不将其作为婴儿车发送 当您在textField
上键入文本时,您正在从textFieldThetaCh中获取文本$addresses = Import-Csv -Path .\test.csv -Header code, address
$files = ls .\*.pdf
foreach ($file in $files) {
$file_code = $file.name.Split('_')[1]
$addresses | where { $_.code -eq $file_code } | select address
# ...send email...
}
}
答案 2 :(得分:0)
你的按钮actionPerformed是在构造函数中的monitorTextField()内。这在开始时被激活但之后从未被调用(指的是monitorTextField())。 将actionPerformed放在函数之外的某个位置,以便它可以在按下按钮的任何时候运行,并且它应该可以工作。