gpt4 book ai didi

java - JTextArea问题

转载 作者:行者123 更新时间:2023-12-01 12:14:27 26 4
gpt4 key购买 nike

这是我的程序发生的情况,

  1. 运行程序,首先弹出Jframe(文本编辑器)。
  2. 我单击计算器按钮,会弹出一个 Jframe(单位转换器),其中包含 1 个按钮和 1 个文本字段。
  3. 我在第一个文本字段中输入数字(华氏度到摄氏度),点击“华氏度到摄氏度”按钮,但转换结果不会附加到文本编辑器中的文本区域。
  4. 我关闭“单位转换器”窗口,再次单击计算器按钮,我第一次在“华氏度到摄氏度”字段中输入的文本仍然存在。第二次单击计算器按钮时,会发生转换并将其附加到文本区域。

我希望在按下“华氏温度到摄氏度”按钮后将数据附加到“文本编辑器”文本区域。

我有四个不同的类(class)(这是我的教授希望我们的项目设置的方式):/这是我的“主”类(class)

public class Main {

public static void main(String[] args) {
// TODO Auto-generated method stub
Program p = new Program();
}

}

接下来,这是我的“程序”类(class)

import javax.swing.JFrame;

public class Program {

public Program(){

TextEditor textEditor = new TextEditor();
textEditor.setVisible(true);
textEditor.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Calculator calculator = new Calculator();
calculator.setVisible(false);
calculator.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);

}
}

这是我的“TextEditor 类”,我省略了一些按钮,因为这些按钮不会导致任何问题。

public class TextEditor extends JFrame implements ActionListener{
JTextArea textArea;
JButton calculatorButton;

Calculator c = new Calculator();

public TextEditor(){
super("TextMe");
this.setLayout(new BorderLayout());
loadMenuBar();
loadToolBar();
loadTextArea();
this.pack();
}

private void loadTextArea() {
// TODO Auto-generated method stub
textArea = new JTextArea();
textArea.setPreferredSize(new Dimension(800,600));
this.add(BorderLayout.CENTER, textArea);
}

private void loadToolBar() {
// TODO Auto-generated method stub

JToolBar toolBar;
// CALCULATOR BUTTON
calculatorButton = new JButton(new ImageIcon(this.getClass().getResource("/images/calculator.png")));
calculatorButton.addActionListener(this);

// TOOL BAR
toolBar = new JToolBar(JToolBar.HORIZONTAL);
toolBar.add(calculatorButton);
this.add(BorderLayout.PAGE_START, toolBar);
}

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource() == calculatorButton){
loadCalculator ();

}
}

private void loadCalculator() {
// TODO Auto-generated method stub
{
c.setVisible(true);
c.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
this.setLayout(new FlowLayout());

}
if(!c.fToC.getText().isEmpty()){
textArea.setText(String.valueOf(c.fahrenheit));
}
}

}

最后,这是我的“计算器”类(class)。再次抱歉,这里有太多代码。

public class Calculator extends JFrame implements ActionListener{
JButton fToCButton;
JTextField fToC;
double fahrenheit;

public Calculator(){
super("Unit Converter");
this.setLayout(new FlowLayout());

fToC = new JTextField(5);
fToCButton = new JButton("Ferenheit To Celcius");
fToCButton.addActionListener(this);

add(fToCButton, BorderLayout.WEST);
add(fToC);

this.pack();

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource() == fToCButton){
degreeConversion();

}

}

public void degreeConversion() {
// TODO Auto-generated method stub
double conversion = Double.parseDouble(fToC.getText());
fahrenheit = (((conversion -32) * 5) / 9);

}
}

最佳答案

Calculator 类独立于 TextArea 类。我在您的代码中看到的问题如下:

  1. 在Program类中不需要实例化Calculator类
  2. 在 TextArea 类中不要事先实例化 Calculator 类,应该在 loadCalculator 方法中实例化它。
  3. 使 Calculator 扩展 JDialog 并将 TextArea 类的实例传递给其构造函数,并将此对话框设置为模态对话框。
  4. 进行计算时,值存储在 double 变量中。你可以做两件事,当按下按钮并调用 DegreeConversion 时,调用 TextArea 类的方法将 double 值设置为 TextArea 类中的 textArea,或者当窗口关闭时(添加其监听器)然后调用 DegreeConversion 或 TextArea updateValue 方法。

对于第 4 点,它应该类似于以下内容:

public class TextArea extends JFrame {
...
private JTextArea textArea;
private void loadCalculator() {
Calculator c = new Calculator(this)
c.setVisible(true);
}

public void updateValue(String str) {
textArea.setText(str);
}
}

public class Calculator extends JDialog() {
private TextArea parent;
public Calculator(TextArea parent) {
super(parent, true); //or something like this to make it dialog I dont remember the exact syntax
this.parent = parent;
...
}
...
private void degreeConversion() {
double f = ...
parent.updateValue(String.valueOf(f));
}
}

关于java - JTextArea问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27098054/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com