2016-12-12 2 views
0

Итак, моя проблема в том, что мне приходится иметь дело с 2-мя слушателями, которые из одного зависят от другого. В основном, когда пользователи набирают имя, существует короткий поиск, если имя существует в списке, если оно не отображается. Если это произойдет, откроется новое окно, в котором пользователь отправит сообщение. То, что я не могу достичь, это то, что я открываю первое окно, нажимая на первую кнопку (кнопку ввода), и, как я уже сказал, если это будет успешно, в новом окне будет еще одна кнопка (пост), которая добавит текст, который он напечатал в своем списке сообщений. Дело в том, что я не могу заставить кнопку «Опубликовать» работать, так как мне нужен экстренный прослушиватель действий внутри прослушивателя действий, и я не могу разобрать «Опубликовать» на нового слушателя и заставить его работать там [не могу добавить больше параметры].Обработка ActionListener внутри ActionListener

вот код:

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

import javax.swing.*; 

public class LoginFrame extends JFrame { 
private JFrame myFrame; 
private JPanel myPanel; 
private JButton enterButton; 
private JTextField nameTextBox; 
private ArrayList<User> users; 


public LoginFrame(ArrayList<User> userList){ 
    this.users = new ArrayList<User>(userList); 
    ButtonListener bListener = new ButtonListener(); 
    myPanel = new JPanel(); 
    nameTextBox = new JTextField(15); 
    enterButton = new JButton("Enter"); 

    nameTextBox.setText("Please enter your name"); 
    enterButton.addActionListener(bListener); 

    myPanel.add(nameTextBox); 
    myPanel.add(enterButton); 

    this.setContentPane(myPanel); 


    this.setVisible(true); 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    this.setTitle("Είσοδος Χρήστη"); 
    this.setSize(300, 300); 
} 


public void addUser(User aUser){ 
    users.add(aUser); 
} 


public class ButtonListener implements ActionListener{ 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     if(e.getSource().equals(enterButton)){ 
      String text = nameTextBox.getText(); 
      for(User users: users){ 
       if(!users.getName().equals(text)){ 
        JOptionPane.showMessageDialog(null,"User " + text + " not found"); 
       } 
       else{ 
        //components 
        DateFormat df = new SimpleDateFormat("dd/MM/yy HH:mm:ss"); 
        Date dateobj = new Date(); 
        postListener pListener = new postListener(); 
        JFrame tempFrame = new JFrame("Σελίδα Χρήστη"); 
        JPanel tempPanel = new JPanel(); 
        JTextField userNameField = new JTextField(20); 
        JTextField userEmailField = new JTextField(30); 
        JTextArea postTextField = new JTextArea(5,5); 
        JButton postButton = new JButton("Post"); 

        String textOfPost = postTextField.getText(); 



        userNameField.setText(users.getName()); 
        userEmailField.setText(users.getEmail()); 

        tempPanel.add(userNameField); 
        tempPanel.add(userEmailField); 
        tempPanel.add(postTextField); 
        tempPanel.add(postButton); 

        //making a post object and adding it to an ArrayList which user's posts. 
        Post tempPost = new Post(dateobj,textOfPost,users.getName()); 
        users.addAPost(tempPost); 




        tempFrame.setContentPane(tempPanel); 
        tempFrame.setVisible(true); 
        tempFrame.setSize(800, 800); 
        tempFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

       } 
      } 
     } 

    } 

} 

}

+0

1) См [Обнаружение/исправления для подвесного кронштейна близкого блока кода] (http://meta.stackexchange.com/q/251795/155831) для задачи я больше не мог быть обеспокоен фиксирующим , 2) Единственная пустая строка пробела в исходном коде - это все, что требуется *. Пустые строки после '{' или before '}' также типично избыточны. 3) Чтобы получить более эффективную помощь, отправьте сообщение [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). 4) См. [Использование нескольких JFrames, Хорошая/Плохая Практика?] (Http://stackoverflow.com/q/9554636/418556) –

ответ

1

Вам не нужно еще ActionListener внутри ActionListener, который уже существует в вашем коде. Вам просто нужно добавить еще if-statement в свой метод actionPerformed.

if(e.getSource().equals(postButton)){ 
    //your code here 
} 
+0

Да, но кнопка сообщения работает, только если вы нажмете кнопку ввода, что означает код будет внутри кнопки ввода. Фактически, я сделал еще один класс как PostListener, и я проанализировал пользователя и разместил его как параметры для его конструктора. Не уверен, что это хороший метод, но – woopsi

+0

Вы можете попробовать отключить кнопку «post» и включить его, как только нажата кнопка «enter», и сделайте все остальное, как указано в моем ответе. – Yousaf

+0

Вам также не нужно делать два класса для обработки 'ActionListeners'. Одного достаточно. – Yousaf