Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

Java  JFrameチャット

どれかひとつでもわかりましたら
どなたか教えてください!!
(質問はソースの下にあります)
宜しくお願いいたします。


package 後期課題;

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

public class Samp extends JFrame implements Runnable
{
    public static final String HOST = "localhost";
    public static final int PORT = 10000;


private JTextField tf;
private JTextArea ta;
private JScrollPane sp;
private JPanel pn;
private JButton bt;

private Socket sc;
private BufferedReader br;
private PrintWriter pw;

public static void main (String args[])
{
     Samp sm =  new Samp();
}

public Samp()
{
      super("チャット");

      Container cnt = getContentPane();

      tf = new JTextField ();
      ta = new JTextArea ();
      sp = new JScrollPane (ta);
      pn = new JPanel ();
      bt = new JButton ("送信");

      pn.add(bt);
      cnt.add(tf, BorderLayout.NORTH);
      cnt.add(sp, BorderLayout.CENTER);
      cnt.add(pn, BorderLayout.SOUTH);

      bt.addActionListener(new SampleActionListener());
      addWindowListener(new SampleWindowListener());

      setSize(300,200);
      setVisible(true);

      Thread th = new Thread(this);
      th.start();
}
public void run()
{
      try{
         sc = new Socket(HOST,PORT);
         br = new BufferedReader
             (new InputStreamReader(sc.getInputStream()));
         pw = new PrintWriter
             (new BufferedWriter
                 (new OutputStreamWriter
                     (sc.getOutputStream())));

        while(true){
             try{
                String str = br.readLine();
                ta.append(str + "\n");
             }
             catch(Exception e){
               br.close();
               pw.close();
               sc.close();
               break;
             }
           }
         }        
         catch(Exception e){
           e.printStackTrace();
         }
     }

class SampleActionListener implements ActionListener
{
    public void actionPerformed(ActionEvent e)
   {
       try{
              String str = tf.getText();
              pw.println(str);
              ta.append(str + "\n");
              pw.flush();
              tf.setText("");
            }
            catch(Exception ex){
              ex.printStackTrace();
          }
       }
    }
class SampleWindowListener extends WindowAdapter
{
        public void windowClosing(WindowEvent e)
        {
              System.exit(0);
        }
    }


このプログラムに以下の機能を追加したい場合
どうすればよいのでしょうか?
Java初心者なのでどなたかお力添えを
お願いいたします。

1、ログインしてチャットとして機能させる
2、ログイン回数の表示がでるように
3、ログイン画面の名前の横に写真をつける
4、話題別にチャットができるように
5、個人別パスワードの設定

5については以下のソースで大丈夫だと
思うのですが上記のソースと
どのようにしてつなげればよいのでしょうか?

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import java.awt.Container;
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

class SSample extends JFrame implements ActionListener{
  JPasswordField pass;

  public static void main(String args[]){
    SSample2 frame = new SSample2("チャット");
    frame.setVisible(true);
  }

  SSample2(String title){
    setTitle(title);
    setBounds(100, 100, 300, 250);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel p = new JPanel();

    JLabel label = new JLabel("パスワードを入力:");
    pass = new JPasswordField(10);

    JButton button = new JButton("確認");
    button.addActionListener(this);

    p.add(label);
    p.add(pass);
    p.add(button);

    Container contentPane = getContentPane();
    contentPane.add(p, BorderLayout.CENTER);
  }

  public void actionPerformed(ActionEvent e){
    String password = new String(pass.getPassword());

    if (password.equals("0000")){
      JLabel label = new JLabel("認証に成功しました");
      JOptionPane.showMessageDialog(this, label, "成功", JOptionPane.INFORMATION_MESSAGE);
    }else{
      JLabel label = new JLabel("パスワードが違います");
      JOptionPane.showMessageDialog(this, label, "失敗", JOptionPane.ERROR_MESSAGE);
      pass.setText("");
    }
  }
}

3

回答

83063

閲覧

3件の回答

評価

0

1.ログインの流れをどうやって作るかによって
  実装方法は変わるわよ。
  1−1.ログイン入力用のフレームを用意する
  1−2.チャットを同じフレームにログイン機能を用意する
  そもそも、ログインで何を入力させるかも決めないとね。

2.1がまずできないとダメね。
  1さえできれば、あとは
  ログインIDと回数をファイル等やデータベースに
  保存しておけばいいのよ。

3.ログインIDと写真画像を1対1に管理することが大事ね。
  それができればあとは、画面内に表示領域を用意して
  そこに表示するだけだわ。

4.「話題別」をどのように切り分けるかよね。
  チャット部屋を複数用意するとか
  代表者がチャット部屋にタイトルをつけれるようにするとか。
  やり方はたくさんありそう。

5.ログインIDとパスワードを管理しているだろうから
  あとはそれを変更する仕組みを用意するのね。
  変更までの手続きをどうするかとか
  考えることが多そうよ。


とりあえず現状、求められているのはわかるけど
あなたが作りたい形が何もわからないので
まずはそれを考えるとことからはじめるように。

せめて完成後のイメージくらいは持ちなさい。


評価

0

>てんこさん

ご指摘ありがとうございます。

取り急ぎまずは、
(1)パスワード入力画面で、パスワードを入力
→了解というボタンを押すと(2)の画面がでてくるように
したいと考えております。

ActionListenerを使うのだと思うのですが
エラーになって実行できません。
どのようにしたら?と?がつながるでしょうか?
よろしくお願いいたします。


(1)
package chat;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import java.awt.Container;
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

class pass extends JFrame implements ActionListener{
  JPasswordField pass;

  public static void main(String args[]){
    pass frame = new pass("チャット");
    frame.setVisible(true);
  }

  public pass(String title){
    setTitle(title);
    setBounds(100, 100, 300, 250);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel p = new JPanel();

    JLabel label = new JLabel("パスワードを入力:");
    pass = new JPasswordField(10);

    JButton button = new JButton("確認");
    button.addActionListener(this);

    p.add(label);
    p.add(pass);
    p.add(button);

    Container contentPane = getContentPane();
    contentPane.add(p, BorderLayout.CENTER);
  }

  public void actionPerformed(ActionEvent e){
    String password = new String(pass.getPassword());

    if (password.equals("0000")){
      JLabel label = new JLabel("認証に成功しました");
      JOptionPane.showMessageDialog(this, label, "成功", JOptionPane.INFORMATION_MESSAGE);
    }else{
      JLabel label = new JLabel("パスワードが違います");
      JOptionPane.showMessageDialog(this, label, "失敗", JOptionPane.ERROR_MESSAGE);
      pass.setText("");
    }
  }
}


(2)
import java.io.*;    
import java.awt.*;        
import java.awt.event.*;        
import java.net.*;        
import javax.swing.*;    

public class Samp extends JFrame implements Runnable
{
    public static final String HOST = "localhost";
    public static final int PORT = 10000;


private JTextField tf;
private JTextArea ta;
private JScrollPane sp;
private JPanel pn;
private JButton bt;

private Socket sc;
private BufferedReader br;
private PrintWriter pw;

public static void main (String args[])
{
     Samp sm =  new Samp();
}

public Samp()
{
      super("チャット");

      Container cnt = getContentPane();

      tf = new JTextField ();
      ta = new JTextArea ();
      sp = new JScrollPane (ta);
      pn = new JPanel ();
      bt = new JButton ("送信");

      pn.add(bt);
      cnt.add(tf, BorderLayout.NORTH);
      cnt.add(sp, BorderLayout.CENTER);
      cnt.add(pn, BorderLayout.SOUTH);

      bt.addActionListener(new SampleActionListener());
      addWindowListener(new SampleWindowListener());

      setSize(300,200);
      setVisible(true);

      Thread th = new Thread(this);
      th.start();
}
public void run()
{
      try{
         sc = new Socket(HOST,PORT);
         br = new BufferedReader
             (new InputStreamReader(sc.getInputStream()));
         pw = new PrintWriter
             (new BufferedWriter
                 (new OutputStreamWriter
                     (sc.getOutputStream())));

        while(true){
             try{
                String str = br.readLine();
                ta.append(str + "\n");
             }
             catch(Exception e){
               br.close();
               pw.close();
               sc.close();
               break;
             }
           }
         }        
         catch(Exception e){
           e.printStackTrace();
         }
     }

class SampleActionListener implements ActionListener
{
    public void actionPerformed(ActionEvent e)
   {
       try{
              String str = tf.getText();
              pw.println(str);
              ta.append(str + "\n");
              pw.flush();
              tf.setText("");
            }
            catch(Exception ex){
              ex.printStackTrace();
          }
       }
    }
class SampleWindowListener extends WindowAdapter
{
        public void windowClosing(WindowEvent e)
        {
              System.exit(0);
        }
    }

評価

0

as

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。