简体   繁体   English

如何在不同类别的jtextarea上打印文本消息

[英]How to print text messages on jtextarea from a different class

I created a console based program that allowed users to take a math quiz. 我创建了一个基于控制台的程序,该程序允许用户进行数学测验。 The program basically generated random numbers and determined if the answer was right or wrong. 该程序基本上会生成随机数,并确定答案是对还是错。

Now, I'm trying to create the GUI version of this program and I'm stuck. 现在,我正在尝试创建该程序的GUI版本,但遇到了麻烦。

I want to print text messages in the jtextarea from a different class. 我想从另一个类在jtextarea中打印文本消息。 I've used the get and set methods, but for some reason it doesn't output the text messages. 我使用了get和set方法,但是由于某种原因,它不输出文本消息。 I've done some research on swing workers but I have no idea how to get it to work so I'm trying to avoid using it if possible. 我已经对摇摆工人进行了一些研究,但是我不知道如何使它工作,因此,我尝试避免使用它(如果可能)。

This is not a homework assignment. 这不是家庭作业。 I started learning java 4 months ago so i may not understand advance concepts. 我4个月前开始学习Java,所以我可能不了解高级概念。

I guess what I want to know... do I have to use swing workers? 我想我想知道的是...我必须使用秋千工人吗? all really want to do is generate random numbers and output the result in the jtextarea... it shouldn't freeze the gui, right? 真正想要做的就是生成随机数并在jtextarea中输出结果...它不应该冻结gui,对吗? Anyway, thanks in advance. 无论如何,预先感谢。

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

in your current code: 在您当前的代码中:

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

nothing is being done, use JTextArea.setText(String t) method to set the value 什么也没做,请使用JTextArea.setText(String t)方法设置值

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM