📄 simpletalk.java
字号:
package talk.npt;
//: c13:SimpleTalk.java
// SimpleTalk.
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.plaf.basic.*;
import java.awt.*;
import java.awt.event.*;
public class SimpleTalk extends JFrame {
Container cp;
JPanel leftPanel = new JPanel();
JPanel rightPanel = new JPanel();
JSplitPane mainPanel = new JSplitPane();
JTextArea outputArea = new JTextArea(8,30);
JTextArea inputArea = new JTextArea(4,30);
JButton sendButton = new JButton("Send");
JButton setNameButton = new JButton("Set");
JLabel ipLabel = new JLabel("IP/Hostname:");
JTextField ipInputField = new JTextField(12);
JLabel nameLabel = new JLabel("Name:");
JTextField nameInputField = new JTextField(12);
JPanel namePanel = new JPanel();
JPanel ipPanel = new JPanel();
JButton connButton = new JButton("Connect");
boolean isServer = true ;
Server server;
Client client;
public SimpleTalk (String title){
super(title);
cp = getContentPane();
//set left panel
leftPanel.setLayout(new BoxLayout(leftPanel, BoxLayout.Y_AXIS));
inputArea.setFont(new Font(null, 0, 14));
outputArea.setFont(new Font(null, 0, 14));
inputArea.setBorder(new LineBorder(Color.blue));
outputArea.setBorder(new LineBorder(Color.blue));
outputArea.setEditable(false);
outputArea.setLineWrap(true);
inputArea.setLineWrap(true);
leftPanel.add(new JScrollPane(outputArea));
//leftPanel.add(outputArea);
leftPanel.add(new JLabel(" "));
leftPanel.add(new JScrollPane(inputArea));
//leftPanel.add(inputArea);
leftPanel.add(sendButton);
Box bv = Box.createVerticalBox();
bv.add(Box.createVerticalStrut(2));
bv.add(leftPanel);
bv.add(Box.createVerticalStrut(2));
Box bh = Box.createHorizontalBox();
bh.add(Box.createHorizontalStrut(5));
bh.add(bv);
//bh.add(Box.createHorizontalStrut(10));
/*
Border border = BasicBorders.getInternalFrameBorder();
Insets inset = border.getBorderInsets(leftPanel) ;
inset.top = 30;
inset.bottom = 30;
inset.left = 40;
inset.right = 40;
leftPanel.setBorder(border);
*/
//set right panel
ipPanel.add(ipLabel);
ipPanel.add(ipInputField);
ipPanel.add(connButton);
namePanel.add(nameLabel);
namePanel.add(nameInputField);
namePanel.add(setNameButton);
rightPanel.setLayout(new BoxLayout(rightPanel, BoxLayout.Y_AXIS));
rightPanel.add(ipPanel);
rightPanel.add(namePanel);
//rightPanel.add(serverButton);
//rightPanel.add(connButton);
//set main pane
mainPanel.setRightComponent(rightPanel);
mainPanel.setLeftComponent(bh);
mainPanel.setDividerLocation(320);
cp.add(mainPanel);
//serverButton.addActionListener(new ServerButtonListener());
connButton.addActionListener(new ConnectButtonListener());
sendButton.addActionListener(new SendButtonListener());
setNameButton.addActionListener(new SetNameButtonListener());
server = new Server(new OutputActionListener());
server.addActionListener(new SetupConnListener());
}
class SetupConnListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
connButton.setEnabled(false);
outputArea.append("Connection setup.\n");
outputArea.setCaretPosition(outputArea.getDocument().getLength());
}
}
class OutputActionListener implements ActionListener {
String str;
public void setInputMsg(String str){
this.str = str;
}
public void actionPerformed(ActionEvent e) {
outputArea.append(" " + str );
outputArea.setCaretPosition(outputArea.getDocument().getLength());
}
}
//as a client, connect to a server
class ConnectButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
try {
String ipAddress = ipInputField.getText();
client = new Client(ipAddress, 8088, new OutputActionListener());
client.connect();
connButton.setEnabled(false);
outputArea.append("Connection setup.\n");
isServer = false;
server.closeServer();
} catch(Exception ioe){
ioe.printStackTrace();
}
}
}
//set name
class SetNameButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if(isServer){
server.setName(nameInputField.getText());
} else {
client.setName(nameInputField.getText());
}
}
}
//send Messages
class SendButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e){
String msg = inputArea.getText();
if(msg != null) {
outputArea.append(" me: " + msg + "\n");
if(isServer){
server.sendMessage(msg);
} else {
client.sendMessage(msg);
}
}
inputArea.setText("");
}
}
public void closeConnection(){
try{
if(isServer){
server.closeServer();
} else {
client.closeConnection();
}
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.
getSystemLookAndFeelClassName());
} catch(Exception e) {
e.printStackTrace(System.err);
}
// Note the look & feel must be set before
// any components are created.
final SimpleTalk talk = new SimpleTalk("SimpleTalk");
talk.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
talk.closeConnection();
System.exit(0);
}
});
talk.setSize(500, 400);
talk.setVisible(true);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -