当前位置: 首页 > 知识库问答 >
问题:

当textField位于不同的面板中时,textField.getText()不工作(与Button.AddActionListener相比)

李睿
2023-03-14

(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);
        } 
    });
}

}

共有1个答案

范楚
2023-03-14

您已经在类声明中创建了文本字段:

private JTextField textFieldThetaCh = new JTextField();

然后将其传递给方法SettextFieldPar,并在其中创建另一个添加到面板中的文本字段:

textField = new JTextField(13);
panel.add(textField);

因此,类变量TextFieldTheTach不是添加到面板中的变量,因此用户无法访问。

只需在SettextFieldPAR中删除新文本字段的创建,它就可以工作了。

下面是正在发生的事情的可视化表示:

  1. 在类声明中:
 类似资料:
  • 我用JavaSE7安装了netbeans,javafx示例运行良好。在scenebuilder中,我可以为控制器中使用定义和注释的每个控件选择一个ID。然而,我喜欢我组织的项目。当我创建一个新包,并将我的FXML文件移动到那里时,(myapp/views),控制器将保持在它所在的根目录中- 我知道FXML中的“控制器类”,但是因为我没有移动我的控制器,所以不应该改变它。 更具体地说,当我的控制器和

  • 在我的应用程序中,我有一个使用加速器的屏幕。我使用功能键F3在我的应用程序中执行一个操作。它每次都工作得很好,但是当我在这个屏幕上单击任何文本字段时,功能键都不执行。 当我单击textfield然后按F3功能键时,它不起作用。有人知道解决办法?

  • 尝试获得一个简单的isset表单提交,以检查是否在同一页面内点击了post请求,但我无法使其工作? 我希望这句话能在书页上呼应“OK”?我还从实际工作中删减了很多不必要的代码,因为我只是在这里测试原理。但我想我不明白它是如何工作的,因为它是将表单内容发送到URL的,只是我不知道在单击submit按钮后如何运行单独的php代码。

  • 问题内容: 我想了解最佳实践,即如何在AngularJS中设置路由和模板,以向访问者显示不同的前台和登录区域,然后显示仪表板以在相同的基本URL(’/’)上登录用户。 这两页在结构上完全不同,并且还需要不同的资产。 为网站的两个部分设置两个不同的应用程序是否更好,但是我将如何管理这两个部分之间的会话? 还是在主体标签之间没有任何内容的“空”布局将不同的模板加载到其中,并为前部分和仪表板部分进行单独

  • 我正在尝试在我网站上的图表上应用缩放功能。或多或少,图表的实际代码是我在以下CodePen中添加的代码:https://codepen.io/leonardodaga/pen/eYNZdVV 此示例有效,但我正在尝试使用不同的 xAxis 类型(不是“时间”),并使用回调来格式化 xAxis 刻度线(现在在 CodePen 中注释): 移除类型:“时间”缩放结束工作。我正在做的事情有问题吗?

  • 当我试图将@Aspect映射到SettingService中定义的方法之一时,问题就开始了。这样地: 我的服务是这样的: 不知道为什么,在方法()执行后没有调用方面。神秘的是,方面可以与其他类一起工作/当类被注入类型为Blablabla$$EnhancerBySpringCGLIB时,这意味着什么?谢谢。