-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathSwingGui.java
More file actions
151 lines (126 loc) · 4.74 KB
/
SwingGui.java
File metadata and controls
151 lines (126 loc) · 4.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
package gui;
import rmi.rmitter.control.RemoteController;
import rmi.rmitter.model.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
/**
* Created by affo on 27/03/18.
*/
public class SwingGui extends UnicastRemoteObject
implements FeedObserver, UserObserver, ActionListener {
private final RemoteController controller;
private JFrame mainFrame;
private JTextArea textArea;
private JTextField tokenTextField, usernameTextField, postTextField;
private JButton loginButton;
private String token;
public SwingGui(RemoteController controller) throws RemoteException {
super();
this.controller = controller;
}
public void init() {
mainFrame = new JFrame("RMItter");
mainFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
textArea = new JTextArea(10, 10);
textArea.setEditable(false);
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);
tokenTextField = new JTextField(10);
usernameTextField = new JTextField(10);
postTextField = new JTextField(20);
loginButton = new JButton("Use token");
JScrollPane scrollPane = new JScrollPane(textArea);
JPanel northPanel = new JPanel();
northPanel.add(usernameTextField);
northPanel.add(tokenTextField);
northPanel.add(loginButton);
mainFrame.setLayout(new BorderLayout());
mainFrame.add(northPanel, BorderLayout.NORTH);
mainFrame.add(scrollPane, BorderLayout.CENTER);
mainFrame.add(postTextField, BorderLayout.SOUTH);
// ---- listeners
loginButton.addActionListener(this);
postTextField.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
onEnterPressed();
}
}
});
}
public void draw() {
mainFrame.pack();
mainFrame.setVisible(true);
}
private void writeToTextArea(String msg) {
textArea.append(msg + "\n");
//Make sure the new text is visible, even if there
//was a selection in the text area.
textArea.setCaretPosition(textArea.getDocument().getLength());
}
@Override
public void actionPerformed(ActionEvent event) {
String username = usernameTextField.getText();
String token = tokenTextField.getText();
try {
controller.observeUser(token, username, this, this);
// disable loginButton if everything went well
loginButton.setEnabled(false);
writeToTextArea(">>> [OK]: logged as " + username);
// ok, set the token for future calls
this.token = token;
} catch (RemoteException ex) {
writeToTextArea(">>> [ERROR]: " + ex.getCause().getMessage());
}
}
private void onEnterPressed() {
if (token != null) {
try {
controller.post(token, postTextField.getText());
} catch (RemoteException e) {
writeToTextArea(">>> [ERROR]: " + e.getCause().getMessage());
}
}
postTextField.setText(""); // clear text
}
// ---------------------------------- Remote events
@Override
public void onFolloweePost(Post post) throws RemoteException {
writeToTextArea("@" + post.getPoster().getUsername() + " -> " + post.getContent());
}
@Override
public void onHashtagUse(Hashtag hashtag, Post post) throws RemoteException {
writeToTextArea("Hashtag " + hashtag + " used:");
writeToTextArea(post.getContent());
}
@Override
public void onNewPost(Post post) throws RemoteException {
writeToTextArea(post.getContent());
}
@Override
public void onMention(Post post) throws RemoteException {
writeToTextArea("You were mentioned in:");
writeToTextArea(post.getContent());
}
@Override
public void onFollower(User user) throws RemoteException {
writeToTextArea("New follower: " + user.getUsername());
}
public static void main(String[] args) throws Exception {
Registry registry = LocateRegistry.getRegistry();
// gets a reference for the remote controller
final RemoteController controller = (RemoteController) registry.lookup("controller");
SwingGui gui = new SwingGui(controller);
gui.init();
SwingUtilities.invokeLater(gui::draw);
}
}