2017-07-26 32 views
0

私は現在、私の学校の割り当てのためのチャットボットに取り組んでいます。私は全体のチャット部分を終了しました。ユーザーの入力用にスキャナを使用し、会話を表示するためにSystem.out.println()を使用しました。 私はチャットボット用のGUIを実装したいと思います。 JTextFieldとJTextAreaがそれぞれ入力ボックスと表示ボックスである非常にシンプルなGUIを得ました。Javaで入力と出力をリダイレクト

しかし、私はそれらを一緒にリンクする方法について完全に無知です。 System.inではなくScannerのように、JTextFieldからの入力を読み込み、出力をコンソールに表示する代わりにJTextAreaに表示します。

誰もが私を助けることができますか?私は、チャットボットとGUIを一緒にリンクするために実装することを学ばなければならないのですか?

あなたは私のGUIのコードを見てみたい場合は、以下の通りです:

public class GUI_V2 extends JFrame { 

private JTextField txtEnter = new JTextField(); 
//Chat area; 
private JTextArea txtChat = new JTextArea(); 

//Scroll 
private final JScrollPane scroll = new JScrollPane(txtChat); 


public GUI_V2(){ 
    //Frame Attributes 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    this.setSize(2000,2000); 
    this.setVisible(true); 
    this.setResizable(false); 
    this.setLayout(null); 
    this.setTitle("Menu ChatBot"); 

    //textEnter Attributes 
    txtEnter.setLocation(20,1825); 
    txtEnter.setSize(1950,100); 
    txtEnter.setFont(new Font("Arial",Font.PLAIN,45)); 

    //txtChat Attributes 
    txtChat.setLocation(22,5); 
    txtChat.setSize(1950,1800); 
    txtChat.setFont(new Font("Arial",Font.BOLD,45)); 
    txtChat.setBackground(java.awt.Color.getHSBColor(0.4957f,0.0902f,1.0f)); 
    txtChat.setLineWrap(true); 
    txtChat.setWrapStyleWord(true); 
    txtChat.setEditable(false); 

    //scroll Attributes 
    scroll.setLocation(22,5); 
    scroll.setSize(1950,1800); 

    //Add Items To Frame 
    this.add(txtEnter); 
    this.add(scroll); 



    //txtEnter Action Event: 
    txtEnter.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent arg0){ 
      //add userInput into the txtChat 
      String uText = txtEnter.getText(); 
      txtChat.append("You" + ": " + uText + "\n"); 
      //auto scroll down 
      txtChat.setCaretPosition(txtChat.getDocument().getLength()); 
      //set the txtEnter field to be empty 
      txtEnter.setText(""); 
     } 
    }); 
} 
+0

だけでなく、あなたの入力がちょうどいいようです。残念ながらあなたの出力は表示されません。 – XtremeBaumer

+0

ボタンをクリックしたりフォーカスを変更したりするときにJTextAreaにJTextFieldの値を追加する必要がありますか? – Blasanka

+0

いいえ、GUIは問題ありません。私はchatbotクラスの出力をGUIのJTextAreaに指示したい。そして、JTextFieldの入力をチャットボットの入力として使用してください。 –

答えて

0

いけないnullにレイアウトを設定し、適切なレイアウトを使用する代わりに、コンポーネントを配置するsetLocation()を使用してはいけません。 (これは利用できるスペースへBoxLayoutストレッチコンポーネントbcuz正しく部品を手配しません)あなたのシナリオの例としてA Visual Guide to Layout Managers.

を参照してください、あなたはBoxLayoutを使用することができます。

変更:

this.setLayout(null); 

へ:

this.setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS)); 

また、あなたがmain()を追加する必要があります。

public static void main(String[] args) { 
    new GUI_V2(); 
} 

大きいサイズに設定されているため、スクロールしないでJTextAreaにテキストが表示されません。

最後に1つは、実際にはJFrameを拡張する必要はありません。私がJFrameのメソッドをオーバーライドしなければならない場合、私自身はJFrameを拡張します。メソッドをオーバーライドしない場合は、JFrameからオブジェクトを作成するだけです。

これは、私はそれを行う方法です。

import java.awt.BorderLayout; 
import java.awt.CardLayout; 
import java.awt.Font; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 
import javax.swing.JTextField; 

public class GUI_V2{ 

    public JFrame frame; 
    private JPanel panel; 
    private JTextField txtEnter; 
    //Chat area; 
    private JTextArea txtChat; 

    //Scroll 
    private JScrollPane scroll; 


    public GUI_V2(){ 
     initComp(); 
    } 

    public void initComp(){ 
     frame = new JFrame("Menu ChatBot"); 
     frame.setLayout(new CardLayout()); 

     panel = new JPanel(); 
     panel.setSize(1000, 1000); 
     panel.setLayout(new BorderLayout()); 

     txtEnter = new JTextField(); 
     //textEnter Attributes 
     txtEnter.setSize(1000,100); 
     txtEnter.setFont(new Font("Arial",Font.PLAIN,45)); 
     panel.add(txtEnter, BorderLayout.PAGE_START); 

     txtChat = new JTextArea(); 
     //txtChat Attributes 
     txtChat.setSize(1000,900); 
     txtChat.setFont(new Font("Arial",Font.BOLD,45)); 
     txtChat.setBackground(java.awt.Color.getHSBColor(0.4957f,0.0902f,1.0f)); 
     txtChat.setLineWrap(true); 
     txtChat.setWrapStyleWord(true); 
     txtChat.setEditable(false); 

     scroll = new JScrollPane(txtChat); 
     //scroll Attributes 
     scroll.setSize(1000,900); 
     panel.add(scroll, BorderLayout.CENTER); 

     frame.add(panel); 
     frame.pack(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     //frame.setResizable(false); 
     frame.setVisible(true); 

     doAction(); 
    } 

    public void doAction(){ 
     //txtEnter Action Event: 
     txtEnter.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent arg0){ 
       //add userInput into the txtChat 
       String uText = txtEnter.getText(); 
       txtChat.append("You" + ": " + uText + "\n"); 
       //auto scroll down 
       txtChat.setCaretPosition(txtChat.getDocument().getLength()); 
       //set the txtEnter field to be empty 
       txtEnter.setText(""); 
      } 
     }); 
    } 

    public static void main(String[] args) { 
     new GUI_V2(); 
    } 
} 
+0

私にエラーを修正していただきありがとうございます。私はまだGUIの非常に新しいです。しかし、主な問題は、JTextAreaに私のチャットボットクラスの出力を(システムアウトプリントラインを使って)リダイレクトする方法です。また、JTextFieldの入力をチャットボックスクラス –

+0

のマイスキャナーに送信し、その目的は何ですか?私はあなたが言っていることを正しく理解することさえできません。 – Blasanka

関連する問題