Summaries
University notes in Markdown format from Obsidian.
Chat con Swing
download Download MDCome realizzare una chat come la seguente?

Per quanto riguarda il file ChatFrame.java:
package chat;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
public class ChatFrame extends JFrame {
private static final long serialVersionUID = 4213060829881951932L;
public void createWindow() {
JPanel left = createLeftPanel(); JPanel right = createRightPanel();
JScrollPane leftScroll = new JScrollPane(left);
JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftScroll, right);
splitPane.setDividerSize(10); splitPane.setDividerLocation(200);
this.add(splitPane); this.setTitle("Chat"); this.setSize(800, 500);
this.setMinimumSize(new Dimension(400, 400));
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public JPanel createLeftPanel() {
JPanel left = new JPanel();
left.setLayout(new BoxLayout(left, BoxLayout.PAGE_AXIS));
Contact c1 = new Contact(new ImageIcon(getClass().getResource("/resources/img1.png")), "Mario Rossi");
Contact c2 = new Contact(new ImageIcon(getClass().getResource("/resources/img2.png")), "Maria Bianchi");
Contact c3 = new Contact(new ImageIcon(getClass().getResource("/resources/img3.png")), "Francesco Verdi");
Contact c4 = new Contact(new ImageIcon(getClass().getResource("/resources/img4.png")), "Simona Gialli");
left.add(c1); left.add(c2); left.add(c3); left.add(c4);
return left;
}
private void handleMessage(JTextArea message, JTextArea allMessages) {
String msg = message.getText();
allMessages.append(msg + System.lineSeparator());
message.setText("");
}
public JPanel createRightPanel() {
JPanel right = new JPanel();
right.setLayout(new BorderLayout());
JTextArea allMessages = new JTextArea();
allMessages.setEditable(false);
JScrollPane scrollAllMessages = new JScrollPane(allMessages);
right.add(scrollAllMessages, BorderLayout.CENTER);
JPanel south = new JPanel();
south.setLayout(new BoxLayout(south, BoxLayout.LINE_AXIS));
JTextArea message = new JTextArea();
message.setLineWrap(true);
JScrollPane scrollMessages = new JScrollPane(message);
JButton send = new JButton("Send");
south.setPreferredSize(new Dimension(550, 100));
south.add(scrollMessages);
south.add(send);
send.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
handleMessage(message, allMessages);
}
});
message.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER) {
if(!e.isShiftDown()) {
handleMessage(message, allMessages);
e.consume();
}
else {
message.append(System.lineSeparator());
}
}
}
});
right.add(south, BorderLayout.SOUTH);
return right;
}
public static void main(String[] args) {
ChatFrame f = new ChatFrame();
f.createWindow();
}
}
Per quanto riguarda il file Contact.java:
package chat;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
public class Contact extends JLabel {
private static final long serialVersionUID = 228236008666904772L;
public Contact(ImageIcon img, String text) {
Image picture = img.getImage().getScaledInstance(50, 50, Image.SCALE_SMOOTH);
this.setIcon(new ImageIcon(picture));
this.setText(text);
}
}