Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Hilfe zu einfachem JTable Beispiel...

1 view
Skip to first unread message

Tobias Müller

unread,
Nov 23, 2001, 9:57:42 AM11/23/01
to
Hallo..

ich "spiele" gerade mit der JTable Klasse herum...

In folgendem kleinen Programm möchte ich, dass über 3 Textfelder Name,
Vorname und Ort eingelesen werden und bei einem klick auf den Button
show, sich ein Frame öffnet indem eine JTable meine vorher
eingegebenen Daten darstellt.

Beim Compilieren kommen keine Fehler....aber sobald ich die Table
anzeigen will, wird wohl eine Exception ausgelöst...diese wiederum
füllt meinen ganzen Bildschirm, so dass ich sie schlecht abschreiben
kann....

vielleicht kann sich jemand kurz den Code anschauen und mir sagen wo
der Hund hier begraben liegt...:-)

Gruß

Tobi

Hier der Code:

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


public class JTableTest3 extends JFrame
implements ActionListener
{
private JTable table;

private JTextField name = new JTextField (10);
private JTextField vorname = new JTextField (10);
private JTextField ort = new JTextField (10);
private JLabel namex = new JLabel ("Name:");
private JLabel vornamex = new JLabel ("Vorname:");
private JLabel ortx = new JLabel ("Ort:");
private JButton button = new JButton ("Write");
private JButton button2 = new JButton ("show");
private JPanel pane = new JPanel ();
private JPanel pane2 = new JPanel ();

// hier gebe ich halt mal irgend eine Größe an

private String DatenArray[][] = new String [10][3];
private String SpaltenNamen [] = {"Name","Vorname","Ort"};
private int zeile = 0;

// Die Oberfläche wo man die Daten eingeben kann....
public JTableTest3 ()
{
button.addActionListener (this);
button2.addActionListener (this);
pane.setLayout (new GridLayout (3,2,20,20));
pane.add (namex);
pane.add (name);
pane.add (vornamex);
pane.add (vorname);
pane.add (ortx);
pane.add (ort);

pane2.add(pane);
pane2.add (button);
pane2.add (button2);
setContentPane (pane2);

}

public void actionPerformed (ActionEvent evt)
{
Object src = evt.getSource ();
// wenn auf den "Write" button gedrückt wird sollen
// die Daten ausgelesen und in dem DatenArray ge
//speichert werden...
if (src.equals (button))
{
String namey = name.getText();
String vornamey = vorname.getText();
String orty = ort.getText();
DatenArray [zeile][0] = namey;
DatenArray [zeile][1] = vornamey;
DatenArray [zeile][2] = orty;
zeile++;
name.setText ("");
vorname.setText ("");
ort.setText ("");

}

// Hier sollte der Fehler irgendwo liegen....nun
// versuche ich mit den beiden Arrays die Table zu
// erstellen und in einem JFrame anzeigen zu lassen..

else if (src.equals (button2))
{
table = new JTable (DatenArray,SpaltenNamen);
JFrame frame = new JFrame ();
JPanel pane = new JPanel ();
pane.add (new JScrollPane (table), "Center");
frame.add (pane);
frame.setContentPane(pane);
frame.setSize (300,300);
frame.setVisible (true);

}


}

public static void main (String args [])
{
JTableTest3 wnd = new JTableTest3 ();
wnd.pack();
wnd.setVisible (true);
}
}

Sascha Klopp

unread,
Nov 23, 2001, 10:16:44 AM11/23/01
to
Hallo Tobias,

Tobias Müller wrote:

>
> // Hier sollte der Fehler irgendwo liegen....nun
> // versuche ich mit den beiden Arrays die Table zu
> // erstellen und in einem JFrame anzeigen zu lassen..
>
> else if (src.equals (button2))
> {
> table = new JTable (DatenArray,SpaltenNamen);
> JFrame frame = new JFrame ();
> JPanel pane = new JPanel ();
> pane.add (new JScrollPane (table), "Center");

> //frame.add (pane);


Folgender Fehler wird geworfen:

java.lang.Error: Do not use javax.swing.JFrame.add() use
javax.swing.JFrame.getContentPane().add() instead
at javax.swing.JFrame.createRootPaneException(JFrame.java:406)
at javax.swing.JFrame.addImpl(JFrame.java:432)
at java.awt.Container.add(Container.java:234)
at JTableTest3.actionPerformed(JTableTest3.java:81)

> frame.setContentPane(pane);
> frame.setSize (300,300);
> frame.setVisible (true);

Damit ist alles gesagt, oder? Wieso willst du eigentlich das JPanel
add'en (c) und gleichzeitig setContentPane'n (c) ?

Bye,

Sascha, heute remote debuggend

Tobias Müller

unread,
Nov 23, 2001, 10:24:50 AM11/23/01
to
On Fri, 23 Nov 2001 16:16:44 +0100, Sascha Klopp
<sas...@familie-klopp.de> wrote:

Hi

>Folgender Fehler wird geworfen:
>
>java.lang.Error: Do not use javax.swing.JFrame.add() use
>javax.swing.JFrame.getContentPane().add() instead
> at javax.swing.JFrame.createRootPaneException(JFrame.java:406)
> at javax.swing.JFrame.addImpl(JFrame.java:432)
> at java.awt.Container.add(Container.java:234)
> at JTableTest3.actionPerformed(JTableTest3.java:81)
>
>> frame.setContentPane(pane);
>> frame.setSize (300,300);
>> frame.setVisible (true);
>
>Damit ist alles gesagt, oder? Wieso willst du eigentlich das JPanel
>add'en (c) und gleichzeitig setContentPane'n (c) ?

Ja, wenn ich das dann so mache:

table = new JTable (DatenArray,SpaltenNamen);
JFrame frame = new JFrame ();
JPanel pane = new JPanel ();
pane.add (new JScrollPane (table), "Center");

frame.getContentPane().add(table);
frame.setSize (300,300);
frame.setVisible (true);

geht es.......nur die SpaltenNamen werden nicht
angezeigt.........sprich das was ich in dem 2. Array an den
Konstrukter von JTabel übergebe....(Name,Vorname,Ort)
woran liegt das nun wieder ???

Gruß und vielen Dank für die schnelle Antwort

Tobi

Sascha Klopp

unread,
Nov 23, 2001, 10:34:48 AM11/23/01
to
Hallo Tobias,

Tobias Müller wrote:

> Ja, wenn ich das dann so mache:
>
> table = new JTable (DatenArray,SpaltenNamen);
> JFrame frame = new JFrame ();
> JPanel pane = new JPanel ();
> pane.add (new JScrollPane (table), "Center");
> frame.getContentPane().add(table);
> frame.setSize (300,300);
> frame.setVisible (true);
>
>
> geht es.......nur die SpaltenNamen werden nicht
> angezeigt.........sprich das was ich in dem 2. Array an den
> Konstrukter von JTabel übergebe....(Name,Vorname,Ort)
> woran liegt das nun wieder ???


An Microsoft...? (SCNR)

Also bei mir klappt's auch mit den Überschriften.

java -version:

java version "1.3.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0)
Classic VM (build 1.3.0, J2RE 1.3.0 IBM build cx130-20010502 (JIT
enabled: jitc))


Sascha

Tobias Müller

unread,
Nov 23, 2001, 11:01:19 AM11/23/01
to
On Fri, 23 Nov 2001 16:34:48 +0100, Sascha Klopp
<sas...@familie-klopp.de> wrote:

>> geht es.......nur die SpaltenNamen werden nicht
>> angezeigt.........sprich das was ich in dem 2. Array an den
>> Konstrukter von JTabel übergebe....(Name,Vorname,Ort)
>> woran liegt das nun wieder ???
>
>
>An Microsoft...? (SCNR)

Naja....das wäre ja was...;-)

>Also bei mir klappt's auch mit den Überschriften.

habe es gerade nochmal unter Win2k (vorher Win98) versucht.....das
gleiche....wird alles Angezeigt, bis auf die Spaltenbeschriftung.....

>Sascha

Tobi

Linda Radecke

unread,
Nov 23, 2001, 11:16:06 AM11/23/01
to

"Tobias Müller" wrote:

> Ja, wenn ich das dann so mache:

> table = new JTable (DatenArray,SpaltenNamen);
> JFrame frame = new JFrame ();
> JPanel pane = new JPanel ();
> pane.add (new JScrollPane (table), "Center");

>frame.getContentPane().add(table);
^^^^^^

> frame.setSize (300,300);
> frame.setVisible (true);

>
> geht es.......nur die SpaltenNamen werden nicht
> angezeigt.........sprich das was ich in dem 2. Array an den
> Konstrukter von JTabel übergebe....(Name,Vorname,Ort)
> woran liegt das nun wieder ???

Wenn du die table in ein JScrollPane steckst, musst du auch *dieses*
dem frame hinzufuegen und nicht die table, sonst ist das JScrollPane
ja sinnlos. Ohne JScrollPane zeigt die table keinen Header an.
Also entweder in deinem Code:

frame.getContentPane().add(new JScrollPane (table), "Center");

oder das pane mit der JScrollPane: frame.getContentPane().add(pane);

Das JPanel brauchst du aber gar nicht.


Linda
--
li...@jalice.ch -> http://www.jalice.net
l.ra...@hswzfh.ch -> http://www.hswzfh.ch


Sascha Klopp

unread,
Nov 23, 2001, 11:18:54 AM11/23/01
to
Hallo,

Ich habe übrigens dein setSize(300,300) durch pack() ersetzt, vielleicht
liegt's daran. Was ich mir allerdings nicht vorstellen kann.

Sascha

Tobias Müller

unread,
Nov 23, 2001, 1:41:37 PM11/23/01
to
On Fri, 23 Nov 2001 17:16:06 +0100, Linda Radecke <li...@jalice.ch>
wrote:

Hallo Linda,

>Wenn du die table in ein JScrollPane steckst, musst du auch *dieses*
>dem frame hinzufuegen und nicht die table, sonst ist das JScrollPane
>ja sinnlos. Ohne JScrollPane zeigt die table keinen Header an.
>Also entweder in deinem Code:
>
>frame.getContentPane().add(new JScrollPane (table), "Center");
>
>oder das pane mit der JScrollPane: frame.getContentPane().add(pane);

Ja, du hast recht....vielen Dank.
Eins wundert mich jetzt aber schon....warum ging das bei Sascha auch
mit der falschen Syntax....?!??!....;-)...
naja..

>Das JPanel brauchst du aber gar nicht.


>Linda


Gruß und nochmals Danke für die Hilfe

Tobi

0 new messages