java - 如何将文本字段从主类传递到另一个类

标签 java swing constructor jtextfield swingworker

如何将文本字段从主类 pri 传递到 CounterTask1 类。

下面的程序是一个例子。真实的程序包含类似的结构。

在 CounterTask1 类中,文本字段添加另一个字符串。如果单击打印按钮,它应该在终端中打印文本字段。

提前谢谢。

import java.io.*;
import javax.swing.*; 
import java.awt.event.*;  
import javax.swing.SwingWorker;
import java.util.List;
public class pri 
{
 JFrame Frame1 = new JFrame();
 JLabel SourceLabel1    = new JLabel("Source Name"); 
 JTextField SourceField1 = new JTextField(20);
 public void MainFrame()        
 {
  final CounterTask1 task1 = new CounterTask1();
  Frame1.setLayout(null);    
  JButton Print = new JButton("Print");
  Print.setBounds(10,10,100,30);
  Print.addActionListener(new ActionListener()
  { public void actionPerformed(ActionEvent ae)
    { String sourcename=SourceField1.getText();
      System.out.println("Printing in Terminal "+sourcename);
      task1.execute();          } });

  JButton Exit =  new JButton("Exit");
  Exit.setBounds(10,50,100,30);
  Exit.addActionListener(new ActionListener()
  { public void actionPerformed(ActionEvent ae)
    { System.exit(0); } }); 

        SourceField1.setBounds(130,10,100,30);
        Frame1.add(SourceField1);
        Frame1.add(Print);
        Frame1.add(Exit);
        Frame1.pack();

        Frame1.setSize(250,150);
        Frame1.setLocation(100,100);
        Frame1.setVisible(true);
        Frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

} //MainFrame

public static void main(String[] args)
{   SwingUtilities.invokeLater(new Runnable()
    { public void run()
        {
            pri frame = new pri();
            frame.MainFrame();  }   });
}
  } 

class CounterTask1 extends SwingWorker<Integer, Integer> 
 {
protected Integer doInBackground() throws Exception
 {

        String one = SourceField1.getText();
        String two = "Thanks !";
        String Addst = one +two ;
        System.out.println("printing in Task" + Addst);
        return 0;

  }// protected main class

protected void process(List<Integer> chunks)
{
    System.out.println(chunks);  
}

} // counter task

最佳答案

我会做不同的事情 - 将文本传递给 SwingWorker 的构造函数:

  Print.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent ae) {
        String sourcename = SourceField1.getText();
        System.out.println("Printing in Terminal " + sourcename);

        // note change in constructor
        // this way getText() is called on the EDT.
        CounterTask1 task1 = new CounterTask1(SourceField1.getText());
        task1.execute();
     }
  });

在另一个类中:

class CounterTask1 extends SwingWorker<Integer, Integer> {
   private String text;

   public CounterTask1(String text) {
      this.text = text;
   }

   protected Integer doInBackground() throws Exception {

      String one = text;
      String two = "Thanks !";
      String Addst = one + two;
      System.out.println("printing in Task" + Addst);
      return 0;
   }

注意:

  • 如果您需要第二个类调用第一个类的方法,那么您将需要将第一个类的引用传递到第二个类中,类似于我上面传递字符串的方式。
  • 请确保不要从 doInBackground() 方法进行 Swing 调用。
  • 学习并遵守 Java 命名约定,以便我们可以更好地理解您将来发布的代码。类名应以大写字母开头,字段、变量和方法名称应以小写字母开头。

关于java - 如何将文本字段从主类传递到另一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16679210/

相关文章:

java - invokeAndWait Java

java - 图像背景,覆盖油漆?

c# - 形成 Load() 或不形成 Load()

c++ - 在构造函数中初始化 vector - C++

javascript - 将 props 传递给子组件

java - 如何在 JavaFX 中使用 try-catch?

java - ActionPerformed 方法不适用于另一个类

java - 如何将Spring Boot应用程序部署到AWS Elastic Beanstalk?

java - Primefaces LazyDataModel : (Outdated)

java - Java VM EXCEPTION_ACCESS_VIOLATION 的可能原因?