Принимая текст из JTextField и помещая его в JTextArea

Это мой основной класс

public class Main {

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

}

Вот мой класс программы

public class Program {

 public Program(){
 //System.out.println("Let begin...");

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


 }
}

Вот мой класс TextEditor. В этом классе у меня есть JFrame, у которого есть текстовое поле, в котором мне бы хотелось, чтобы результаты преобразования Фаренгейта в celcus были найдены в моем классе Calculator.

public class TextEditor extends JFrame implements ActionListener{
JTextArea textArea;

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

 @Override
 public void actionPerformed(ActionEvent e) {
} loadCalculator()
private void loadCalculator() {
 // TODO Auto-generated method stub
 Calculator c = new Calculator();
 Calculator calculator = new Calculator();
 calculator.setVisible(true);
 calculator.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);

 textArea.setText(String.valueOf(c.fahrenheit));

}

Вот мой класс Calculator, который расширяет JFrame и реализует ActionListener. Здесь находится JFrame с JButton и JTextField рядом с ним. Когда пользователь вводит число в текстовое поле, он вычисляет и преобразует значение Фаренгейта в цель. Как только это будет сделано, я хочу, чтобы результат появился в JTextArea из класса TextEditor.

public class Calculator extends JFrame implements ActionListener{
JButton fToCButton;
JTextField fToC;
****** fahrenheit;
TextEditor a = new TextEditor();

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

 private void degreeConversion() {
 // TODO Auto-generated method stub
 ****** conversion = ******.parse******(fToC.getText());
 fahrenheit = (((conversion -32) * 5) / 9);
 a.textArea.setText(String.valueOf(fahrenheit));
 System.out.println(fahrenheit);
 }


 }
1 ответ

Как уже указывал Эндрю Томпсон, убедитесь, что ваш код по крайней мере компилируется и имеет основной метод. В TextEditor вами классе TextEditor отсутствуют методы loadMenuBar & loadToolBar методы actionPerformed & loadCalculator объединяются вместе, а основной метод отсутствует в обоих классах. Пожалуйста, сформулируйте свой вопрос как можно лучше, чтобы получить хорошие ответы.

Я думаю, причина, по которой результат преобразования не обнаруживается, заключается в том, что объекты TextEditor и Calculator не связаны друг с другом. В методе Calculator.degreeConversion вы пытаетесь передать результат объекту TextEditor, но этот объект создается самим калькулятором (см. Объявление поля), и этот текстовый редактор не отображается. Это можно решить, передав ссылку текстового редактора на конструктор калькулятора.

В коде:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;


/**
 * TextEditor class.
 */
public class TextEditorVersion2 extends JFrame implements ActionListener {
 JTextArea textArea;

 public static void main(String[] args) {
 final TextEditorVersion2 textEditor = new TextEditorVersion2();
 textEditor.setVisible(true);
 final CalculatorVersion2 calculatorVersion2 = new CalculatorVersion2(textEditor);
 calculatorVersion2.setVisible(true);
 }

 public TextEditorVersion2(){
 super("TextMe");
 this.setLayout(new BorderLayout());
 // Freek: these methods are missing.
 //loadMenuBar();
 //loadToolBar();
 // Freek: these methods are missing.
 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);
 }

 @Override
 public void actionPerformed(ActionEvent e) {
 }

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

 textArea.setText(String.valueOf(c.fahrenheit));
 }
}


/**
 * Calculator class.
 */
class CalculatorVersion2 extends JFrame implements ActionListener {
 JButton fToCButton;
 JTextField fToC;
 ****** fahrenheit;
 TextEditorVersion2 a;

 public CalculatorVersion2(final TextEditorVersion2 textEditor) {
 super("Unit Converter");
 this.a = textEditor;
 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();
 }
 }

 private void degreeConversion() {
 // TODO Auto-generated method stub
 ****** conversion = ******.parse******(fToC.getText());
 fahrenheit = (((conversion -32) * 5) / 9);
 a.textArea.setText(String.valueOf(fahrenheit));
 System.out.println(fahrenheit);
 }
}

licensed under cc by-sa 3.0 with attribution.