两个文本框传值java_将值从另一个类传递到表单中的文本框?

在 Java 应用程序中,不建议让处理类扩展表单,因为这会导致创建新的表单实例而非访问原有的。正确的做法是创建一个独立类并返回值。例如,创建一个名为 PrintClass 的类,它有一个 DoWork 方法,该方法执行工作并返回结果。主窗体可以调用这个方法并在后台线程中运行,避免阻塞 UI。使用 C# 5.0 可以通过 `await Task.Run` 在后台执行工作,然后在 UI 线程上更新文本框。若使用 C# 4.0,可以使用 `ContinueWith` 方法达到类似效果。
摘要由CSDN通过智能技术生成

首先,您的处理类不应扩展 Form1 . 这会给你一种幻觉,你可以访问现有表单的方法,但是当你这样做时,它会创建一个全新的表单,而不是显示它 . 该表单使's own set of all instance fields, so you'无法访问主表单的控件 . 即使这样可行(并且它赢得了't) it'不是一个设计良好的解决方案 .

这样做的正确方法实际上要容易得多 . 你只需要让你的另一个类从它的方法中返回一个值:

public class PrintClass

{

public string DoWork()

{

Thread.Sleep(2000);//placeholder for real work.

return "Process Completed";

}

}

现在,您的主窗体可以调用该方法并将返回值附加到文本框 .

执行此操作后,您将在工作发生时阻止该UI线程,从而防止重新绘制表单或处理任何其他事件 . 您需要在后台线程中完成工作,然后编组回UI线程以使用结果更新UI . 有很多方法可以做到这一点,但如果你使用 await C#5.0是最简单的方法:

public class Form1 : Form

{

private void SomeEventHandler(object sender, EventArgs args)

{

string result = await Task.Run(()=>new PrintClass().DoWork());

TboxPrint.AppendText(result);

}

}

如果你需要一个C#4.0解决方案,你可以使用 ContinueWith ,这或多或少是上面要翻译的内容,但它不是那么干净的语法 .

public class Form1 : Form

{

private void SomeEventHandler(object sender, EventArgs args)

{

Task.Factory.StartNew(()=>new PrintClass().DoWork())

.ContinueWith(t => TboxPrint.AppendText(t.Result)

, CancellationToken.None

, TaskContinuationOptions.None

, TaskScheduler.FromCurrentSynchronizationContext());

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过使用Java的GUI组件来实现将二元运算符算法表达式输入一个文本框,另一个文本框显示值的功能。以下是实现的步骤: 1. 导入相关的:需要先导入JFrame、JPanel、JLabel、JTextField、JButton等相关的。 2. 创建GUI界面:使用JFrame创建一个GUI窗口,并在窗口上添加一个JPanel面板组件和两个JLabel、两个JTextField、一个JButton等组件。 3. 绑定事件监听器:使用ActionListener绑定JButton按钮的事件监听器,当点击按钮时,从输入文本框获取算法表达式,计算表达式的值并在输出文本框显示结果。 4. 实现计算功能:使用Stack实现二元运算符算法表达式的计算功能。 下面是一个简单的Java代码示例,实现了将二元运算符算法表达式输入一个文本框,另一个文本框显示值的功能: ```java import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Calculator extends JFrame implements ActionListener { private JPanel panel; private JLabel inputLabel, outputLabel; private JTextField inputField, outputField; private JButton calculateButton; public Calculator() { // 初始化GUI界面 panel = new JPanel(new GridLayout(3, 2)); inputLabel = new JLabel("输入算法表达式:"); inputField = new JTextField(""); outputLabel = new JLabel("结果:"); outputField = new JTextField(""); outputField.setEditable(false); calculateButton = new JButton("计算"); calculateButton.addActionListener(this); panel.add(inputLabel); panel.add(inputField); panel.add(outputLabel); panel.add(outputField); panel.add(calculateButton); add(panel); // 设置窗口属性 setTitle("二元运算符算法表达式计算器"); setSize(400, 150); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } // 计算按钮的事件监听器 public void actionPerformed(ActionEvent e) { String input = inputField.getText(); if (input.isEmpty()) { outputField.setText(""); return; } Stack<Integer> operands = new Stack<>(); Stack<Character> operators = new Stack<>(); for (int i = 0; i < input.length(); i++) { char c = input.charAt(i); if (c >= '0' && c <= '9') { int num = 0; while (i < input.length() && input.charAt(i) >= '0' && input.charAt(i) <= '9') { num = num * 10 + (input.charAt(i) - '0'); i++; } i--; operands.push(num); } else if (c == '+' || c == '-' || c == '*' || c == '/') { while (!operators.empty() && hasPrecedence(operators.peek(), c)) { operands.push(applyOperation(operators.pop(), operands.pop(), operands.pop())); } operators.push(c); } } while (!operators.empty()) { operands.push(applyOperation(operators.pop(), operands.pop(), operands.pop())); } outputField.setText(String.valueOf(operands.pop())); } // 判断运算符优先级 private boolean hasPrecedence(char op1, char op2) { if ((op1 == '*' || op1 == '/') && (op2 == '+' || op2 == '-')) return false; else return true; } // 进行运算 private int applyOperation(char op, int b, int a) { switch (op) { case '+': return a + b; case '-': return a - b; case '*': return a * b; case '/': if (b == 0) throw new UnsupportedOperationException("Cannot divide by zero"); return a / b; } return 0; } public static void main(String[] args) { new Calculator(); } } ``` 此代码示例使用了Stack来实现二元运算符算法表达式的计算功能。在实际开发,可能需要根据具体的需求进行更改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值