2017-08-13 15 views
1

これはGui Designクラスのコードであり、以下はプログラムに機能を提供するクラスです。私はテキストフィールドからのユーザー入力を取得しようとしているので、私はclearAllメソッドを使用してテキストを削除し、またsaveitメソッドを使用してユーザー入力を保存することができます。私はnameEntry.setText( ""); clearAllメソッドでは動作しませんが誰かが私を助けてくれます!コメントあたりとして再度他のクラスを使用してJTextfieldsをフォーマットする

//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

コンパイルできませんでした。「シンボルname.Entryを見つけることができません」というエラーが返されます。 –

答えて

1

また、あなたは次のように、関数のコンストラクタを呼び出し、その後、コンストラクタに渡す前にnameEntryはそれを定義することにより、Functionクラスに知ってもらうことができます以下のようなメンバ関数の変数とnameEntry、受け入れる関数のコンストラクタを作る(右後の「パブリッククラスの機能を...」の行)、:今すぐ

JTextField nameEntry; 

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

は、次のようにコンパイルします:

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

そして、クリアボタンは名前フィールドをクリアします。

+0

チャールズに感謝しています。私は助けに感謝しています。ホバークラフト・フル・オブ・ウナギはあなたの助けに感謝します。あまりにも –

1

、これを解決する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 
    } 
} 

より良く、より堅牢なソリューションがモデル - でプログラムを構築することですView Controllerのファッション(これを見てください)が、これはおそらくあなたがやっているこの単純な学問的エクササイズには残酷かもしれません。次に、関数に、ようnameEntryを追加

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

Function fun = new Function(nameEntry); 

関連する問題