Package com.stepan.GUI

Source Code of com.stepan.GUI.ChatClient$InputListener

package com.stepan.GUI;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import java.util.*;
import com.stepan.domain.Message;
import java.awt.Color;
import javax.swing.border.TitledBorder;

/**
* Main chat window.
* @author Stepan
*/
public class ChatClient {
  
    private JFrame frame;
    private JPanel  mainBase, buttonPanel;
    private JButton send, quit;
    private JTextField textF;
    private JTextArea textA;
    private JScrollPane scrolla;
    private JMenuBar mb;
    private JMenu m1, m2;
    private JMenuItem mi1, mi2, mi3;
    private String currentUserName = "anonymous";
    private TreeSet<Message> messages = new TreeSet<Message>();
   
    public ChatClient assembleComponents(){ 
        showConfigDialog(this);                                 // shows this and init components later
        initRightPanel();
        initTextAreaAndField();
        initMainPanel(buttonPanel, scrolla, textF);
        initMainFrame(mainBase, "Chat Room");
        return this;
    }
     
    public void setUpMenus(){
        initMenuItems();
        initMenus();
        addMenuItemsToMenus();   
        mb = new JMenuBar();
        mb.add(m1);
        mb.add(m2);
        frame.setJMenuBar(mb);   
    }
    private void showMessages(){
        StringBuilder build = new StringBuilder();
        for(Message m : messages){
            build.append(m.getAuthor());
            build.append(" says: ");
            build.append(m.getContent());
            build.append("\n");   
        }
        textA.setText(build.toString());
    }
   
    /*
    action listener
    */
    private class InputListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e){
            Object source = e.getSource();
            if (source == textF || source == send){     // add data to messages
                if(textF.getText().trim().length() > 0){
                    messages.add(
                            new Message(textF.getText(), getCurrentUserName()));
                    textF.setText("");
                    showMessages();
                }
            }       
            if (source == quit || source == mi2){       // quit
                System.exit(0);    
            }
            if (source == mi1 ){                                // configure
                showConfigDialog(getReference());
            }
        }
    }
   
    /*
    about listener
    */
    private class AboutListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e){
            JOptionPane.showMessageDialog(frame, "not much here");
        }
    }
   
    /* service methods */
    private void showConfigDialog(final ChatClient chat){
        javax.swing.SwingUtilities.invokeLater(
                    new Runnable(){
                        @Override
                        public void run(){
                            new ConfigurationWindow(chat, frame).createDialog();
                        }
                    }      
                );
    }
   
    private void initMainFrame (JPanel mainPanel, String title){
        frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(mainPanel);
        frame.setSize(new Dimension(600, 200));
        frame.setVisible(true);
    }
   
    private void initMainPanel(JPanel east, JScrollPane center, JTextField south){
        mainBase = new JPanel();
        mainBase.setLayout(new BorderLayout());
        mainBase.add(east, BorderLayout.EAST);
        mainBase.add(center, BorderLayout.CENTER);
        mainBase.add(south, BorderLayout.SOUTH);
    }
   
    private void initRightPanel(){
        buttonPanel = new JPanel();
        buttonPanel.setLayout(new GridLayout(3, 1));
        send = new JButton("Send");
        send.addActionListener(new InputListener());
        quit = new JButton("Quit");
        quit.addActionListener(new InputListener());
        buttonPanel.add(send);
        buttonPanel.add(quit);
    }
   
    private void initTextAreaAndField(){
        textA = new JTextArea();
        textA.setLineWrap(true);
        textA.setEnabled(false);
        textA.setBackground(Color.white);
        scrolla = new JScrollPane(textA);
        textF = new JTextField();
        textF.setBorder(new TitledBorder("Enter message: "));
        textF.addActionListener(new InputListener());
    }

    public String getCurrentUserName() {
        return currentUserName;
    }

    public void setCurrentUserName(String currentUserName) {
        this.currentUserName = currentUserName;
    }
   
    public ChatClient getReference(){
        return this;
    }
   
    private void initMenuItems(){
        mi1 = new JMenuItem("Configure");
        mi1.addActionListener(new InputListener());     
        mi2 = new JMenuItem("Quit");
        mi2.addActionListener(new InputListener());
        mi3 = new JMenuItem("About");
        mi3.addActionListener(new AboutListener());
    }
   
    private void initMenus(){
        m1 = new JMenu("File");
        m2 = new JMenu("Help");
    }
   
    private void addMenuItemsToMenus(){
        m1.add(mi1);
        m1.addSeparator();
        m1.add(mi2);      
        m2.add(mi3);
    }

}
TOP

Related Classes of com.stepan.GUI.ChatClient$InputListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.