KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > echo2example > chatclient > ChatScreen


1 /*
2  * This file is part of the Echo Web Application Framework (hereinafter "Echo").
3  * Copyright (C) 2002-2005 NextApp, Inc.
4  *
5  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
6  *
7  * The contents of this file are subject to the Mozilla Public License Version
8  * 1.1 (the "License"); you may not use this file except in compliance with
9  * the License. You may obtain a copy of the License at
10  * http://www.mozilla.org/MPL/
11  *
12  * Software distributed under the License is distributed on an "AS IS" basis,
13  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
14  * for the specific language governing rights and limitations under the
15  * License.
16  *
17  * Alternatively, the contents of this file may be used under the terms of
18  * either the GNU General Public License Version 2 or later (the "GPL"), or
19  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
20  * in which case the provisions of the GPL or the LGPL are applicable instead
21  * of those above. If you wish to allow use of your version of this file only
22  * under the terms of either the GPL or the LGPL, and not to allow others to
23  * use your version of this file under the terms of the MPL, indicate your
24  * decision by deleting the provisions above and replace them with the notice
25  * and other provisions required by the GPL or the LGPL. If you do not delete
26  * the provisions above, a recipient may use your version of this file under
27  * the terms of any one of the MPL, the GPL or the LGPL.
28  */

29
30 package echo2example.chatclient;
31
32 import nextapp.echo2.app.Alignment;
33 import nextapp.echo2.app.Button;
34 import nextapp.echo2.app.ContentPane;
35 import nextapp.echo2.app.Extent;
36 import nextapp.echo2.app.Label;
37 import nextapp.echo2.app.Row;
38 import nextapp.echo2.app.SplitPane;
39 import nextapp.echo2.app.TextArea;
40 import nextapp.echo2.app.event.ActionEvent;
41 import nextapp.echo2.app.event.ActionListener;
42
43 /**
44  * A screen which displays the current state of the chat room and allow the
45  * user to submit chat input.
46  */

47 public class ChatScreen extends ContentPane {
48
49     private TextArea postField;
50     private MessagePane messagePane;
51     
52     /**
53      * Creates a new <code>ChatScreen</code>.
54      */

55     public ChatScreen() {
56         super();
57         
58         SplitPane outerSplitPane = new SplitPane(SplitPane.ORIENTATION_VERTICAL_TOP_BOTTOM, new Extent(32));
59         outerSplitPane.setStyleName("ChatScreen.SplitPane");
60         add(outerSplitPane);
61         
62         Row controlsRow = new Row();
63         controlsRow.setStyleName("ControlPane");
64         outerSplitPane.add(controlsRow);
65         
66         Button logoutButton = new Button(Messages.getString("Generic.Exit"), Styles.ICON_24_EXIT);
67         logoutButton.setStyleName("ControlPane.Button");
68         logoutButton.addActionListener(new ActionListener(){
69             public void actionPerformed(ActionEvent e) {
70                 ChatApp.getApp().disconnect();
71             }
72         });
73         controlsRow.add(logoutButton);
74         
75         SplitPane mainSplitPane = new SplitPane(SplitPane.ORIENTATION_VERTICAL_BOTTOM_TOP, new Extent(90));
76         mainSplitPane.setStyleName("ChatScreen.SplitPane");
77         outerSplitPane.add(mainSplitPane);
78         
79         SplitPane inputAreaSplitPane = new SplitPane(SplitPane.ORIENTATION_HORIZONTAL_LEADING_TRAILING, new Extent(150));
80         mainSplitPane.add(inputAreaSplitPane);
81
82         Label currentUserLabel = new Label(ChatApp.getApp().getUserName() + ":");
83         currentUserLabel.setStyleName("ChatScreen.CurrentUserLabel");
84         inputAreaSplitPane.add(currentUserLabel);
85         
86         SplitPane postSplitPane = new SplitPane(SplitPane.ORIENTATION_HORIZONTAL_TRAILING_LEADING, new Extent(100));
87         inputAreaSplitPane.add(postSplitPane);
88
89         Button submitPostButton = new Button(Messages.getString("ChatScreen.SubmitPostButton"), Styles.ICON_24_RIGHT_ARROW);
90         submitPostButton.setStyleName("ChatScreen.SubmitPostButton");
91         submitPostButton.setTextPosition(new Alignment(Alignment.LEFT, Alignment.DEFAULT));
92         submitPostButton.addActionListener(new ActionListener() {
93             public void actionPerformed(ActionEvent e) {
94                 postMessage();
95             }
96         });
97         postSplitPane.add(submitPostButton);
98
99         postField = new TextArea();
100         postField.setStyleName("ChatScreen.PostField");
101         postField.setWidth(new Extent(97, Extent.PERCENT));
102         postField.setHeight(new Extent(70, Extent.PX));
103         postField.addActionListener(new ActionListener() {
104             public void actionPerformed(ActionEvent e) {
105                 postMessage();
106             }
107         });
108         postSplitPane.add(postField);
109         
110         messagePane = new MessagePane();
111         mainSplitPane.add(messagePane);
112         
113         ChatApp app = ChatApp.getApp();
114         app.setFocusedComponent(postField);
115     }
116     
117     /**
118      * Updates the list of messages.
119      */

120     public void updateMessageList() {
121         messagePane.update();
122     }
123     
124     /**
125      * Posts the text currently entered as a new message.
126      */

127     private void postMessage() {
128         ChatApp app = ChatApp.getApp();
129         if (postField.getText().trim().length() != 0) {
130             app.postMessage(postField.getText());
131         }
132         postField.setText("");
133         app.setFocusedComponent(postField);
134         messagePane.update();
135     }
136 }
137
Popular Tags