【问题标题】:Trying to combine code试图结合代码
【发布时间】:2011-03-23 13:51:04
【问题描述】:

下面的第一个代码有效,包含一个添加客户 GUI。它下面的代码是我从我创建的另一个 GUI 复制的,但遇到了一些问题。在下面第一个代码的第 30 行,我有一个“CREATE CUSTOMERS”部分,我想在其中添加下面所述的第二个代码。首先,我不确定我需要在哪里添加它。其次,可能需要添加一些代码,我不确定是什么或在哪里。我已经尝试了很长时间将这两者结合起来,但没有运气。我对 Java 编码真的很陌生,我花了很长时间才达到这一点。

第一个有效的代码:

import java.awt.*;
import javax.swing.*;

import java.awt.event.*;
import java.util.*;
import java.io.*;

public class SwimCalc extends JFrame implements ActionListener{
private JTabbedPane jtabbedPane;
private JPanel Customers;


JTextArea NameTextCustomers, ExistTextCustomers, NameTextContractors, ExistTextContractors;

public SwimCalc(){
setTitle("Volume Calculator");
setSize(300, 200);

JPanel topPanel = new JPanel();
topPanel.setLayout( new BorderLayout() );
getContentPane().add( topPanel );

createCustomers();

jtabbedPane = new JTabbedPane();
jtabbedPane.addTab("Customers", Customers);
topPanel.add(jtabbedPane, BorderLayout.CENTER);
              }

/*        CREATE CUSTOMERS        */

public void createCustomers(){
    Customers = new JPanel();
    Customers.setLayout( null );

    NameTextCustomers = new JTextArea();
    NameTextCustomers.setBounds(10, 10, 350, 150);
    NameTextCustomers.setLineWrap(true);
    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, 350, 60);
    ExistTextCustomers.setLineWrap(true);
    Customers.add(ExistTextCustomers);

}

public void actionPerformed(ActionEvent event){

                                             }
private void Exit_pressed(){
System.exit(0);
                           }

public static void main(String[] args){
JFrame frame = new SwimCalc();
frame.setSize(380, 350);
frame.setVisible(true);
}
}

现在这是我要添加到上述代码中的代码:

addCustomer.setMnemonic('a'); 

addCustomer.addActionListener(new ActionListener() 
{ 
public void actionPerformed(ActionEvent e) 
{

new Customer("Customer"); 
}
} );
custPanel.add(custArea); 
custPanel.add(addCustomer); 

custPanel.add(custRefButton); 
custPanel.add(custMessage); 
custRefButton.setMnemonic('R'); 

custRefButton.addActionListener(new ActionListener() 
{ 
public void actionPerformed(ActionEvent e) 
{ 
custMessage.setText(""); 
try
{ 
File custOpen = new File("customer.txt"); 
FileReader custAreaIn = new FileReader(custOpen); 
custArea.read(custAreaIn, custOpen.toString()); 
custMessage.setText("The file exists and can be read from."); 
} 
catch (IOException e3){ 
custMessage.setText("The file could not be read. " + e3.getMessage()); 
} 
} 
} ); 
return custPanel; 
} 

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 PopMessageText = 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("Close"); 
close.setMnemonic('C'); 
JButton deleteFile = new JButton("Delete File"); 
deleteFile.setMnemonic('D'); 
five.add(addwho); 
five.add(close); 
five.add(deleteFile); 
PopMessageText.setEditable(false); 
PopMessageText.setHorizontalAlignment(JTextField.CENTER); 

six.add(PopMessageText); 
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("Close"); 

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(""); 
PopMessageText.setText(""); 
popWindow.dispose(); 
} 
} ); 
deleteFile.addActionListener(new ActionListener() { 
public void actionPerformed(ActionEvent e) { 
PopMessageText.setText(""); 
if (who == "Customer") { 
File file = new File("Customer.txt"); 
boolean cusFileDeleted = file.delete(); 
if (cusFileDeleted) { 
PopMessageText 
.setText("Customer file has been deleted"); 
} else { 
PopMessageText 
.setText("There was an erron 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) { 
PopMessageText 
.setText("Customer.txt file created file added"); 
} else if (file.canWrite()) { 
PopMessageText 
.setText("Writing data to Customer.txt, file added"); 
} else { 
PopMessageText.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(); 
PopMessageText.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) { 
} 

} 
} 
}

【问题讨论】:

  • 您的问题归结为“请完成我的程序!” ...也许您可以将寻求帮助的一般查询分解为更具体的问题?你的问题到底是什么?是什么阻止了您组合代码?
  • @Arne,我有一个单独的 GUI,其中包含运行良好的第二部分。不过,我在其他选项卡中遇到了其他问题,因此我制作了一个包含客户选项卡的新 GUI。我试图将原始代码中的所有代码行插入到新代码行中,但由于大量错误而无法运行。我相信这只是正确放置和重命名问题的问题,但我不确定。
  • 如果您有大量错误,请执行增量操作...从正在运行的程序开始,然后逐行添加/编辑以达到您的目标。只需将一个程序的一部分复制到另一个程序中,而不用想太多是一种圆顶方法。

标签: java eclipse user-interface swing


【解决方案1】:

你真的需要了解Model View Controller separation。现在编写的代码可怕地混合了业务逻辑(例如美国国家的数组)和视图逻辑(即所有 UI 元素)。此外,这些类的名称有误 - Customer 显然不是 JFrame,因此不应将您的类称为 Customer。它应该命名为 CustomerFrame。

其次,您的 UI 本身需要改进;不要像那样调用“setBounds”,而是应该使用 LayoutManager,它会为您处理元素的大小和定位。我建议学习MigLayout,但首先要看看Layout Manager tutorials online。

最后,你真的需要开始对你正在做的事情负责,并真正了解你复制的代码在做什么。否则,您就像Cargo cult programmer 一样,只是在没有真正理解任何代码的情况下进行复制和粘贴。

做这些事情,再试一次问题,然后如果你仍然卡住,发布一个新问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 2013-10-19
    • 2012-03-03
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多