Avatar billede aslan Nybegynder
08. juni 2002 - 11:50 Der er 30 kommentarer og
1 løsning

smide ResultSets i JTable?

Jeg har dette eksempel taget inde fra Sun:

Button vis = new Button("Vis");

        Object[][] data = {
            {"Mary", "Campione",
            "Snowboarding", new Integer(5), },
            {"Alison", "Huml",
            "Rowing", new Integer(3), },
            {"Kathy", "Walrath",
            "Chasing toddlers", new Integer(2), },
            {"Mark", "Andrews",
            "Speed reading", new Integer(20),},

        };

        String[] columnNames = {"First Name",
                                "Last Name",
                                "Sport",
                                "# of Years"
                                };



        final JTable table = new JTable(data, columnNames);
        table.setPreferredScrollableViewportSize(new Dimension(300, 50));

          setLayout(new BorderLayout());
          add(table.getTableHeader(), BorderLayout.NORTH);
          add(table, BorderLayout.CENTER);
          add(vis,BorderLayout.SOUTH);

-----------------------------------------------------

Hvordan kan jeg smide mine data fra databasen ind i den via knappen vis?

Min query:

        public void visPoster()
        {

        try {

        ConnectDB db = new ConnectDB( "jdbc:mysql://localhost/rikif_dk", "aslan", "" );

 

        ResultSet row = db.Select( "SELECT * FROM board" );

        while( row.next() )
        {
            // row.getString("data");
            // row.getString("tid") ;
            // row.getString("data2");
            // row.getString("tid2") ;
        }

            } catch (SQLException e)

            {

             
            }
            catch(NullPointerException a)
            {
               
            }


        }

            public void actionPerformed(ActionEvent e)
            {


                if(e.getSource() == vis)
                {

                  visPoster();

                }


            }

Avatar billede olly Nybegynder
08. juni 2002 - 12:03 #1
Hvad mener du?

Du kan vel bare smide dem ind i det array hvis det er det du vil... Forklar problem lidt nærmere?
Avatar billede soreno Praktikant
08. juni 2002 - 12:20 #2
prøv at kigge lidt på eksemplet der følger med jdk'en:
jdk14\demo\jfc\TableExample
Avatar billede olly Nybegynder
08. juni 2002 - 12:25 #3
Noget i den retning her?

//Antalet af tubler i resultsettet
int i = 0;
while( row.next() )
{
  //Pladsen i resultsettet
  int ii = 0;

            data[i][ii] = row.getString("data")
            ii++;
            data[i][ii] = row.getString("tid")
            ii++;
            data[i][ii] = row.getString("data2")
            ii++;
            data[i][ii] = row.getString("tid2")

  i++;
}

        String[] columnNames = {"Data",
                                "Tid",
                                "Data2",
                                "Tid2"
                                };



        final JTable table = new JTable(data, columnNames);

Ikke pæn kode, men det er tidligt Lørdag...
Avatar billede olly Nybegynder
08. juni 2002 - 12:27 #4
Hvis du kun hiver Strings ud skal du nok difinere data arrayet som String.

Der er kun et prbblem, og det er at du skal have en arraystørrelse med det her... Og det er lidt svært.. Du ved jo ikke hvor mange rækker der er i db...
Avatar billede aslan Nybegynder
08. juni 2002 - 15:31 #5
Den viser kun en tom tabel når man trykker på vis...Den får ikke hentet det den skulle fra databasen.


import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import java.applet.Applet;


public class Test extends Applet implements ActionListener
{
        Button vis = new Button("Vis");

        Object data[][] = new Object[10][10];

        public void init()
        {

          String[] columnNames = {"First Name",
                                "Password"};

          final JTable table = new JTable(data, columnNames);
          table.setPreferredScrollableViewportSize(new Dimension(300, 50));

          setLayout(new BorderLayout());
          add(table.getTableHeader(), BorderLayout.NORTH);
          add(table, BorderLayout.CENTER);
          add(vis,BorderLayout.SOUTH);

        }

        public void visPoster()
        {

        try {

        ConnectDB db = new ConnectDB( "jdbc:mysql://localhost/rikif_dk", "aslan", "" );

        ResultSet row = db.Select( "SELECT username,password FROM ADMIN" );

        int i = 0;

        while( row.next() )
        {

            int ii = 0;

            data[i][ii] = row.getString("username");
            ii++;
            data[i][ii] = row.getString("admin");
            ii++;

        }

            } catch (SQLException e)

            {



            }
            catch(NullPointerException a)
            {

            }


        }

            public void actionPerformed(ActionEvent e)
            {


                if(e.getSource() == vis)
                {

                  visPoster();

                }


            }

}
Avatar billede aslan Nybegynder
08. juni 2002 - 15:43 #6
Fik også lige tilføjet vis.addActionListener(this); som jeg havde glemt man det hjalp heller ikke...
Avatar billede aslan Nybegynder
08. juni 2002 - 16:00 #7
Ok det virker nu, men på en underlig måde. For at appleten skal hente data fra database skal jeg først trykke på vis hvorefter på columnnames:First Name....?? Ellers sker der ikke noget,det fatter jeg ikke min kode:

import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import java.applet.Applet;


public class Test extends Applet implements ActionListener
{
        Button vis = new Button("Vis");

        Object data[][] = new Object[100][2];

        public void init()
        {

          String[] columnNames = {"First Name",
                                "Password"};

          final JTable table = new JTable(data, columnNames);
          table.setPreferredScrollableViewportSize(new Dimension(300, 50));

          setLayout(new BorderLayout());
          add(table.getTableHeader(), BorderLayout.NORTH);
          add(table, BorderLayout.CENTER);
          add(vis,BorderLayout.SOUTH);
          vis.addActionListener(this);

        }

        public void visPoster()
        {

        try {

        ConnectDB db = new ConnectDB( "jdbc:mysql://localhost/rikif_dk", "aslan", "" );

        ResultSet row = db.Select( "SELECT * FROM ADMIN" );

        //int i = 0;

      //while( row.next() )

        for(int i=0;row.next();i++)
        {

            int ii = 0;
            data[i][ii] = row.getString("username");
            ii++;
            data[i][ii] = row.getString("password");
            ii++;

        }

            } catch (SQLException e)

            {



            }
            catch(NullPointerException a)
            {

            }


        }

            public void actionPerformed(ActionEvent e)
            {


                if(e.getSource() == vis)
                {

                  visPoster();

                }


            }

}
Avatar billede olly Nybegynder
08. juni 2002 - 16:23 #8
Formodelig fordi du laver JTable før du går i DB... Prøv at lave det her?

                if(e.getSource() == vis)
                {

                  visPoster();
                  table.repaint();

                }
Avatar billede olly Nybegynder
08. juni 2002 - 16:24 #9
Så får du genopfrisket tabelen efter der er kommet data i...
Avatar billede aslan Nybegynder
08. juni 2002 - 16:30 #10
Den kan ikke genkende table siger den?
Avatar billede olly Nybegynder
08. juni 2002 - 16:32 #11
Hmmm... Det må da være en måde... 2 sec... Får den egentlig lavet en rov.next()...Tror da ikke den bliver udført sådan som den står?
Avatar billede aslan Nybegynder
08. juni 2002 - 16:34 #12
Jo den virker som den skal, alt bliver udskrevet... man skal bare trykke 2 gange før den gider..
Avatar billede olly Nybegynder
08. juni 2002 - 16:36 #13
Ja, men det er fordi den skal genopfriskes... Ellers skal du lave en

table = new JTable(data, columnNames);

og så må den ikke i toppen være final og så skal den måske addes igen...
Avatar billede olly Nybegynder
08. juni 2002 - 16:38 #14
eller så skift table.repaint ud med this.repaint() for at repainte hele appletet...

Den metode findes på applet
Avatar billede aslan Nybegynder
08. juni 2002 - 16:43 #15
Sådan så virkede det... :) takker
Avatar billede olly Nybegynder
08. juni 2002 - 16:44 #16
Hvordan gjorde du? rapaint eller add igen?
Avatar billede aslan Nybegynder
08. juni 2002 - 16:45 #17
import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import java.applet.Applet;


public class Test extends Applet implements ActionListener
{
        Button vis = new Button("Vis");

        Object data[][] = new Object[100][2];
        String[] columnNames = new String[2];

        public void init()
        {

          columnNames[0] = "Name";
          columnNames[1] = "Password";
          JTable table = new JTable(data, columnNames);
          JScrollPane scrollPane = new JScrollPane(table);
          table.setPreferredScrollableViewportSize(new Dimension(300, 50));

          setLayout(new BorderLayout());
          add(table.getTableHeader(), BorderLayout.NORTH);
          add(table, BorderLayout.CENTER);
          add(vis,BorderLayout.SOUTH);
          vis.addActionListener(this);

        }

        public void visPoster()
        {

        try {

        ConnectDB db = new ConnectDB( "jdbc:mysql://localhost/rikif_dk", "aslan", "" );

        ResultSet row = db.Select( "SELECT * FROM Board" );



        for(int i=0;row.next();i++)
        {

            int ii = 0;
            data[i][ii] = row.getString("data");
            ii++;
            data[i][ii] = row.getString("tid");
            ii++;

        }

            } catch (SQLException e)

            {



            }
            catch(NullPointerException a)
            {

            }


        }

            public void actionPerformed(ActionEvent e)
            {


                if(e.getSource() == vis)
                {

                  visPoster();
                  this.repaint();

                }


            }

}
Avatar billede aslan Nybegynder
08. juni 2002 - 16:46 #18
Nu skal jeg bare lige finde ud af hvordan jeg får et scrolbar på tabellen?
Avatar billede olly Nybegynder
08. juni 2002 - 16:47 #19
Hvis jeg må komme med et råd? Der kommer da ingen scroll i siden... Det er scrollen du skal add ikke table...
Avatar billede olly Nybegynder
08. juni 2002 - 16:47 #20
Skal jeg give koden?
Avatar billede aslan Nybegynder
08. juni 2002 - 16:48 #21
Ok.. hvordan mener du?
Avatar billede aslan Nybegynder
08. juni 2002 - 16:48 #22
jatak..
Avatar billede olly Nybegynder
08. juni 2002 - 16:49 #23
import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import java.applet.Applet;


public class Test extends Applet implements ActionListener
{
        Button vis = new Button("Vis");

        Object data[][] = new Object[100][2];
        String[] columnNames = new String[2];

        public void init()
        {

          columnNames[0] = "Name";
          columnNames[1] = "Password";
          JTable table = new JTable(data, columnNames);
          JScrollPane scrollPane = new JScrollPane(table);
          table.setPreferredScrollableViewportSize(new Dimension(300, 50));

          setLayout(new BorderLayout());
          add(scrollPane.getTableHeader(), BorderLayout.NORTH);
          //Ikke 100 på ovenstående!
          add(scrollPane, BorderLayout.CENTER);
          add(vis,BorderLayout.SOUTH);
          vis.addActionListener(this);

        }

        public void visPoster()
        {

        try {

        ConnectDB db = new ConnectDB( "jdbc:mysql://localhost/rikif_dk", "aslan", "" );

        ResultSet row = db.Select( "SELECT * FROM Board" );



        for(int i=0;row.next();i++)
        {

            int ii = 0;
            data[i][ii] = row.getString("data");
            ii++;
            data[i][ii] = row.getString("tid");
            ii++;

        }

            } catch (SQLException e)

            {



            }
            catch(NullPointerException a)
            {

            }


        }

            public void actionPerformed(ActionEvent e)
            {


                if(e.getSource() == vis)
                {

                  visPoster();
                  this.repaint();

                }


            }

}
Avatar billede olly Nybegynder
08. juni 2002 - 16:50 #24
Sådan der... Er bare ikke 100% på den med

add(scrollPane.getTableHeader(), BorderLayout.NORTH);

måske det skal være

add(table.getTableHeader(), BorderLayout.NORTH);

Da jeg formoder det er noget text der ikke ændre sig...
Avatar billede aslan Nybegynder
08. juni 2002 - 16:52 #25
den giver et enkelt fejl:

C:\Program Files\nusphere\apache\htdocs\mysql\Test.java:26: cannot resolve symbol
symbol  : method getTableHeader  ()
location: class javax.swing.JScrollPane
          add(scrollPane.getTableHeader(), BorderLayout.NORTH);
                        ^
1 error

Tool completed with exit code 1
Avatar billede aslan Nybegynder
08. juni 2002 - 16:53 #26
Det var lige det der var galt... tusind tak:)
Avatar billede olly Nybegynder
08. juni 2002 - 16:53 #27
Ja det er det jeg skriver... Prøv med

add(table.getTableHeader(), BorderLayout.NORTH);

Hvad er det for noget data?
Avatar billede olly Nybegynder
08. juni 2002 - 16:54 #28
Var så lidt... Har selv lavet den slags i et salgsmodul en gang... Træls...
Avatar billede aslan Nybegynder
08. juni 2002 - 16:56 #29
hehe.. nu skal jeg bare lege videre med det... dejligt!!
Avatar billede olly Nybegynder
08. juni 2002 - 16:57 #30
Held og lykke...
Avatar billede aslan Nybegynder
09. juni 2002 - 16:43 #31
ehm.. hvordan opdatere man egentlig en JTable med ny data? Jeg troede den gjorde det automatisk...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester