# Java Chat



## TobiasB (17. Mrz 2007)

Hallo
ich wollte mir einen Chat programmieren. Dabei will ich das JScrollPane benutzen aber ich weiß nicht wie ich dann den Text aus dem JTextField in das JscrollPane krieg!!
Hier ist der Code:

```
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;
import javax.swing.border.*;
import java.lang.*;

public class minichat extends Applet {
    public minichat() {
        try {
            jbInit();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    boolean isStandalone = false;
    BorderLayout borderLayout1 = new BorderLayout();
    JTextField jTextField1 = new JTextField();
    JToggleButton jToggleButton1 = new JToggleButton();
    //Parameterwert holen
    public String getParameter(String key, String def) {
        return isStandalone ? System.getProperty(key, def) :
                (getParameter(key) != null ? getParameter(key) : def);
    }

    private void jbInit() throws Exception {
        titledBorder1 = new TitledBorder("");
    jTextField1.setNextFocusableComponent(null);
        jTextField1.setText("");
        jTextField1.setBounds(new Rectangle(0, 245, 310, 31));
        jTextField1.addActionListener(new minichat_jTextField1_actionAdapter(this));
        this.setLayout(null);
        jToggleButton1.setBorder(BorderFactory.createEtchedBorder());
    jToggleButton1.setMnemonic('0');
    jToggleButton1.setText("Senden");
        jToggleButton1.setBounds(new Rectangle(309, 245, 89, 31));
        jToggleButton1.addActionListener(new
                                         minichat_jToggleButton1_actionAdapter(this));
    jScrollPane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    jScrollPane1.getViewport().setBackground(SystemColor.control);
    jScrollPane1.setBorder(null);
    jScrollPane1.setDebugGraphicsOptions(0);
    jScrollPane1.setToolTipText("");
    jScrollPane1.setBounds(new Rectangle(0, 0, 310, 247));
    this.add(jTextField1);
    this.add(jToggleButton1);
    this.add(jScrollPane1, null);
    }
    Graphics g;
  TitledBorder titledBorder1;
  JScrollPane jScrollPane1 = new JScrollPane();
    public void jTextField1_actionPerformed(ActionEvent e) {

    }

    public void jToggleButton1_actionPerformed(ActionEvent e) {
      String str = jTextField1.getText();
      g = getGraphics();
      jScrollPane1.append(str);
    }
  private Object viewToModel(Point point) {
    return "";
  }
}


class minichat_jToggleButton1_actionAdapter implements ActionListener {
    private minichat adaptee;
    minichat_jToggleButton1_actionAdapter(minichat adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.jToggleButton1_actionPerformed(e);
    }
}


class minichat_jTextField1_actionAdapter implements ActionListener {
    private minichat adaptee;
    minichat_jTextField1_actionAdapter(minichat adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.jTextField1_actionPerformed(e);
    }
}
```
Ich danke jetzt schon!!
MfG
TobiasB


----------



## dieta (17. Mrz 2007)

Mit dem JScrollPane kannst du eine Komponente wie z.B. eine JTextArea Scrollbar machen. Standardmäßig erscheinen dann, sobal der Inhalt über den Rand geht Scrollbars.

Direkt in das JScrollPane kannst du nichts schreiben, dazu brauchst du z.B. eine JTextArea, die du dem JScrollPane zuordnest un in die du dann schreiben kannst.


----------



## TobiasB (17. Mrz 2007)

jetzt hab ich nur das Problem das er den Text nebeneinander schreibt und nicht untereinander.
MfG
TobiasB


----------



## dieta (17. Mrz 2007)

Dann musst du nach jeder Nachricht noc einen Zeilenumbruch ( \n ) einfügen.


----------



## TobiasB (17. Mrz 2007)

also ich mach es noch nicht sooo lange also wie geht das??
MfG
TobiasB


----------



## dieta (17. Mrz 2007)

```
dieTextArea.append(derStringAusDemEingabefeld + "\n");
```


----------



## TobiasB (17. Mrz 2007)

hab ich gemacht aber jetzt zeigt er nur hiter dem Text das /n an und schreibt keine neue Zeile.


----------



## dieta (17. Mrz 2007)

Du musst \n nicht /n eingeben. \n ist die Escape-Sequenz für einen Zeilenumbruch.


----------



## TobiasB (17. Mrz 2007)

hab den Fehler gefunden ich hab aus versehen / statt  \ eingegeben.


----------



## TobiasB (17. Mrz 2007)

ich hab jetzt doch nochmal ne Frage: wie kann ich das jetzt so einstellen das er den String über die Eingabetaste sendet??
Hier ist nochmal der Code von TextField:

```
public void jToggleButton1_actionPerformed(ActionEvent e) 
String str = jTextField1.getText();
jTextArea1.append(str + "\n");
```


----------



## L-ectron-X (17. Mrz 2007)

Du hängst an das Textfeld einen ActionListener und überschreibst die actionPerformed()-Methode entsprechend.


----------



## TobiasB (18. Mrz 2007)

kannst du mir auch den Code senden??


----------



## dieta (18. Mrz 2007)

```
dasTextfeld.addActionListener(new ActionListener()
{
    public void actionPerformed(ActionEvent evt)
    {
        //Hier kommt der Code hin, der ausgeführt werden soll, wenn im
        //Textfeld die Enter-Taste gedrückt wurde.
    }
});
```


----------



## TobiasB (18. Mrz 2007)

Er zeigt mir den Fehler <bezeichner> an wenn ich

```
JTextField1.addActionListener(new ActionListener)
```
eingebe.


----------



## dieta (18. Mrz 2007)

du musst 1. dahinter ein Semikolon ( ; ) machen und 2. hast du ja die Hälfte vergessen:

```
{
    public void actionPerformed(ActionEvent evt)
    {
        //Hier kommt der Code hin, der ausgeführt werden soll, wenn im
        //Textfeld die Enter-Taste gedrückt wurde.
    }
}
```


----------



## TobiasB (18. Mrz 2007)

also ich hab jetzt das ; gesetzt aber jetzt zeigt er noch 3 weitere Fehler an und wenn ich das ; weg mach dann nur den Bezeichnerfehler.
In dem Borland JBuilder unter kringelt er das new im Code

```
JTextField1.addActionListener([color=red][u]new[/u][/color] ActionListener)
{
public void jTextField1_actionPerformed(ActionEvent evt) {
g = getGraphics();
jTextArea1.append(str + "\n");
});
```


----------



## dieta (18. Mrz 2007)

Nimmmal die Zeile:

```
g = getGraphics();
```
raus, die nutzt ja nix. Mit getHrraphics sollte man nur in Ausnahmefällen arbeiten. Warum dazu findest du hier im Forum massenhaft Threads.


----------



## TobiasB (18. Mrz 2007)

ja okay aber nimmt das new bei 
	
	
	
	





```
JTextField1.addActionListener(new ActionListener)
```
 nicht an.


----------



## dieta (18. Mrz 2007)

Du hast hinter ActionListener eine öffnende Klammer ( vergessen.


----------



## TobiasB (18. Mrz 2007)

hab ich gemacht, aber es geht immer noch nicht.


----------



## dieta (18. Mrz 2007)

Du musst in den SctionListener einfach nur actionPerformed ohne das jTextField1_ vorne schreiben.


----------



## TobiasB (18. Mrz 2007)

ich weiß nicht was es ist, aber er zeigt immer an das er einen Bezeichner will ich hab alles gemacht aber es geht nicht.


----------



## dieta (18. Mrz 2007)

du hast hinter der actionPerformed-Methode im ActionListener auch noch eine geschweifte aschießende Klammer vergessen.

[edit]
Poste den Quelltext mal in Textform, da kann man ihn korregieren.
[/edit]


----------



## TobiasB (18. Mrz 2007)

Hier:
jTextField1.addActionListener(new ActionListener()
  {
    public void actionPerformed(ActionEvent evt) {
      jTextArea1.append(str + "\n");
    });


----------



## Marcel_Handball (18. Mrz 2007)

Füg erst mal mal die von dieta angesprochene geschweifte Klammer hinzu, vielleicht ist der Fehler dann schon behoben:


```
jTextField1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt) {
jTextArea1.append(str + "\n");
}});
```


----------



## TobiasB (18. Mrz 2007)

gemacht, aber Fehler noch da.


----------



## Marcel_Handball (18. Mrz 2007)

dann schick mal den ganzen Code, aber *nicht* als Bild.   :wink:


----------



## TobiasB (18. Mrz 2007)

okay hier ist er:

```
jTextField1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt) {
      String str = jTextField1.getText();
      jTextArea1.append(str + "\n");
}});
```
hoffe das hilft weiter


----------



## Marcel_Handball (18. Mrz 2007)

Ich meinte den Code von deinem *ganzen* Programm


----------



## TobiasB (18. Mrz 2007)

ach so okay hier:

```
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;
import javax.swing.border.*;
import java.lang.*;

public class minichat extends Applet {
    public minichat() {
        try {
            jbInit();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    boolean isStandalone = false;
    BorderLayout borderLayout1 = new BorderLayout();
    JTextField jTextField1 = new JTextField();
    JToggleButton jToggleButton1 = new JToggleButton();
    //Parameterwert holen
    public String getParameter(String key, String def) {
        return isStandalone ? System.getProperty(key, def) :
                (getParameter(key) != null ? getParameter(key) : def);
    }

    private void jbInit() throws Exception {
        titledBorder1 = new TitledBorder("");
    jTextField1.setNextFocusableComponent(null);
        jTextField1.setText("");
        jTextField1.setBounds(new Rectangle(0, 245, 310, 31));
        jTextField1.addActionListener(new minichat_jTextField1_actionAdapter(this));
        this.setLayout(null);
        jToggleButton1.setBorder(BorderFactory.createEtchedBorder());
    jToggleButton1.setMnemonic('0');
    jToggleButton1.setText("Senden");
        jToggleButton1.setBounds(new Rectangle(309, 245, 89, 31));
        jToggleButton1.addActionListener(new
                                         minichat_jToggleButton1_actionAdapter(this));
    jScrollPane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    jScrollPane1.getViewport().setBackground(SystemColor.control);
    jScrollPane1.setBorder(null);
    jScrollPane1.setDebugGraphicsOptions(0);
    jScrollPane1.setToolTipText("");
    jScrollPane1.setBounds(new Rectangle(0, 0, 310, 247));
    jTextArea1.setBackground(UIManager.getColor("control"));
    jTextArea1.setText("");
    this.add(jTextField1);
    this.add(jToggleButton1);
    this.add(jScrollPane1, null);
    jScrollPane1.getViewport().add(jTextArea1, null);
    }
    Graphics g;
  TitledBorder titledBorder1;
  JScrollPane jScrollPane1 = new JScrollPane();
  JTextArea jTextArea1 = new JTextArea();
  jTextField1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt) {
      String str = jTextField1.getText();
      jTextArea1.append(str + "\n");
}});


    public void jToggleButton1_actionPerformed(ActionEvent e) {

    }
  private Object viewToModel(Point point) {
    return "";
  }
}


class minichat_jToggleButton1_actionAdapter implements ActionListener {
    private minichat adaptee;
    minichat_jToggleButton1_actionAdapter(minichat adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.jToggleButton1_actionPerformed(e);
    }
}


class minichat_jTextField1_actionAdapter implements ActionListener {
    private minichat adaptee;
    minichat_jTextField1_actionAdapter(minichat adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.jTextField1_actionPerformed(e);
    }
}
```
nur das package ist nicht dabei, aber ich denke das ist nicht so schlimm


----------



## Marcel_Handball (18. Mrz 2007)

also ich persönlich würde nie wieder mit dem JBuilder für solche Angelegenheiten arbeiten ( produziert mit viel zu viel Code, den man auch kürzer hinbekommt). Ich hab's deshalb mal ganz anders geschrieben. Wenn du nicht unbedingt den Jbuilder benutzten musst (und du deine grafischen Oberflächen auch per Hand schreiben kannst), würde ich dir BlueJ empfehlen. Aber hier erst einmal dein Code:


```
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;

public class minichat extends Applet {
    JTextField jTextField1;
    JButton JButton1;
    JScrollPane jScrollPane1;
    JTextArea jTextArea1 = new JTextArea();

    public void init() {
        setLayout(null);
        
        jTextField1 = new JTextField("");
        jTextField1.setBounds(0, 245, 310, 31);
        jTextField1.addActionListener( new ActionListener( ) {
            public void actionPerformed( ActionEvent e ) {
                
            }
        }); 
        
        JButton1 = new JButton("Senden");
        JButton1.setBounds(309, 245, 89, 31);
        JButton1.addActionListener( new ActionListener( ) {
            public void actionPerformed( ActionEvent e ) {
                jTextArea1.setText(jTextArea1.getText()+jTextField1.getText()+"\n");
            }
        }); 

        jScrollPane1 = new JScrollPane();
        jScrollPane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        jScrollPane1.getViewport().setBackground(SystemColor.control);
        jScrollPane1.setBounds(0, 0, 310, 247);
        jTextArea1.setBackground(UIManager.getColor("control"));
    
        this.add(jTextField1);
        this.add(JButton1);
        this.add(jScrollPane1, null);
        jScrollPane1.getViewport().add(jTextArea1, null);
    }
}
```


----------



## TobiasB (18. Mrz 2007)

also den Button wollte ich dann sowieso rausnehmen weil ich den dann nicht mehr brauch


----------



## Marcel_Handball (18. Mrz 2007)

es ist wichtig, dass du dir erst einmal ein Konzept machst (was soll dein Programm machen, wie kannst du dies umsetzen, und wie soll die Oberfläche aussehen)

Ist dies ein Schulprojekt oder einfach so zum Spaß.
(Nur aus Interesse, in welcher Stufe bist du?)
Wenn du den Button rausnehmen willst, soll die Eingabe dann per Enter geschehen oder wie hast du dir das vorgestellt?


----------



## TobiasB (18. Mrz 2007)

also das ist ein Schulprojekt, wofür ich noch ca. 6 Wochen zeit hab
und ich bin 6. Klasse
ja, also es soll dann per Enter geschehen


----------



## TobiasB (18. Mrz 2007)

ich komm mit BlueJ irgendwie nicht ganz klar
wie kann ich die vorschau angucken??


----------



## dieta (18. Mrz 2007)

[offtopic]Ihr sollt in der 6 selbständig über 6 Wochen ein Java-Programm schreiben? Wow...[/offtopic]


----------



## Marcel_Handball (18. Mrz 2007)

für bluej:

auf den editor auf Compile und dann auf das "viereck", die klasse im zweiten fenster rechtsklick,  "run applet"


----------



## TobiasB (18. Mrz 2007)

dieta hat gesagt.:
			
		

> [offtopic]Ihr sollt in der 6 selbständig über 6 Wochen ein Java-Programm schreiben? Wow...[/offtopic]


Ja, aber das ist ein so genannter Begabtenunterricht für Mathematik/Informatik


----------

