GUI-Applet JTable füllt Hintergrund völlig aus

kniffel

Mitglied
Hallo Leute,

ich arbeite gerade an einem Applet, dass sich mit einer Datenbank verbindet, Datensätze holt und sie in deiner Tabelle darstellt. (Außerdem kann man auch neue Datensätze einfügen und löschen. Aber das hat jetzt nichts mit dem Problem zu tun)

Wenn ich mein Applet starte, und meinen DB-Get Button drücke, werden die Datensätze aus der DB geholt, die Tabelle gezeichnet und in die Tabelle eingefügt.
Siehe hier:
bild1.png

http://kniffel.comeze.com/materials/temp.use/bild1.png

Wenn ich allerdings dann sehr schnell über den DB-Delete Button darunter gehe, (Nur drüber fahre)
dann wird die Tabelle in den Hintergrund geschoben und so groß wie das Appletfenster ist.
Siehe hier:
bild2.png

http://kniffel.comeze.com/materials/temp.use/bild2.png

Bevor ich euch den Code poste, möchte ich gleich darauf hinweisen, dass:
Ja es ist sehr ineffizient jedes Mal, wenn ein Button gedrückt wird, die Verbindung zur DB neu zu erstellen und jedes mal auch eine neue Tabelle zu zeichnen. Aber ich habe derzeit noch keine brauchbare Alternative programmieren können.

Es ist viel Code, ich habe es nur sehr schwach gekürzt, da vielleicht die unwahrscheinlichsten Befehle die Ursache sind.

Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.applet.*;
import java.util.*;
import java.sql.*;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;
//*gekürzt*

public class Neobux extends JApplet implements ActionListener {

      String driver              = "org.gjt.mm.mysql.Driver";
      String databaseURL         = "jdbc:mysql://localhost/***";
      final String DATABASE_USER = "***";
      final String USER_PASSWORD = "***";

JButton but, but2, but3, but4, but5;
Label lab,refs,clicks,clicks2,refcost,goldcost,
      tfrefcost,tfgoldcost,lab1,lab2,lab3,lab4,
      poserg,negerg,erg,errlog;
TextField tfref,tf,tfclicks,tfclicks2, inconsole;
TextArea console;
JTable table;
JScrollPane scrollPane;

public void init() {
       this.setBackground(new Color(100,100,100));

       //*gekürzt*

       //*****BUTTON  *****//                                                    Bei Button Clicked: Color Dark_gray und nicht hellblau
       but = new JButton("Calculate");
       but.setBackground(Color.DARK_GRAY);
       but.setForeground(Color.LIGHT_GRAY);
       //Damit Button Text vollständig angezeigt wird
       but.setMargin(new Insets(0,0,0,0));
       but.addActionListener(this);
       but.addMouseListener(new MouseListener(){
          public void mouseEntered(MouseEvent evt){
                 but.setBorder(new LineBorder(Color.YELLOW, 1));
          }//Ende Entered
          public void mouseExited(MouseEvent evt){
                 but.setBorder(new LineBorder(Color.LIGHT_GRAY, 1));
          }//Ende Exited
          public void mouseClicked(MouseEvent evt){}//Ende Clicked
          public void mousePressed(MouseEvent evt){}//Ende Pressed
          public void mouseReleased(MouseEvent evt){}//Ende Released
          });//Ende MouseListener
       //*****BUTTON 2*****//
       but2 = new JButton("DB-GET");
       but2.setBackground(Color.DARK_GRAY);
       but2.setForeground(Color.LIGHT_GRAY);
       //Damit Button Text vollständig angezeigt wird
       but2.setMargin(new Insets(0,0,0,0));
       but2.addActionListener(this);
       but2.addMouseListener(new MouseListener(){
          public void mouseEntered(MouseEvent evt){
                 but2.setBorder(new LineBorder(Color.YELLOW, 1));
          }//Ende Entered
          public void mouseExited(MouseEvent evt){
                 but2.setBorder(new LineBorder(Color.LIGHT_GRAY, 1));
          }//Ende Exited
          public void mouseClicked(MouseEvent evt){}//Ende Clicked
          public void mousePressed(MouseEvent evt){}//Ende Pressed
          public void mouseReleased(MouseEvent evt){}//Ende Released
          });//Ende MouseListener

       //*gekürzt*
       //Add to Applet
       //*gekürzt*
       add(but);
       add(but2);
       add(but3);
       add(but4);

       this.resize(1100,1000);
       this.setBackground(new Color(100,100,100));
}//Ende init

public void paint(Graphics g) {
           this.setBackground(new Color(100,100,100));
           lab.setBounds(380,5,160,20);
           

           //Refnumber
           //*gekürzt*
           but.setBounds(25,92,145,30);
           g.setColor(Color.LIGHT_GRAY);
           g.drawRect(22,27,605,100);

           //Button
           //GET
           but2.setBounds(477,135,80,40);
           //DELETE
           but3.setBounds(477,175,80,40);
           //INSERT
           but4.setBounds(477,215,80,40);

           //Minirechner-Hintergrund
           g.setColor(Color.DARK_GRAY);
           g.fillRect(175,30,450,93);
           //Tabelle-Begrenzung
           g.setColor(Color.WHITE);
           g.drawRect(22,132,538,520);
           //Programmbegrenzung
           g.setColor(Color.WHITE);
           g.drawRect(1,1,1000,500);
           
           //Elemente neu zeichnen damit beim start da sind
           but.repaint();
           but2.repaint();
           but3.repaint();
           but4.repaint();
           
}//Ende paint

public void actionPerformed(ActionEvent ae){
            Object wer = ae.getSource();
            if (wer==but) {
            //minirechner();
            }//Ende but
            if (wer==but2) {
              Vector<String> columnNames = new Vector<String>();
              Vector<Vector> data = new Vector<Vector>();
              try {
                  //Mit DB verbinden
                  Class.forName( driver );
                  Connection connection = DriverManager.getConnection(databaseURL, DATABASE_USER, USER_PASSWORD);
                  //Daten lesen
                  String sql = inconsole.getText();
                  Statement stmt = connection.createStatement();
                  ResultSet rs = stmt.executeQuery( sql );
                  ResultSetMetaData md = rs.getMetaData();
                  int columns = md.getColumnCount();
                  //Get Spalten Namen
                  for (int i = 1; i <= columns; i++) {
                      columnNames.addElement( md.getColumnName(i) );
                      }//Ende for
                  //Get Zeilen Namen
                  while (rs.next()) {
                        Vector<Object> row = new Vector<Object>(columns);
                        for (int i = 1; i <= columns; i++) {
                            row.addElement( rs.getObject(i) );
                            }//Ende for
                        data.addElement( row );
                        }//Ende while
                  rs.close();
                  stmt.close();
                  }
                  catch(Exception e) {System.out.println(e);}
              //Tabelle zeichnen
              table = new JTable(data, columnNames);
              drawtable();
        }//Ende if von but2
     
        if (wer==but3) {
           String nummer;
           nummer = JOptionPane.showInputDialog(null,"Welche Zeile soll gelöscht werden? \n Geben Sie die entsprechende 'nr' ein.");
           console.setText(console.getText()+nummer);
           Vector<String> columnNames = new Vector<String>();
           Vector<Vector> data = new Vector<Vector>();
           try {
            Class.forName( driver );
            Connection connection = DriverManager.getConnection(databaseURL, DATABASE_USER, USER_PASSWORD);
            Statement statement = connection.createStatement();
            statement.executeUpdate("delete from daten where nr="+Integer.parseInt(nummer)+";");
            //statement.executeUpdate("insert into daten (nr,datum,myklicks,refklicks,dirklicks,recycle) values(7,'2011-05-08',10,350,9,3);");
            statement = null;
            String sql = "Select * from daten;";
            Statement stmt = connection.createStatement();
            ResultSet rs = stmt.executeQuery( sql );
            ResultSetMetaData md = rs.getMetaData();
            int columns = md.getColumnCount();
            for (int i = 1; i <= columns; i++) {
                columnNames.addElement( md.getColumnName(i) );
            }
            while (rs.next()) {
                Vector<Object> row = new Vector<Object>(columns);
                for (int i = 1; i <= columns; i++) {
                    row.addElement( rs.getObject(i) );
                }
                data.addElement( row );
            }
            rs.close();
            stmt.close();
            statement.close();
        } catch(Exception e) {
            System.out.println( e );
            console.append(String.valueOf(e+"\n"));
        }
        table = new JTable(data, columnNames);
        drawtable();
        }//Ende but3

        //***

}//Ende actionPerformed

public void clearconsole() {console.setText("");}
public void drawtable() {
        scrollPane = new JScrollPane(table);
        getContentPane().add(scrollPane);
        scrollPane.setBounds(25,135,450,515);
}//Ende drawtable

//public void deletetable() {
//       scrollPane.setBounds(0,0,0,0);
//}//Ende deletetable

}//Ende class

Ich hoffe jemand kann mir helfen, die Tabelle in ihre Schranken zu weisen.
 

Michael...

Top Contributor
Welchen LayoutManager nutzt Du? Vermutlich keinen, also Null-Layout. Davon würde ich abraten.
Ansonsten nicht die paint() des JApplets überschreiben. Nimm ein JPanel, füge dort alle Komponenten ein und pack dann nur das JPanel auf das Applet.
Beim JPanel kannst Du dann paintComponent(Graphics g) überschreiben. (Wobei ich anhand der Screenshots keinen Grund sehe, warum man überhaupt paint bzw. paintComponent überschreiben müsste??)

Grundsätzlich sieht das was Du in der paint() machst ganz schön merkwürdig aus das setBounds und repaint() auf die Buttons hat darin gar nichts verloren.

Der MouseOverEffekt bei den Buttons ist doch immer der selbe. Daher:
Warum nicht ein MouseListener für alle Buttons (verkürzt den Code)
Ausserdem nicht immer neue Border Objekte erzeugen. Erzeuge die zwei Border Objekte einmal und verwende Sie wieder. Oder nutzte die BorderFactory.
 

kniffel

Mitglied
Danke dir, ich werds ausprobieren.

Ich nutze NullLayout weil ich damit frei über die Größe und Position verfügen kann. Mit anderen Layouts bin ich stark an bestimmte "Positionen" gebunden. Schwer zu erklären...

Wenn ich setBounds nicht in paint schreibe, erscheint das Objekt nicht, egal wo ich es sonst hinschreiben würde.
Mit repaint() schaffe ich es, dass die Buttons schon beim start des Applets erscheinen und nicht erst, wenn ich mit dem Button drüber fahre.
 
G

Gast2

Gast
Ich nutze NullLayout weil ich damit frei über die Größe und Position verfügen kann. Mit anderen Layouts bin ich stark an bestimmte "Positionen" gebunden. Schwer zu erklären...
Dann nutzt du die Layoutmanager falsch.

Wenn ich setBounds nicht in paint schreibe, erscheint das Objekt nicht, egal wo ich es sonst hinschreiben würde.
Mit repaint() schaffe ich es, dass die Buttons schon beim start des Applets erscheinen und nicht erst, wenn ich mit dem Button drüber fahre.
Wie Michael... schon geschrieben hat, so ist das falsch!
setBounds und repaint haben darin schonmal gar nichts verloren, auch solltest du paint des Applets nicht überschreiben. (da kommt dann z.b. so ein verhalten wie jetzt bei rum)
Verwende einen LayoutManager, dann sind deine Buttons auch von anfang an sichtbar und du musst dich nicht mit solchen "hacks" behelfen.
 

kniffel

Mitglied
Ich weiß ihr werdet dass nur sehr ungern sehen, aber...
Fehler behoben.
Ich habe einige Stunden damit verbracht, das GUI hoffnungslos auf ein layout zu bringen, kein brauchbarer Erfolg.

Habe dann mein Design nocheinmal überfolgen und mir ist aufgefallen, dass ich GAR KEIN Layout definiert hatte.
Da es ein Applet war, hat das positionieren im überschriebenen paint funktioniert, auch ohne Layout.
Aber mit der Zeile: this.setLayout(null); ist auch mein Bug behoben.
Werde es aber dennoch etwas besser mit Panels unter kontrolle bringen...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K JTable im Browser nicht zu sehen - Applet AWT, Swing, JavaFX & SWT 6
M Java Applet JTable/JList AWT, Swing, JavaFX & SWT 6
G Grafikformat für AWT-Applet? AWT, Swing, JavaFX & SWT 0
I Applet BlueJ Applet - Bild mit if-Schleife zeichnen lassen AWT, Swing, JavaFX & SWT 16
T Applet Applet in JFrame einbinden AWT, Swing, JavaFX & SWT 8
C Applet Applet funktioniert in Eclipse aber nicht in Browser AWT, Swing, JavaFX & SWT 1
S Sandboxed Applet weiterhin moeglich..? AWT, Swing, JavaFX & SWT 5
S Oracle's neue Sicherheitseinstellungen zerstoeren mein Applet. Was tun? AWT, Swing, JavaFX & SWT 3
G Applet Applet Komponenten flackern AWT, Swing, JavaFX & SWT 10
U CardLayout im Applet AWT, Swing, JavaFX & SWT 4
J Applet Applet Vererbung/Überladen AWT, Swing, JavaFX & SWT 5
G JavaFX mit ANT deployen als Applet AWT, Swing, JavaFX & SWT 3
S Applet Application 2 applet AWT, Swing, JavaFX & SWT 3
T Applet JTattoo Look and Feel AWT, Swing, JavaFX & SWT 5
T Signiertes Applet Urheber angeben AWT, Swing, JavaFX & SWT 5
S Applet Repaint AWT, Swing, JavaFX & SWT 3
B Java-Applet Parameter übergabe? AWT, Swing, JavaFX & SWT 2
M Applet mit Bildern AWT, Swing, JavaFX & SWT 2
T Applet in JSP einbinden AWT, Swing, JavaFX & SWT 4
R MouseEvent.getX() liefert in Applet Screen-Koordinate AWT, Swing, JavaFX & SWT 2
K Applet Wieso kann ich keine Array im Applet initialisieren AWT, Swing, JavaFX & SWT 13
A Applet Applet vom Web-Server aus aufrufen AWT, Swing, JavaFX & SWT 11
A Applet Applet startet nicht AWT, Swing, JavaFX & SWT 2
P Tatsächliche Größe für Applet AWT, Swing, JavaFX & SWT 3
B Applet Aus Applet signiertes jar mit externen libs erstellen AWT, Swing, JavaFX & SWT 9
S JDialog über Applet AWT, Swing, JavaFX & SWT 3
M Warum funktioniert mein Applet nicht? AWT, Swing, JavaFX & SWT 6
D Applet hintergrund wird nicht weiß AWT, Swing, JavaFX & SWT 2
R Applet JavaScript Methodenaufruf AWT, Swing, JavaFX & SWT 2
A Applet Animiertes gif in awt applet anzeigen AWT, Swing, JavaFX & SWT 11
X Applet Java Applet Datei Ausführung AWT, Swing, JavaFX & SWT 9
A Applet .gif in applet Image nicht animiert angezeigt AWT, Swing, JavaFX & SWT 4
A Applet Applet aus Code neu starten AWT, Swing, JavaFX & SWT 2
K Applet erkennt keine Frameverkleinerung AWT, Swing, JavaFX & SWT 5
S Applet funktioniert nach Browserreload nicht richtig AWT, Swing, JavaFX & SWT 2
T Applet Applet vs. WebStart AWT, Swing, JavaFX & SWT 4
S Applet starten AWT, Swing, JavaFX & SWT 4
B Applet Button oder Toolbar in einem Applet AWT, Swing, JavaFX & SWT 5
V Applet mit Bildbearbeitung AWT, Swing, JavaFX & SWT 3
V Applet Applet starten schlägt fehl AWT, Swing, JavaFX & SWT 2
W Button in Applet AWT, Swing, JavaFX & SWT 9
J Applet Java-Applet friert mit Firefox ein AWT, Swing, JavaFX & SWT 8
J Applet Tetris flackert AWT, Swing, JavaFX & SWT 9
F Applet Applet starten...(+Timer?) AWT, Swing, JavaFX & SWT 12
S [JAVA] JFrame in Applet/JApplet AWT, Swing, JavaFX & SWT 14
D Applet Applet das auf fremden Libraries basiert einbinden? AWT, Swing, JavaFX & SWT 20
M Applet wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
M JMenuBar im Applet und paint AWT, Swing, JavaFX & SWT 9
E Applet Neuen Tab aus Applet öffnen AWT, Swing, JavaFX & SWT 3
G Applet, Link ermitteln, dem der Benutzer gefolgt ist AWT, Swing, JavaFX & SWT 2
K Email versenden ueber Applet AWT, Swing, JavaFX & SWT 11
S Applet in JFrame einbinden AWT, Swing, JavaFX & SWT 6
S Button aktivieren (Applet) AWT, Swing, JavaFX & SWT 2
3 Applet Applet zeigt nur weiße Fläche AWT, Swing, JavaFX & SWT 15
B 2 Probleme (JFrame & Applet) AWT, Swing, JavaFX & SWT 7
A Programmieren einer Agenda mit einer Liste (als Applet und .txt zum Speichern) AWT, Swing, JavaFX & SWT 7
H applet Methode aus abstrakter Klasse aufrufen AWT, Swing, JavaFX & SWT 12
H Applet - Hilfedateien im Browser öffnen / eine Webseite laden AWT, Swing, JavaFX & SWT 6
O JPanel aus Applet starten AWT, Swing, JavaFX & SWT 3
O Applet-Steuerung mit Tastaturbefehlen AWT, Swing, JavaFX & SWT 3
F 4-Gewinnt als Applet AWT, Swing, JavaFX & SWT 24
F Applet vs Stand-Alone-Client AWT, Swing, JavaFX & SWT 3
B AWT Bild als Hintergrund im Applet AWT, Swing, JavaFX & SWT 2
D Probleme mit MouseWheelListener und JLayeredPane in Applet AWT, Swing, JavaFX & SWT 2
G Applet und Swing Anwendung AWT, Swing, JavaFX & SWT 2
S Applet - Aerger mit dem Hintergrundbild - JLabel und JTextfield AWT, Swing, JavaFX & SWT 7
F Applet zeigt Bilder nicht an AWT, Swing, JavaFX & SWT 5
R for-Schleife in Applet ausgeben AWT, Swing, JavaFX & SWT 3
S Bild wird auf Canvas in Applet nicht gezeichnet AWT, Swing, JavaFX & SWT 4
W Swing heapsort + Applet AWT, Swing, JavaFX & SWT 4
P Diagramm in einem Applet zeichnen AWT, Swing, JavaFX & SWT 4
L Einfache Layout Frage für Applet -> Was mache ich bloss falsch? AWT, Swing, JavaFX & SWT 2
K Alternative zu Applet mit HTML-Einbindung AWT, Swing, JavaFX & SWT 11
J Java-Applet beenden AWT, Swing, JavaFX & SWT 3
R Applet aus JFrame starten AWT, Swing, JavaFX & SWT 2
T Konfiguration speichern in Applet AWT, Swing, JavaFX & SWT 2
P Swing Roter Faden beim Applet GUI Programmieren AWT, Swing, JavaFX & SWT 2
T HTML Seite neu laden mittels Applet AWT, Swing, JavaFX & SWT 2
T Icon von Frame ändern - Applet AWT, Swing, JavaFX & SWT 2
T Java Applet beenden AWT, Swing, JavaFX & SWT 2
M Swing Butten & TextFields aus Applet im JFrame nicht sichtbar AWT, Swing, JavaFX & SWT 2
I Swing .Jar Datei - funktioniert - nun als Applet AWT, Swing, JavaFX & SWT 13
S Applet mit Graphics dynamisch vergrößern AWT, Swing, JavaFX & SWT 3
M AWT text im applet formatieren AWT, Swing, JavaFX & SWT 5
L Applet Frage AWT, Swing, JavaFX & SWT 25
1 Verständnisprobleme bei Java Applet AWT, Swing, JavaFX & SWT 13
B Unterschied JFrame/Applet AWT, Swing, JavaFX & SWT 12
T [Applet] startet in Eclipse aber nicht im Browser AWT, Swing, JavaFX & SWT 2
G JSlider in Applet AWT, Swing, JavaFX & SWT 4
P Swing Applet AWT, Swing, JavaFX & SWT 2
R problem mit bildanzeige in applet und main AWT, Swing, JavaFX & SWT 2
A Applet kommt offline nicht mit FileReader zurecht AWT, Swing, JavaFX & SWT 3
F Applet und Popup AWT, Swing, JavaFX & SWT 4
G Wie startet man ein Applet ? AWT, Swing, JavaFX & SWT 4
R Ein Applet von einem Applet öffnen lassen AWT, Swing, JavaFX & SWT 2
Z Applet ausblenden AWT, Swing, JavaFX & SWT 5
G JList wird in einem Applet nur teilweise aktualisiert AWT, Swing, JavaFX & SWT 12
P Applet darstellung von Textfeldern Problem AWT, Swing, JavaFX & SWT 3
I Applet --> neues Fenster öffnen AWT, Swing, JavaFX & SWT 11
I Applet mit Panels (so richtig, gehts besser?) AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben