我在JTextArea和JTextField中设置一些文本时遇到问题......我有点困惑,因为我之前已经在其中设置了文本,事实上我已将它们设置在同一程序的不同类中没有任何问题...我打印出字符串以检查以确保它不是空或只是空“”并且我的字符串确实打印它们应该但他们没有在JTextField / Area中设置。
任何人都可以告诉我它为什么搞乱了吗?
(我已经给你完整的代码,所以你不会被方法调用混淆,但大部分都可能没有必要。你真正需要关注的是run()方法和populateInfo()方法.populateInfo()是应该将测试设置为textArea和textField的地方。)
以下是代码:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.lang.*;
import java.util.*;
import java.io.*;
public class EditDiary extends JApplet implements ActionListener {
private JFrame frame = new JFrame();
private String[] date;
private String[] rest;
private int index = 0;
private int count = 0;
private JLabel lblDate = new JLabel("Date");
private JTextField txtDate = new JTextField();
private JLabel lblDiary = new JLabel("Diary Entry");
private JTextArea txtDiary = new JTextArea(20,30);
private JButton btnDone = new JButton("Done");
private JButton btnCancel = new JButton("Cancel");
public EditDiary(){
JPanel panel1 = new JPanel();
panel1.add(lblDate);
panel1.add(txtDate);
panel1.add(lblDiary);
panel1.add(txtDiary);
panel1.add(btnDone);
panel1.add(btnCancel);
add(panel1);
btnDone.addActionListener(this);
btnCancel.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btnDone) {
try {
editInfo();
}
catch (Exception ex) {
}
finally {
}
}
else if (e.getSource() == btnCancel) {
// Haven't done anything here yet
}
}
public void run(String[] sDate, String[] sRest, int iIndex, int iCount) {
date = sDate;
rest = sRest;
index = iIndex;
count = iCount;
JApplet applet = new EditDiary();
frame.add(applet);
frame.setTitle("Edit Diary Entry");
frame.setLocationRelativeTo(null); // Center the frame
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setSize(1280, 800);
frame.setLocationRelativeTo(null); // Center the frame
frame.setVisible(true);
populateInfo();
}
public static void main(String[] args) {
}
public void populateInfo() {
// System.out.println(date[index]);
// System.out.println(rest[index]);
txtDate.setText(date[index]);
txtDiary.setText(rest[index]);
}
public void editInfo() throws Exception {
BufferedWriter out = new BufferedWriter(new FileWriter("Diary.txt"));
date[index] = txtDate.getText();
rest[index] = txtDiary.getText();
for(int i = 0; i < count; ++i) {
out.write(date[i]);
out.write(rest[i]);
}
}
}
答案 0 :(得分:3)
调用run的代码无关紧要......
当您遇到问题时,您不知道代码是什么或不相关。如何调用代码的上下文是相关的。是什么让你觉得我们总能通过查看代码来解决问题。有时我们实际上需要执行代码,以便我们可以看到程序的实际逻辑流程等。
这不是您创建Applet的方式。应该在applet的init()方法中将组件添加到applet中。我建议你阅读How to Make Applets。
您的代码存在的问题是您有2个EditDiary类的实例。一个是Applet,另一个是您尝试添加到框架中的。但是,ActionListener代码仅引用Applet文本组件,而不是引用添加到框架的组件。
您需要重新设计您的计划。也许创建框架的代码应该是一个内部类,这样你就可以创建属于框架而不是applet的变量和监听器。