我创建了一个基于控制台的程序,该程序允许用户进行数学测验。该程序基本上会生成随机数,并确定答案是对还是错。

现在,我正在尝试创建该程序的GUI版本,但遇到了麻烦。

我想从另一个类在jtextarea中打印文本消息。我使用了get和set方法,但是由于某种原因,它不输出文本消息。我已经对摇摆工人进行了一些研究,但是我不知道如何使它工作,因此,我尝试避免使用它(如果可能)。

这不是家庭作业。我4个月前开始学习Java,所以我可能不了解高级概念。

我想我想知道的是...我必须使用秋千工人吗?真正想要做的就是生成随机数并在jtextarea中输出结果...它不应该冻结gui,对吗?无论如何,预先感谢。



package algorithmsProgramGUI.view;


import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import java.awt.Toolkit;
import java.awt.Panel;

import javax.swing.JLabel;

import java.awt.Font;

import javax.swing.text.JTextComponent;
import javax.swing.JFormattedTextField;

import java.awt.Choice;
import java.awt.Label;

import javax.swing.JPopupMenu;

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.TextArea;
import java.awt.Button;

import org.eclipse.wb.swing.FocusTraversalOnArray;

import javax.swing.JTextArea;
public class ProFrame extends JFrame {

	/**
	 *
	 */
	private static final long serialVersionUID = -7222968352076888482L;


	private static JTextArea textArea;


	private JPanel contentPane;







	public static JTextArea getTextArea() {

		return textArea;
	}


	public static void setTextArea(JTextArea string) {
		ProFrame.textArea = string;
	}


	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					ProFrame frame = new ProFrame();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public ProFrame() {





		setIconImage(Toolkit.getDefaultToolkit().getImage(ProFrame.class.getResource("/algorithmsProgramGUI/resources/AlgorithmsLogo.png")));
		setTitle("Algorithms");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 864, 590);
		contentPane = new JPanel();
		contentPane.setToolTipText("Choose a test to take");
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);

		JLabel lblSelectTest = new JLabel("Select Test :");
		lblSelectTest.setFont(new Font("Times New Roman", Font.BOLD, 15));
		lblSelectTest.setBounds(35, 42, 95, 14);
		contentPane.add(lblSelectTest);

		JFormattedTextField formattedTextField = new JFormattedTextField();
		formattedTextField.setToolTipText("Input answer here");
		formattedTextField.setBounds(419, 415, 108, 24);
		contentPane.add(formattedTextField);

		Label label = new Label("Answer :");
		label.setFont(new Font("Times New Roman", Font.BOLD, 15));
		label.setBounds(339, 415, 74, 22);
		contentPane.add(label);




		Panel status_panel = new Panel();
		status_panel.setFont(new Font("Times New Roman", Font.PLAIN, 12));
		status_panel.setBounds(220, 445, 558, 75);
		contentPane.add(status_panel);

		Button button_1 = new Button("Next Question");
		button_1.setFont(new Font("Times New Roman", Font.BOLD, 15));
		button_1.setBounds(545, 415, 154, 22);
		contentPane.add(button_1);



		JTextArea textArea = new JTextArea();
		textArea.setEditable(false);
		textArea.setBounds(257, 62, 521, 305);
		contentPane.add(textArea);




		Choice Test = new Choice();
		Test.setFont(new Font("Times New Roman", Font.BOLD, 12));
		Test.setBounds(35, 62, 130, 20);
		Test.add("Practice Quiz");
		Test.add("Test 1");
		Test.add("Test 2");
		contentPane.add(Test);






		Button button = new Button("Generate Test");
		button.setFont(new Font("Times New Roman", Font.BOLD, 15));
		button.setBounds(35, 235, 117, 26);
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String s = Test.getSelectedItem().toString();
				textArea.setText(s);
				textArea.setFont(new Font("Times New Roman", Font.BOLD, 12));

				if (Test.getSelectedItem().equalsIgnoreCase("Practice Quiz")) {


				algorithmsProgramGUI.view.PracticeQuizGUI.runPracticeQuizGUI();

				}


				if (Test.getSelectedItem().equalsIgnoreCase("Test 1")) {

					textArea.setText("Test 1 is not available at this time.");

				}


				if (Test.getSelectedItem().equalsIgnoreCase("Test 2")) {
					textArea.setText("Test 2 is not available at this time.");
				}






			}
		});


		contentPane.add(button);



		contentPane.setFocusTraversalPolicy(new FocusTraversalOnArray(new Component[]{label, formattedTextField, Test, button, status_panel, lblSelectTest, button_1}));
	}
	@SuppressWarnings("unused")
	private static void addPopup(Component component, final JPopupMenu popup) {
		component.addMouseListener(new MouseAdapter() {
			public void mousePressed(MouseEvent e) {
				if (e.isPopupTrigger()) {
					showMenu(e);
				}
			}
			public void mouseReleased(MouseEvent e) {
				if (e.isPopupTrigger()) {
					showMenu(e);
				}
			}
			private void showMenu(MouseEvent e) {
				popup.show(e.getComponent(), e.getX(), e.getY());
			}
		});
	}


	public static void setTextArea(String string) {
		// TODO Auto-generated method stub

	}











}







package algorithmsProgramGUI.view;

import javax.swing.JTextArea;
import javax.swing.text.JTextComponent;

import java.awt.*;

public class PracticeQuizGUI {



	static void runPracticeQuizGUI() {


		// System.out.println("This statement was created in PracticeQuizGUI class.");


		//algorithmsProgramGUI.view.ProFrame.ProFrame().textArea.setText("s");


		//algorithmsProgramGUI.view.ProFrame.getTextArea();

		algorithmsProgramGUI.view.ProFrame.setTextArea("Welcome to the practice quiz.");

		//algorithmsProgramGUI.view.ProFrame.getTextArea();





	}

}

最佳答案

在您当前的代码中:

public static void setTextArea(String string) {
    // TODO Auto-generated method stub
}


什么也没做,使用
JTextArea.setText(String t)方法设置值

关于java - 如何在不同类别的jtextarea上打印文本消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26373647/

10-12 15:30