Как подключить java-код и java swing gui с помощью awt?

#java #swing #awt

#java #swing #awt

Вопрос:

Вот как выглядит графический интерфейс

Я новичок в Java, и я работаю над этим приложением для чата, у меня есть эта клиентская программа, и я закодировал графический интерфейс с использованием java swing.. Теперь я не понимаю, как подключить 2 с помощью java awt .. Может кто-нибудь помочь мне с этим??

Это клиентская программа

 package client;
import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ChatClient {
    private String host = "localhost";
    private int port=8000;
    private String uname;
    protected String username ="";
    private int initalport;
    private String clientmessage;
    protected Socket sock;
    public void execute() {

        try {
            Socket socket = new Socket(host, port);
            System.out.println("Connected to the chat server");
            new ReadThread(socket, this).start();
            new WriteThread(socket, this).start();
        } catch (IOException ex) {
            System.out.println("Error getting input stream");
        }
    }
    public static void main(String[] args) {
        ChatClient client = new ChatClient();
        client.execute();
    }
}


class ReadThread extends Thread {  //Reads from the server
    private BufferedReader reader;
    private Socket socket;
    private ChatClient client;
    private String response;

    public ReadThread(Socket socket, ChatClient client) {
        this.socket = socket;
        this.client = client;
        try {
            InputStream input = socket.getInputStream();
            reader = new BufferedReader(new InputStreamReader(input));
        } catch (IOException ex) {
            System.out.println("Error getting input stream");
        }
    }
    public void run() {
    while (true) {
            try {
              response = reader.readLine();
                System.out.print("n");
                System.out.println(response);
                if (client.username != null) {
                    System.out.print("["   client.username   "]: ");
                }else{
                    System.out.println("Please enter a valid username");
                }
            } catch (IOException ex) {
                System.out.println("Error reading from server");
                break;
            }
        }
    }
}



class WriteThread extends Thread {  //writes to the server
    private PrintWriter writer;
    private Socket socket;
    private ChatClient client;
  private String userName="";
    private String text="";
    public WriteThread(Socket socket, ChatClient client) {
        this.socket = socket;
        this.client = client;
        try {
            OutputStream output = socket.getOutputStream();
            writer = new PrintWriter(output, true);
        } catch (IOException ex) {
            System.out.println("Error getting output stream");
        }
    }

    public void run() {
        Console console = System.console();
      userName = console.readLine("nEnter your name: ");
        client.username=userName;
        writer.println(userName);
        while(true) {
            text = console.readLine("["   userName   "]: ");
            if(text.equals("bye")){
                break;
            }
            else{
            writer.println(text);
          }
        }
        try{
            socket.close();
        }catch(IOException ex){
            System.out.println("Error in closing the socket");
        }

    }
}

 

И это графический интерфейс, который я создал с помощью java swing

 import javax.swing.*;
import java.awt.*;
public class ui {
public static void main(String[] args) {

JFrame f=new JFrame();//creating instance of JFrame

JTextArea area=new JTextArea();  //messages are displayed here
area.setBounds(10,10, 780,400);
area.setEditable(false);
f.add(area);

JTextArea textArea=new JTextArea(); //messages are typed here
textArea.setBounds(10,450,780,110);
f.add(textArea);


JButton b=new JButton("Send");// send button to send the messages
b.setBounds(840,450,95,110);

f.add(b);

textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);

JScrollPane scrolltxt1=new JScrollPane(textArea);
scrolltxt1.setBounds(10,450,780,110);
f.add(scrolltxt1);

JScrollPane scrolltxt2=new JScrollPane(area);
scrolltxt2.setBounds(10,10, 780,400);
f.add(scrolltxt2);

f.setIconImage(icon);
f.setTitle("chat");
f.setResizable(false);
f.setSize(1030,700);
f.setLayout(null);//using no layout managers
f.setVisible(true);//making the frame visible
}
}
 

Комментарии:

1. Давайте покончим с формальностями 1) не используйте null / AbsoluteLayout , не вызывайте setBounds или setSize для любого компонента, вместо этого используйте правильный LayoutManager и вызывайте pack свой JFrame экземпляр, прежде чем сделать его видимым. 2) Все компоненты swing должны создаваться в EDT через SwingUtilities.invokeLater 3) Я не уверен, как вы хотели бы использовать код в графическом интерфейсе, использующем консоль. В этом смысл пользовательского интерфейса, чтобы не использовать консоль

2. Возможно, вы захотите изучить возможность использования SwingWorker , который позволит вам запускать код в фоновом режиме и публиковать его в вашем пользовательском интерфейсе, например, при получении сообщения от другого пользователя, т.Е. ReadThread . 4) вместо использования цикла while для чтения текста из console ( WriteThread ) вы можете захотеть иметь в своем чат-клиенте метод sendMessage(String message) , который вы вызываете при нажатии кнопки отправки и который просто записывает данные в открытое соединение