我是SO的新手,我在java中设计了一个表单,我添加了三个按钮提交,清除和显示记录。我需要获取提交事件的数据并将其传递给txt文件,我想在显示记录按钮点击事件上显示整个记录。我需要你们快速解决,我的时间已经不多了。这是我的代码:
import java.awt.*; //import older gui library for content pane
import javax.swing.*; //import newer gui library for labels, textfields, and button
import java.awt.event.*; //import gui event action library
import javax.swing.JRadioButton;
public class CustomerRecord extends JFrame implements ActionListener {
// declare labels used on GUI screen
private JLabel labelId, labelName, labelGender,labelcategory, labelPItem, labeldiscount;
private JLabel labelError, labelRegistration;
private JTextField textId, textName, textGender, textState, textcategory, textPItem, textdiscount;
// declare button used on GUI screen
private JButton submitButton, clearButton, readButton;
final JRadioButton jRadioMale = new JRadioButton("Male");
final JRadioButton jRadioFemale = new JRadioButton("Female");
// declare content pane
private Container contentPane;
public CustomerRecord() {
createGUI();
} // ends constructor
private void createGUI() {
try {
// get content pane and set the layout to null
contentPane = getContentPane();
contentPane.setLayout(null); //free-form layout
setFont(new Font("TimesRoman", Font.ITALIC, 14));
// create the name label
labelId = new JLabel(); //instantiate new JLabel
labelId.setText("C.ID"); //set label text to name
labelId.setLocation(38, 10); //set location of JLabel
labelId.setSize(200, 25); //set size of JLabel
labelId.setForeground(Color.BLACK);//set initial background color
contentPane.add(labelId); //add JLabel to content pane
// create the name text box
textName = new JTextField(); //instantiate new JTextField
textName.setText(""); //clear JTextField
textName.setToolTipText("Please enter ID");
textName.setLocation(75, 10); //set location of JTextFfield
textName.setSize(200, 25); //set size of JTextField
contentPane.add(textName); //add jextfield to content pane
// create the address label
labelName = new JLabel();
labelName.setText("Name:");
labelName.setLocation(23, 50);
labelName.setSize(80, 25);
labelName.setForeground(Color.BLACK);
contentPane.add(labelName);
// create the address text box
textName = new JTextField();
textName.setText("");
textName.setToolTipText("Please type in full name");
textName.setLocation(75, 50);
textName.setSize(300, 25);
contentPane.add(textName);
labelGender = new JLabel();
labelGender.setText("Gender");
labelGender.setLocation(30, 90);
labelGender.setSize(300, 25);
labelGender.setForeground(Color.BLACK);
contentPane.add(labelGender);
textGender = new JTextField();
textGender.setText("");
textGender.setToolTipText("M/F");
textGender.setLocation(75, 90);
textGender.setSize(130, 25);
contentPane.add(textGender);
labelcategory = new JLabel();
labelcategory.setText("Category");
labelcategory.setLocation(18, 170);
labelcategory.setSize(300, 25);
labelcategory.setForeground(Color.BLACK);
contentPane.add(labelcategory);
textcategory = new JTextField();
textcategory.setText("");
textcategory.setToolTipText("Item Type (Grocery)");
textcategory.setLocation(75, 170);
textcategory.setSize(130, 25);
contentPane.add(textcategory);
labelPItem = new JLabel();
labelPItem.setText("Total Item");
labelPItem.setLocation(15, 210);
labelPItem.setSize(250, 25);
labelPItem.setForeground(Color.BLACK);
contentPane.add(labelPItem);
textPItem = new JTextField();
textPItem.setText("");
textPItem.setToolTipText("Purchased items must be between start with 1 or 70");
textPItem.setLocation(75, 210);
textPItem.setSize(130, 25);
contentPane.add(textPItem);
labeldiscount = new JLabel();
labeldiscount.setText("Discount");
labeldiscount.setLocation(18, 250);
labeldiscount.setSize(300, 25);
labeldiscount.setForeground(Color.BLACK);
contentPane.add(labeldiscount);
textdiscount = new JTextField();
textdiscount.setText("");
textdiscount.setToolTipText("Entered Value must be containing ' % '");
textdiscount.setLocation(75, 250);
textdiscount.setSize(130, 25);
contentPane.add(textdiscount);
submitButton = new JButton();
submitButton.setText("Submit");
submitButton.setToolTipText("Click \"submit \" when the form is completely filled out");
submitButton.setLocation(125, 450);
submitButton.setSize(100, 30);
contentPane.add(submitButton);
submitButton.addActionListener(this);
readButton = new JButton();
readButton.setText("Show Records");
readButton.setToolTipText("Click Show Record if you want to check record");
readButton.setLocation(225, 350);
readButton.setSize(200, 30);
contentPane.add(readButton);
readButton.addActionListener(this);
clearButton = new JButton();
clearButton.setText("Clear");
clearButton.setToolTipText("Click \"clear \" when you want to clear the form");
clearButton.setLocation(250, 450);
clearButton.setSize(100, 30);
contentPane.add(clearButton);
clearButton.addActionListener(this);
// create the error label
labelError = new JLabel();
labelError.setText("Please correct items in red");
labelError.setLocation(150, 500);
labelError.setSize(190, 25);
labelError.setForeground(Color.RED);
labelError.setVisible(false);
contentPane.add(labelError);
// create the registration label
labelRegistration = new JLabel();
labelRegistration.setText("Thank you for your entry.");
labelRegistration.setLocation(145, 500);
labelRegistration.setSize(190, 25);
labelRegistration.setForeground(Color.BLACK);
labelRegistration.setVisible(false);
contentPane.add(labelRegistration);
setTitle("Customer Form"); //set window title
setSize(475, 600); //set window size
setVisible(true);
} catch (Exception e) {
}
}// ends creatGUI method.
public static void main(String args[]) {
CustomerRecord application = new CustomerRecord();
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}// ends main
public void actionPerformed(ActionEvent event) {
try {
if (event.getActionCommand().equals("Submit")) {
if (checkID() & checkName() & checkGender() & check() & checkPItem() & checkdiscount()) {
labelRegistration.setVisible(true);
labelError.setVisible(false);
submitButton.removeActionListener(this);
clearButton.removeActionListener(this);
} else {
labelError.setVisible(true);
labelRegistration.setVisible(false);
}
} if (event.getActionCommand().equals("Clear"))
{
textName.setText("");
textName.setText("");
textGender.setText("");
textState.setText("");
textcategory.setText("");
textPItem.setText("");
textdiscount.setText("");
labelError.setVisible(false);
labelRegistration.setVisible(false);
labelId.setForeground(Color.BLACK);
labelName.setForeground(Color.BLACK);
labelGender.setForeground(Color.BLACK);
labelcategory.setForeground(Color.BLACK);
labelPItem.setForeground(Color.BLACK);
labeldiscount.setForeground(Color.BLACK);
}
} catch (Exception e) { }
}
private boolean checkID() {
if (textName.getText().length() == 0) {
labelId.setForeground(Color.RED); //name is not correct
return false;
} else {
labelId.setForeground(Color.BLACK); //name is correct
return true;
}
}
private boolean checkName() {
if (textName.getText().length() < 5) {
labelName.setForeground(Color.RED);
return false;
} else {
labelName.setForeground(Color.BLACK);
return true;
}
}
private boolean checkGender() {
if (textGender.getText().length() == 0) {
labelGender.setForeground(Color.RED);
return false;
} else {
labelGender.setForeground(Color.BLACK);
return true;
}
}
private boolean check() {
try {
if (textcategory.getText().length() == 5) {
labelcategory.setForeground(Color.BLACK);
return true;
} else {
labelcategory.setForeground(Color.RED);
return false;
}
} catch (Exception e) {
labelcategory.setForeground(Color.RED);
return false;
}
}
private boolean checkPItem() {
if (textPItem.getText().startsWith("1") || textPItem.getText().startsWith("70"))
{
labelPItem.setForeground(Color.BLACK);
return true;
} else {
labelPItem.setForeground(Color.RED);
return false;
}
}
private boolean checkdiscount() {
if (textdiscount.getText().contains("%"))
{
labeldiscount.setForeground(Color.BLACK);
return true;
} else
{
labeldiscount.setForeground(Color.RED);
return false;
}
}
}
答案 0 :(得分:1)
首先让我指出一些有缺陷的(但不是致命的)设计。您的所有checkXxx()
方法都处理从字段中获取文本的过程。我会改变它们接受字符串作为参数。原因是您需要actionPerformed
范围内的文本字段中的字符串值,以便将它们保存到文本文件中。
我需要获取有关提交事件的数据并将其传递给txt文件
您应该使用FileWriter
并使用此构造函数
public FileWriter(String fileName, boolean append) throws IOException
-
在给定文件名的情况下构造一个FileWriter对象,该文件名带有一个布尔值,指示是否附加写入的数据。
将允许您使用其append
方法之一附加到该文件。
我希望在节目记录按钮点击事件中显示整个记录
不确定您是否想要阅读所有记录或根据名称或某事读取单个记录。对于前者,文本组件使用read()
方法将整个文档读取到文本组件(比如文本区域)。对于后者,您将需要逐行读取并检查该行的某些部分是否与您要匹配的数据匹配。这是基本的东西。您可以在Basic I/O了解更多信息。例如,类似的(假设您的记录/行是逗号分隔值):
BufferedReader reader = new Bufferedreader(new FileReader(new File("file")));
String line = null;
while ((line = reader.readLine()) != null) {
String[] tokens = line.split(",");
String firstName = tokens[0].trim();
if (firstName.equals(firstNameFieldtext)) {
// use the tokens to populate the fields.
break;
}
}
reader.close();
上面的代码只是逐行读取,将每一行拆分成一个数组。它检查第一个标记以查看名称是否与字段值匹配。如果是,则可以使用数组中的值来填充字段。
如果您想将整个文件读取到文本区域,您可以简单地将相同的BufferedReader
传递给read
方法,如textArea.read(reader, null);
答案 1 :(得分:1)
在我提供答案之前,我已经错误地修改了一些错误的代码。
您的代码:
// create the name text box
textName = new JTextField(); //instantiate new JTextField
textName.setText(""); //clear JTextField
textName.setToolTipText("Please enter ID");
textName.setLocation(75, 10); //set location of JTextFfield
textName.setSize(200, 25); //set size of JTextField
contentPane.add(textName); //add jextfield to content pane
修改后的代码:
// create the name text box
textId = new JTextField(); //instantiate new JTextField
textId.setText(""); //clear JTextField
textId.setToolTipText("Please enter ID");
textId.setLocation(75, 10); //set location of JTextFfield
textId.setSize(200, 25); //set size of JTextField
contentPane.add(textId); //add jextfield to content pane
============================ 然后我为读取文件和写入文件
定义了新的两种方法 private void writeToFile(String list) throws IOException{
///
File f = new File("E:\\test1.txt");
System.out.println(f);
FileWriter fw = new FileWriter(f,true);
System.out.println(fw);
try{
BufferedWriter bw = new BufferedWriter(fw);
System.out.println(bw);
bw.newLine();
bw.write(list);
bw.flush();
bw.close();
}
catch(Exception e){
System.out.println(e);
}
///
}
private void readFile(){
File f = new File("E:\\test1.txt");
try{
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
while(br.ready()){
System.out.println(br.readLine());
}
}catch(Exception e){
System.out.println(e);
}
}
然后在actionPerforemed(ActionEvent e)中添加了新的if语句来处理来自&#34; Show Records&#34;没有添加它的按钮。在它旁边我调用readFile(),它将从读取文件中打印所有行。(这个读取文件是你要写的文件。)
//Newly added event for Show Records button.
if (event.getActionCommand().equals("Show Records")) {
readFile();
}
然后在actionPerforemed(ActionEvent e)和if语句中提交按钮
public void actionPerformed(ActionEvent event) {
try {
if (event.getActionCommand().equals("Submit")) {
if (checkID() & checkName() & checkGender() & check() & checkPItem() & checkdiscount()) {
labelRegistration.setVisible(true);
labelError.setVisible(false);
//concatnating the collected data to be written.
String toBewrite = textId.getText() + "," + textName.getText();
toBewrite = toBewrite + "," + textGender.getText() + "," + textcategory.getText();
toBewrite = toBewrite + "," + textPItem.getText() + "," + textdiscount.getText();
///calling the writeToFile method where the relavent data to be updated to the file.
writeToFile(toBewrite);
////
submitButton.removeActionListener(this);
clearButton.removeActionListener(this);
} else {
labelError.setVisible(true);
labelRegistration.setVisible(false);
}
}
if (event.getActionCommand().equals("Clear")) {
textName.setText("");
textName.setText("");
textGender.setText("");
textState.setText("");
textcategory.setText("");
textPItem.setText("");
textdiscount.setText("");
labelError.setVisible(false);
labelRegistration.setVisible(false);
labelId.setForeground(Color.BLACK);
labelName.setForeground(Color.BLACK);
labelGender.setForeground(Color.BLACK);
labelcategory.setForeground(Color.BLACK);
labelPItem.setForeground(Color.BLACK);
labeldiscount.setForeground(Color.BLACK);
}
//Newly added event for Show Records button.
if (event.getActionCommand().equals("Show Records")) {
readFile();
}
} catch (Exception e) {
}
}