2017-08-13 66 views
1

这个格式化JTextField的是GUI设计类的代码和下面是提供功能给程序的类。我试图从文本字段获取用户输入,所以我可以使用clearAll方法删除文本,并使用saveit方法保存用户输入。我尝试使用nameEntry.setText(“”);在clearAll方法,但它不会工作有人可以帮助我!使用另一个类

//Import Statements 
import javax.swing.*; 
import java.awt.*; 
import javax.swing.JOptionPane; 
import java.awt.event.*; 


//Class Name 
public class Customer extends JFrame { 
    Function fun = new Function(); 

    public static void main(String[]args){ 
     Customer.setLookAndFeel(); 
     Customer cust = new Customer(); 
    } 


    public Customer(){ 
     super("Resident Details"); 
     setSize(500,500); 
     setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     FlowLayout two = new FlowLayout(FlowLayout.LEFT); 
     setLayout(two); 


     JPanel row1 = new JPanel(); 
     JLabel name = new JLabel("First Name",JLabel.LEFT); 
     JTextField nameEntry = new JTextField("",20); 
     row1.add(name); 
     row1.add(nameEntry); 
     add(row1); 

     JPanel row2 = new JPanel(); 
     JLabel surname = new JLabel("Surname ",JLabel.LEFT); 
     JTextField surnameEntry = new JTextField("",20); 
     row2.add(surname); 
     row2.add(surnameEntry); 
     add(row2); 

     JPanel row3 = new JPanel(); 
     JLabel contact1 = new JLabel("Contact Details : Email     ",JLabel.LEFT); 
     JTextField contact1Entry = new JTextField("",10); 
     FlowLayout newflow = new FlowLayout(FlowLayout.LEFT,10,30); 
     setLayout(newflow); 
     row3.add(contact1); 
     row3.add(contact1Entry); 
     add(row3); 

     JPanel row4 = new JPanel(); 
     JLabel contact2 = new JLabel("Contact Details : Phone Number",JLabel.LEFT); 
     JTextField contact2Entry = new JTextField("",10); 
     row4.add(contact2); 
     row4.add(contact2Entry); 
     add(row4); 

     JPanel row5 = new JPanel(); 
     JLabel time = new JLabel("Duration Of Stay        ",JLabel.LEFT); 
     JTextField timeEntry = new JTextField("",10); 
     row5.add(time); 
     row5.add(timeEntry); 
     add(row5); 


     JPanel row6 = new JPanel(); 
     JComboBox<String> type = new JComboBox<String>(); 
     type.addItem("Type Of Room"); 
     type.addItem("Single Room"); 
     type.addItem("Double Room"); 
     type.addItem("VIP Room"); 
     row6.add(type); 
     add(row6); 

     JPanel row7 = new JPanel(); 
     FlowLayout amt = new FlowLayout(FlowLayout.LEFT,100,10); 
     setLayout(amt); 
     JLabel amount = new JLabel("Amount Per Day        "); 
     JTextField AmountField = new JTextField("\u20ac ",10); 
     row7.add(amount); 
     row7.add(AmountField); 
     add(row7); 

     JPanel row8 = new JPanel(); 
     FlowLayout prc = new FlowLayout(FlowLayout.LEFT,100,10); 
     setLayout(prc); 
     JLabel price = new JLabel("Total Price           "); 
     JTextField priceField = new JTextField("\u20ac ",10); 
     row8.add(price); 
     row8.add(priceField); 
     add(row8); 

     JPanel row9 = new JPanel(); 
     JButton clear = new JButton("Clear"); 
     row9.add(clear); 
     add(row9); 

     JPanel row10 = new JPanel(); 
     JButton save = new JButton("Save"); 
     save.addActionListener(fun); 
     row10.add(save); 
     add(row10); 

     //Adding ActionListners 
     nameEntry.addActionListener(fun); 
     clear.addActionListener(fun); 
     save.addActionListener(fun); 

     setVisible(true); 
    } 

    private static void setLookAndFeel() { 
      try { 
       UIManager.setLookAndFeel(
        "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel" 
       ); 
      } catch (Exception exc) { 
      // ignore error 
       } 
    } 

} 

//Import Statements 
import javax.swing.*; 
import java.awt.*; 
import java.awt.Color; 
import javax.swing.JOptionPane; 
import java.awt.event.*; 


//Class Name 
public class Function implements ActionListener { 

    public void actionPerformed(ActionEvent e) { 
     String command = e.getActionCommand(); 
     if(command.equals("Add Customer")) { 
      Login(); 
     } 
     else if(command.equals("Register")){ 
      Registration(); 
     } 
     else if(command.equals("Exit")){ 
      System.exit(0); 
     }  
     else if(command.equals("Clear")){ 
      ClearAllFields(); 
     } 
     else if(command.equals("Save")){ 
      SaveIt(); 
     } 
    } 

    public static void Login(){ 
     Customer cust = new Customer(); 
    } 

    public static void Registration(){ 
     //Do Nothing 

    } 
    //This clears all the text from the JTextFields 
    public static void ClearAllFields(){ 

    } 

    //This will save Info on to another Class 
    public static void SaveIt(){ 


    } 


} 
+1

请详细说明您的意思是'什么“但它不会工作”。它怎么不起作用?它是否编译?跑?它是否会抛出异常?请给我们任何和所有的信息,这将有助于我们更好地理解你的代码和你的问题。 –

+0

请关注创建[mcve]。另外,你可以包含clearAll方法和你从哪个类中调用它? –

+0

它不会编译,它给出了一个错误,说“找不到符号名称。实体” –

回答

1

或者,您也可以使nameEntry已知功能类通过调用函数的构造之前定义它,然后传递到构造函数,如:

JTextField nameEntry = new JTextField("",20); 

Function fun = new Function(nameEntry); 

然后,在功能,添加nameEntry作为函数的成员变量,使一个构造,它接受nameEntry,功能(右后“公共类功能...”线),如:

JTextField nameEntry; 

public Function(JTextField nameEntry) { 
    this.nameEntry = nameEntry; 
} 

现在,下面将编译:

public void ClearAllFields(){ 
    nameEntry.setText(""); 
} 

而且,清除按钮将清除名称字段。

+0

感谢查尔斯它最后的作品我很欣赏的帮助下,气垫船全鳝感谢你的帮助太 –

1

再次按注释,一个简单的方法来解决,这是给控制器(收听者)可以调用GUI公共方法,然后通过当前显示的实例将GUI导入侦听器,允许它调用GUI可能具有的任何公共方法。下面的代码是比你更简单的,仅具有一个JTextField的,但它足以说明这一点:

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.KeyEvent; 
import javax.swing.*; 

public class GUI extends JPanel { 
    private JTextField textField = new JTextField(10); 
    private JButton clearButton = new JButton("Clear"); 

    public GUI() { 
     // pass **this** into the listener class 
     MyListener myListener = new MyListener(this); 
     clearButton.addActionListener(myListener); 
     clearButton.setMnemonic(KeyEvent.VK_C); 

     add(textField); 
     add(clearButton); 
    } 

    // public method in GUI that will do the dirty work 
    public void clearAll() { 
     textField.setText(""); 
    } 

    // other public methods here to get text from the JTextFields 
    // to set text, and do whatever else needs to be done 

    private static void createAndShowGui() { 
     GUI mainPanel = new GUI(); 

     JFrame frame = new JFrame("GUI"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(() -> createAndShowGui()); 
    } 
} 

class MyListener implements ActionListener { 
    private GUI gui; 

    // use constructor parameter to set a field 
    public MyListener(GUI gui) { 
     this.gui = gui; 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     gui.clearAll(); // call public method in field 
    } 
} 

一个更好和更可靠的解决方案是一个模型 - 来构建程序视图 - 控制器的时尚(看这个),但这可能是这个简单的学术活动矫枉过正,你正在做。