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);
}
}
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
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
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
>> 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
"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
Ich habe übrigens dein setSize(300,300) durch pack() ersetzt, vielleicht
liegt's daran. Was ich mir allerdings nicht vorstellen kann.
Sascha
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