Skip to content

Commit

Permalink
MainForm [5]
Browse files Browse the repository at this point in the history
Починила полосу прокрутки.
Теперь можно изменить свой ник после неудачного соединения или
"Disconnect".
  • Loading branch information
juliaposlavskaya committed Nov 25, 2015
1 parent eb2c727 commit 68d4591
Showing 1 changed file with 112 additions and 83 deletions.
195 changes: 112 additions & 83 deletions src/MainForm.java
Original file line number Diff line number Diff line change
@@ -1,107 +1,115 @@
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Observable;
import java.util.Observer;


/**
* Created by Julia on 10.11.2015.
*/
public class MainForm implements Observer {

final JFrame frame = new JFrame("ChatApp 1.0");
final JPanel panel1 = new JPanel(); //главная панель
final JPanel panel2 = new JPanel(); //верхняя панель для ввода своего ника и ip друга
final JPanel panel3 = new JPanel(); //панель для ввода своего ника
final JPanel panel4 = new JPanel(); //панель для ввода ip друга
final JPanel panel5 = new JPanel(); //панель для ввода текста
final JPanel panel6 = new JPanel(); //панель для кнопочек "Connect" и "Disconnect"
final JPanel panel7 = new JPanel();
final JPanel panel7 = new JPanel(); //панель для вывода сообщений на экран
final JLabel forText1 = new JLabel();
final JLabel forText2 = new JLabel();
final TextField textField1 = new TextField(35);//для ввода своего ника
final TextField textField2 = new TextField(35); //для ввода ip друга
final JTextArea textArea = new JTextArea(); //для вывода сообщения
final JTextArea textAreaForMessenger = new JTextArea();//для ввода сообщения
final JButton apply = new JButton("Apply");
final JButton apply = new JButton("Change");
final JButton connect = new JButton("Connect");
final JButton send = new JButton("Send");
final JButton disconnect = new JButton("Disconnect");
final JScrollPane areaScrollPane = new JScrollPane(textArea);
public String nickname;
public String ip;
public boolean check; //проверка для блокировки кнопок "Connect" и "Disconnect"


private CommandListenerThread comThread;
private CallListenerThread callThread;
public static Observer obj;

public static void main(String args[]){
SwingUtilities.invokeLater(new Runnable(){
public void run(){
new MainForm();
try {
new MainForm();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}



public MainForm(){
obj = this;
//сама форма становится наблюдателем
public MainForm() throws IOException {

obj = this;

//сама форма становится наблюдателем
callThread = new CallListenerThread();
callThread.start();
// comThread = new CommandListenerThread();

// comThread = new CommandListenerThread();
//
//callThread.addObserver(this);
//создание рамки исходя из размеров монитора по цетру экрана
//callThread.addObserver(this);

//создание рамки исходя из размеров монитора по цетру экрана

Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize = kit.getScreenSize();
int screenWidth = screenSize.width;
int screenHeight = screenSize.height;
frame.setSize(screenWidth / 2, screenWidth / 2);
frame.setLocationRelativeTo(null);

Image img = kit.getImage("caticon.png");
frame.setIconImage(img);



//главная палень на которой будут лежать остальные
// Color color = new Color(48, 40, 255);
// panel1.setBackground(color);
// Color color = new Color(48, 40, 255);
// panel1.setBackground(color);
BufferedImage myPicture = ImageIO.read(new File("416658223.jpg"));
JLabel picLabel = new JLabel(new ImageIcon(myPicture));
panel1.add(picLabel);
panel1.setLayout(new BorderLayout());



//вверхняя панель для ввода ника и ip друга
// Color color1 = new Color(86, 128, 255);
// panel2.setBackground(color1);
panel2.setOpaque(false);
panel2.setMaximumSize(new Dimension(screenWidth, screenHeight));
panel2.setPreferredSize(new Dimension(screenWidth /2 ,screenHeight / 7));
panel2.setLayout(new BoxLayout(panel2, BoxLayout.X_AXIS));




//панель для своего ника
panel3.setOpaque(false);
panel3.add(Box.createVerticalStrut(15));
panel3.setLayout(new BoxLayout(panel3, BoxLayout.Y_AXIS));

panel3.setPreferredSize(new Dimension(screenWidth/8,screenHeight / 8));
panel3.setMaximumSize(new Dimension(screenWidth/4,screenHeight / 4));
panel3.setMinimumSize(new Dimension(screenWidth/8,screenHeight / 8));
panel3.setOpaque(false);


forText1.setText("My nickname: ");
panel3.add(forText1);
textField1.setMaximumSize(new Dimension(200 , 25));
Expand All @@ -111,16 +119,17 @@ public MainForm(){




//панель для ip друга
panel4.setOpaque(false);
panel4.add(Box.createVerticalStrut(15));
panel4.setLayout(new BoxLayout(panel4, BoxLayout.Y_AXIS));

panel4.setPreferredSize(new Dimension(screenWidth/8,screenHeight / 8));
panel4.setMaximumSize(new Dimension(screenWidth/4,screenHeight / 4));
panel4.setMinimumSize(new Dimension(screenWidth/8,screenHeight / 8));
panel4.setOpaque(false);


forText2.setText("Remote addr: ");
panel4.add(forText2);
textField2.setMaximumSize(new Dimension(200 , 25));
Expand All @@ -129,48 +138,53 @@ public MainForm(){




//панель ввода текста
// Color color2 = new Color(255, 255, 255);
// panel5.setBackground(color2);

panel5.setOpaque(false);
panel5.setMaximumSize(new Dimension(screenWidth /4, screenHeight / 25));
panel5.setPreferredSize(new Dimension(screenWidth /4 ,screenHeight / 25));
panel5.setMinimumSize(new Dimension(screenWidth/4,screenHeight / 25));

panel5.setLayout(new BoxLayout(panel5, BoxLayout.X_AXIS));

panel5.add(new JScrollPane(textAreaForMessenger));
send.setEnabled(false);
panel5.add(send);



//панель для вывода сообщений на экран
// Color color3 = new Color(255, 255, 255);
// panel6.setBackground(color3);




//панель для вывода сообщений на экран
panel7.setOpaque(false);
panel7.setMaximumSize(new Dimension(400, 300));
panel7.setPreferredSize(new Dimension(400 ,300));
panel7.setMinimumSize(new Dimension(400,300));

panel7.setLayout(new BoxLayout(panel7, BoxLayout.X_AXIS));
panel7.setLayout(new BorderLayout());

textArea.setMaximumSize(new Dimension(400, 300));
/* textArea.setMaximumSize(new Dimension(400, 300));
textArea.setPreferredSize(new Dimension(400, 300));
textArea.setMinimumSize(new Dimension(400,300));
textArea.setMinimumSize(new Dimension(400,300));*/


areaScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

panel7.add(new JScrollPane(textArea));
textArea.setEditable(false);




//панель для кнопочек
panel6.setOpaque(false);
panel6.setLayout(new BoxLayout(panel6, BoxLayout.LINE_AXIS));
disconnect.setEnabled(false);
panel6.add(connect);
panel6.add(disconnect);




//действия для кнопочек
apply.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Expand All @@ -190,54 +204,70 @@ public void actionPerformed(ActionEvent e) {

connect.setEnabled(false);
disconnect.setEnabled(true);

try {
Caller caller = new Caller(ip);
Connection con = caller.call();
if (con!=null){
comThread = new CommandListenerThread(con);
comThread.addObserver(MainForm.this);
comThread.start();
}
else{
textArea.append(" could not connect ip addr: " + ip +"\n");
}
} catch (UnknownHostException e1) {
//e1.printStackTrace();
//////
}
Caller caller = new Caller(ip);
Connection con = caller.call();
if (con!=null){
send.setEnabled(true);
comThread = new CommandListenerThread(con);
comThread.addObserver(MainForm.this);
comThread.start();

}
else{
textArea.append(" could not connect ip addr: " + ip +"\n");
connect.setEnabled(true);
disconnect.setEnabled(false);
send.setEnabled(false);
apply.setEnabled(true);
}
} catch (UnknownHostException e1) {
//e1.printStackTrace();
//////
}
}
});


send.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {


/* if(check=true){
send.setEnabled(true);
}
else send.setEnabled(false);*/


String messenger = textAreaForMessenger.getText();

long curTime = System.currentTimeMillis();
String time = new SimpleDateFormat("HH:mm:ss").format(curTime);

textArea.append("\n" + " " + nickname + " " + time + ":" + "\n" + " " + messenger + "\n");
textAreaForMessenger.setText("");
try {
//callThread.getConnection().sendMessage(messenger);
if(comThread!=null){
comThread.getConnection().sendMessage(messenger);}
else{
callThread.getConnection().sendMessage(messenger);
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//callThread.getConnection().sendMessage(messenger);
if(comThread!=null){
comThread.getConnection().sendMessage(messenger);}
else{
callThread.getConnection().sendMessage(messenger);
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});


disconnect.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//какое-то действие
send.setEnabled(false);
disconnect.setEnabled(false);
connect.setEnabled(true);
apply.setEnabled(true);
}
});

Expand All @@ -247,7 +277,7 @@ public void actionPerformed(ActionEvent e) {
frame.add(panel1);
panel1.add(panel2, BorderLayout.NORTH);
panel1.add(panel5, BorderLayout.SOUTH);
panel1.add(panel7);
panel1.add(panel7, BorderLayout.CENTER);
panel2.add(panel3);
panel2.add(panel4);
panel4.add(panel6);
Expand All @@ -259,20 +289,19 @@ public void actionPerformed(ActionEvent e) {



@Override
public void update(Observable o, Object arg) {
NickCommand c;
MessageCommand mescom;
if(arg instanceof NickCommand){
c=(NickCommand) arg;
textArea.append(c.intoString()+Protocol.LINE_END);
}
if(arg instanceof MessageCommand){
mescom=(MessageCommand) arg;
textArea.append("Incoming Message: "+mescom.getMsg()+Protocol.LINE_END);
}



}
@Override
public void update(Observable o, Object arg) {
send.setEnabled(true);
connect.setEnabled(false);
NickCommand c;
MessageCommand mescom;
if(arg instanceof NickCommand){
c=(NickCommand) arg;
textArea.append(c.intoString()+Protocol.LINE_END);
}
if(arg instanceof MessageCommand){
mescom=(MessageCommand) arg;
textArea.append("Incoming Message: "+mescom.getMsg()+Protocol.LINE_END);
}
}
}

0 comments on commit 68d4591

Please sign in to comment.