[英]Linking inputted text info
現在,我有一個GUI,當我單擊“添加客戶”時,會彈出一個框,我可以輸入信息,例如名稱,地址等。 完成此操作后,我單擊“添加客戶”,它將信息添加到.txt文件中。 現在,在原始GUI上有一個“刷新”按鈕,按下該按鈕可將信息輸入到名為“ NameTextCustomers”的文本框中。 它不會這樣做。 我已經研究了好幾個小時,試圖找出答案。 我在代碼中一行顯示“ NameTextCustomers.setText(“此處的文件信息”);”單擊刷新按鈕后,出現“此處的文件信息”字樣,因此該部分可以正常工作。 我假設代碼將插入到那里。 我認為這是我的代碼按照我想要的方式工作的最后一部分。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import java.util.List;
public class FVolume extends JFrame implements ActionListener{
private JTabbedPane jtabbedPane;
private JPanel Customers;
private List<Customer> customers = new ArrayList<Customer>();
JTextArea NameTextCustomers, ExistTextCustomers, NameTextContractors, ExistTextContractors;
JTextField lengthTextPool, widthTextPool, depthTextPool, volumeTextPool;
public FVolume(){
setTitle("Volume Calculator");
setSize (300, 200);
JPanel topPanel = new JPanel();
topPanel.setLayout( new BorderLayout() );
getContentPane().add( topPanel );
createCustomers();
jtabbedPane = new JTabbedPane();
jtabbedPane.addTab("Customer", Customers);
topPanel.add(jtabbedPane, BorderLayout.CENTER);
}
/* CREATE CUSTOMERS */
public JPanel createCustomers(){
Customers = new JPanel();
Customers.setLayout(null);
NameTextCustomers = new JTextArea("Select Add Customer to Add Customer. Select Refresh to Refresh This Pane.");
NameTextCustomers.setLineWrap(true);
NameTextCustomers.setBounds(10, 10, 390, 150);
Customers.add(NameTextCustomers);
JButton Exit = new JButton("Exit");
Exit.setBounds(30,170,80,20);
Exit.addActionListener(this);
Exit.setBackground(Color.white);
Customers.add(Exit);
JButton AddCustomers = new JButton("Add Customer");
AddCustomers.setBounds(130,170,120,20);
AddCustomers.setBackground(Color.white);
Customers.add(AddCustomers);
JButton Refresh = new JButton("Refresh");
Refresh.setBounds(260,170,80,20);
Refresh.setBackground(Color.white);
Customers.add(Refresh);
ExistTextCustomers = new JTextArea();
ExistTextCustomers.setBounds(10, 200, 390, 60);
ExistTextCustomers.setLineWrap(true);
Customers.add(ExistTextCustomers);
final JTextArea custArea = new JTextArea(6, 30);
final JTextArea ExistTextCustomers;
ExistTextCustomers = new JTextArea(2, 30);
ExistTextCustomers.setLineWrap(true);
ExistTextCustomers.setWrapStyleWord(true);
AddCustomers.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Customers.add(new Customer("Customer"));
}
});
Customers.add(custArea);
Customers.add(AddCustomers);
Customers.add(Refresh);
Refresh.setMnemonic('R');
Refresh.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
NameTextCustomers.setText ("File Info Here");
try
{
File custOpen = new File("customer.txt");
FileReader custAreaIn = new FileReader(custOpen);
custArea.read(custAreaIn, custOpen.getAbsolutePath());
ExistTextCustomers.setText("File exists and can be read.");
}
catch (IOException e3){
ExistTextCustomers.setText("The file could not be read." + e3.getMessage());
}
}
}
);
return Customers;
}
class Customer extends JFrame
{
private String[] states = {"AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE",
"FL", "GA", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME",
"MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ",
"NM", "NY", "NC", "ND", "OH", "OK", "OR", "PA", "RI", "SC", "SD",
"TN", "TX", "UT", "VT", "VA", "WA", "WV", "WI", "WY"};
private JComboBox StateList = new JComboBox(states);
private JTextField NameText = new JTextField(25);
private JTextField AddressText = new JTextField(25);
private JTextField CityText = new JTextField(25);
private JTextField ZipText = new JTextField(9);
private JTextField PhoneText = new JTextField(10);
private JTextField ExistTextCustomers = new JTextField(30);
private static final long serialVersionUID = 1L;
private AddCustButtonHandler addCusHandler = new AddCustButtonHandler();
public Customer(String who)
{
popUpWindow (who);
}
public void popUpWindow(final String who) {
final JFrame popWindow;
popWindow = new JFrame(who);
popWindow.setSize(425, 350);
popWindow.setLocation(100, 100);
popWindow.setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container c = new Container();
popWindow.add(c);
c.setLayout(new FlowLayout());
JPanel one = new JPanel();
JPanel two = new JPanel();
JPanel three = new JPanel();
JPanel four = new JPanel();
JPanel five = new JPanel();
JPanel six = new JPanel();
one.add(new JLabel(who + " Name "));
one.add(NameText);
two.add(new JLabel("Address "));
two.add(AddressText);
three.add(new JLabel("City "));
three.add(CityText);
four.add(new JLabel("State "));
StateList.setSelectedIndex(0);
four.add(StateList);
four.add(new JLabel("ZIP"));
four.add(ZipText);
four.add(new JLabel("Phone"));
four.add(PhoneText);
JButton addwho = new JButton("Add " + who);
addwho.setMnemonic('A');
JButton close = new JButton("Exit");
close.setMnemonic('C');
JButton deleteFile = new JButton("Delete File");
deleteFile.setMnemonic('D');
five.add(addwho);
five.add(close);
five.add(deleteFile);
ExistTextCustomers.setEditable(false);
ExistTextCustomers.setHorizontalAlignment(JTextField.CENTER);
six.add(ExistTextCustomers);
c.add(one);
c.add(two);
c.add(three);
c.add(four);
c.add(five);
c.add(six);
deleteFile.setToolTipText("Delete File");
addwho.setToolTipText("Add "+ who);
close.setToolTipText("Exit");
if (who == "Customer")
addwho.addActionListener(addCusHandler);
close.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
NameText.setText("");
AddressText.setText("");
CityText.setText("");
ZipText.setText("");
PhoneText.setText("");
ExistTextCustomers.setText("");
popWindow.dispose();
}
}
);
deleteFile.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ExistTextCustomers.setText("");
if (who.equals("Customer")) {
File file = new File("Customer.txt");
boolean cusFileDeleted = file.delete();
if (cusFileDeleted) {
ExistTextCustomers
.setText("Customer file has been deleted");
} else {
ExistTextCustomers
.setText("There was an error in deleting file");
}
}
}
}
);
}
class AddCustButtonHandler implements ActionListener {
public void actionPerformed(ActionEvent addCusHandler) {
int StateIndex;
try {
File file = new File("Customer.txt");
boolean success = file.createNewFile();
if (success) {
ExistTextCustomers
.setText("Customer.txt file created file added");
} else if (file.canWrite()) {
ExistTextCustomers
.setText("Writing data to Customer.txt, file added");
} else {
ExistTextCustomers.setText("Cannot create file: Customer.txt");
}
try {
FileWriter fileW = new FileWriter("Customer.txt", true);
fileW.write(NameText.getText());
fileW.write(",");
fileW.write(AddressText.getText());
fileW.write(",");
fileW.write(CityText.getText());
fileW.write(",");
StateIndex = StateList.getSelectedIndex();
fileW.write(states[StateIndex]);
fileW.write(",");
fileW.write(ZipText.getText());
fileW.write(",");
fileW.write(PhoneText.getText());
fileW.write("\r\n");
fileW.close();
ExistTextCustomers.setText("A new Customer has been added!");
FileReader fileR = new FileReader("Customer.txt");
BufferedReader buffIn = new BufferedReader(fileR);
String textData = buffIn.readLine();
buffIn.close();
}
catch (IOException e1) {
JOptionPane.showMessageDialog(null, e1.getMessage(), "ERROR", 2);
}
NameText.setText("");
AddressText.setText("");
CityText.setText("");
ZipText.setText("");
PhoneText.setText("");
}
catch (IOException e1) {
}
}
}
public void actionPerformed(ActionEvent event){
}
private void Exit_pressed(){
System.exit(0);
}
}
public static void main(String[] args){
JFrame frame = new FVolume();
frame.setSize(420, 350);
frame.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
}
}
單擊刷新按鈕后,它應該在文本框中輸入信息。
確定,找出您的代碼問題。 花了一些時間,但這並不太復雜。 但是首先,不要在文件中放置過多的類,這是一個不好的做法(並且使遍歷您的代碼更加困難。
問題是,在“客戶”窗口中按“添加客戶”后,您需要將該數據發送到主應用程序窗口。 怎么做?
添加FVolume parent;
在customer
類和改變的構造Customer
類收到不僅是一個字符串,但FVolume的對象:
public Customer(String who, FVolume _parent)
{
popUpWindow (who);
parent = _parent;
}
並且您可以從客戶訪問主窗口。 現在,您需要能夠更改NameTextCustomers
的文本,因此在FVolume類中創建一個新方法,可以從外部進行更改:
public void setField(String str)
{
NameTextCustomers.setText(str);
NameTextCustomers.validate();
}
接下來的事情是當有人在“ Costumer”窗口中按“添加客戶”時調用此方法。 您已經有一個偵聽器,但是讓我們稍微更改一下它的actionPerformed
方法,這樣它不僅可以將String保存到文件中,還可以在NameTextCustomers
設置。 (我沒有把方法的最后幾行放在那兒,但那里沒有變化)
public void actionPerformed(ActionEvent addCusHandler) {
int StateIndex;
try {
File file = new File("Customer.txt");
StringBuilder sb = new StringBuilder();
boolean success = file.createNewFile();
if (success) {
ExistTextCustomers
.setText("Customer.txt file created file added");
} else if (file.canWrite()) {
ExistTextCustomers
.setText("Writing data to Customer.txt, file added");
} else {
ExistTextCustomers.setText("Cannot create file: Customer.txt");
}
try {
FileWriter fileW = new FileWriter("Customer.txt", true);
sb.append(NameText.getText());
sb.append(",");
sb.append(AddressText.getText());
sb.append(",");
sb.append(CityText.getText());
sb.append(",");
StateIndex = StateList.getSelectedIndex();
sb.append(states[StateIndex]);
sb.append(",");
sb.append(ZipText.getText());
sb.append(",");
sb.append(PhoneText.getText());
sb.append("\r\n");
fileW.write(sb.toString());
parent.setField(sb.toString());
fileW.close();
ExistTextCustomers.setText("A new Customer has been added!");
FileReader fileR = new FileReader("Customer.txt");
BufferedReader buffIn = new BufferedReader(fileR);
String textData = buffIn.readLine();
buffIn.close();
唯一剩下的問題與Customer
對象的構造有關。 我們需要將FVolume對象添加到構造函數中,但是我們不應該將其添加到costumers
面板中,因為它是一個不同的框架:
AddCustomers.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
new Customer("Customer", FVolume.this);
}
});
這只會使其起作用,並且我僅在絕對必要時才嘗試觸摸代碼,而沒有嘗試更改編碼樣式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.