JTable

Dyskusje na temat Javy.
kompozyt
Początkujący
Początkujący
Posty: 14
Dołączył(a): piątek, 27 sierpnia 2010, 19:52

JTable

Post przez kompozyt »

Witam !

Mam taki mały kawałek kodu który bardzo ładnie działa,
ale jak to w życiu bywa nie zawsze jest z górki.
Do rzeczy - nie wiem jak włączyć automatyczne sortowanie kolumn po ich naciśnięciu.
Tak jak ma to miejsce gdy ustawimy:
jTable1.setAutoCreateRowSorter(true);

oto kod, proszę o pomoc i Pozdrawiam

Code: Zaznacz cały

    try {
      Statement st=(Statement) c.createStatement();
      ResultSet rs=st.executeQuery("SELECT id, imie, nazwisko, wiek FROM tabelauser");
      Vector<Vector> wiersz = new Vector<Vector>();
      while (rs.next()) {
        String pid=rs.getString("id");
        String pim=(rs.getString("imie"));
        String pna=(rs.getString("nazwisko"));
        String pwi=(rs.getString("wiek"));
        Vector<String> elementy = new Vector<String>();
        elementy.removeAllElements();
        elementy.addElement(pid);
        elementy.addElement(pim);
        elementy.addElement(pna);
        elementy.addElement(pwi);
       wiersz.add(elementy);
      } rs.close();
        JTable tabelka = new JTable(wiersz,columnNames);
        jScrollPane1.setViewportView(tabelka);
        tabelka.setVisible(true);
        jTable1.setColumnModel((TableColumnModel) columnNames);
        jTable1.setModel((TableModel) wiersz);
    }
\_.?._/
kompozyt
Początkujący
Początkujący
Posty: 14
Dołączył(a): piątek, 27 sierpnia 2010, 19:52

Re: JTable

Post przez kompozyt »

Witam ponownie !
Przyszło mi na myśl że może komuś się przyda cała treść procedury której kawałek wcześniej umieściłem.
Zajęło mi to trochę czasu zanim to napisałem, więc może zaoszczędzę komuś choć odrobinę czasu ;)
====================================================================================

Code: Zaznacz cały

private void listuj()
    {   
        Vector<String> columnNames = new Vector<String>();
        columnNames.addElement("ID");
        columnNames.addElement("Imie");
        columnNames.addElement("Nazwisko");
        columnNames.addElement("Wiek");

        Connection c = null;
    try {
      Class.forName("com.mysql.jdbc.Driver").newInstance();
      String url = "jdbc:mysql://localhost:3306/test";
      c=(Connection) DriverManager.getConnection(url,"user","haslo");
      System.out.println("Udało się połączyć z bazą danych...");}
      catch (ClassNotFoundException e) { System.out.println("Problem z driverem bazy danych"); }
      catch (SQLException e) { System.out.println("Nie można połączyć się z baza danych"); }
      catch (Exception e) { System.out.println("Błąd przy połączeniu z bazą danych"); }
    try {
      Statement st=(Statement) c.createStatement();
      ResultSet rs=st.executeQuery("SELECT id, imie, nazwisko, wiek FROM tabelauser");
      Vector<Vector> wiersz = new Vector<Vector>();
      while (rs.next()) {

        String  pid=rs.getString("id");
        String pim=rs.getString("imie");
        String pna=rs.getString("nazwisko");
        String pwi=rs.getString("wiek");

                Vector<String> elementy = new Vector<String>();
                elementy.removeAllElements();
                elementy.addElement(pid);
                elementy.addElement(pim);
                elementy.addElement(pna);
                elementy.addElement(pwi);
                
                wiersz.add(elementy);

      } rs.close();
        JTable tabelka = new JTable(wiersz,columnNames);
        JFrame frame =new JFrame(); //======================
        JScrollPane scrollPane = new JScrollPane(tabelka);
        tabelka.getColumnModel().getColumn(0).setMaxWidth(50);
        tabelka.getColumnModel().getColumn(1).setMaxWidth(100);
        tabelka.getColumnModel().getColumn(2).setMaxWidth(100);
        tabelka.getColumnModel().getColumn(3).setMaxWidth(50);
        frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        frame.add(scrollPane, BorderLayout.CENTER);
        frame.setBounds(100, 100, 800, 90+(ile*16));
        frame.setVisible(true); //==========================
    }
    catch (Exception e) {System.out.println("Błąd przy pobieraniu danych"); }
    if (c != null) { try { c.close(); System.out.println("Połączenie z bazą danych zamknięte"); }
    catch (Exception e) { System.out.println("Błąd przy zamykaniu bazy danych");
   }}}
====================================================================================
Tak na marginesie polecam bardzo fajny i darmowy program do operowania na bazach MySql.
----------------------
SQLyog Community Edition
http://www.sciagnij.pl/programy/p/Windo ... -SQLyog/33
----------------------
(wiem ze nie odkrywam w tej chwili świata ale może się przydać, miłej zabawy) :d

POZDRAWIAM
KURSY SĄ OK.!
\_.?._/
Lenson
Bywalec
Bywalec
Posty: 67
Dołączył(a): piątek, 25 lutego 2011, 01:41

Re: JTable

Post przez Lenson »

Wydaje mi się , że w całym tym programowaniu , nie chodzi o to żeby kopiować kod od kogoś , według mnie , i to co ja robię to raczej nie kopiuje kodu nie wiadomej treści od kogoś z zewnątrz bo to troche się wtedy mija z celem "programisty" ^^ Ale dzieki , może komus sie przyda ;p
kompozyt
Początkujący
Początkujący
Posty: 14
Dołączył(a): piątek, 27 sierpnia 2010, 19:52

Re: JTable

Post przez kompozyt »

Na świecie istnieją różne potrzeby i różne zawody, weźmy takiego malarza
(oczywiście można by wybrać jakikolwiek inny zawód – wszystkie je szanuję)
ma do wykonania różnego typu zadania, weźmy dwa skrajne przypadki.
Malarz nr1 ma do pomalowania 15 pokoi biurowych i korytarz je łączący.
Malarz nr2 (artysta mówi o sobie) ma do pomalowania płótno 1x2 metra na którym ma odzwierciedlić piękno zachodzącego słońca.
==================================
Na czym polega różnica w pracy tych malarzy ?
==================================
Nr1 to facet który przez tydzień musi się wyrobić z robotą zgodnie z umową, do tego celu wykorzystuje najnowsze zdobycze techniki malarskiej, różnego rodzaju chwyty i triki oraz cały swój bagaż doświadczeń. Dzięki temu codziennie przez cały ten tydzień po godzinach pracy będzie do dyspozycji dla swoich dzieci i żony.

Nr2 i teraz UWAGA! to ten sam facet co Nr1 tylko że siedzący w sobotę na działce przed swoim płótnem całkowicie pochłonięty swojej pasji, godzinami wpatruje się w tan kawałek nieba nad drzewami bez końca miesza farby wyciskane z tubek i to jest piękne.

Do czego to porównanie ? chyba nie muszę pisać wszyscy to rozumieją.

Na koniec dodam tylko że pisząc to - wróciłem pamięcią do roku 1990 kiedy to po raz pierwszy miałem od szefa zadanie napisania programu mając do dyspozycji PC-XT Dos cipper + dBase.
Napisałem ten program, zajęło mi to 4 miesiące (wszystkim zainteresowanym wydawało się bardzo szybko) bazowałem tylko na manualu clippera i dbase’a, nie było wtedy Internetu, ani książek na ten temat. Nie było myszki przy komputerze !!!
Dziś się z tego :lol: – dziś taki program bym WYKLIKAŁ jednego dnia i to w godzinach pracy.
Programowanie to moja pasja. POZDRAWIAM
\_.?._/
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: JTable

Post przez Morfidon »

Dokładnie zawsze mówiłem, że programistów dzieli się na klepaczy i twórców, ciekaw porównanie kompozyt ;)
Lenson
Bywalec
Bywalec
Posty: 67
Dołączył(a): piątek, 25 lutego 2011, 01:41

Re: JTable

Post przez Lenson »

Fajne porównanie ^^ :D Ciesze się że nie tylko ja jestem taki szurnięty na tym pkt ^^
kompozyt
Początkujący
Początkujący
Posty: 14
Dołączył(a): piątek, 27 sierpnia 2010, 19:52

Hibernate - ArrayList - JTable

Post przez kompozyt »

Witam !
Mam mały problem.
W linijce
JTable tabelkax = new JTable(wiersz,kolumna);
mam błąd. :oops:
Czy możecie mi podpowiedzieć co robię źle ?
Gdy to samo napiszę z <Vector> zamiast ArrayList to działa.
Chyba czegoś nie rozumiem. :(

Code: Zaznacz cały

    private void tablicaarray(){
        ArrayList<String> kolumna = new ArrayList<String>();
        kolumna.clear();
        kolumna.add("ID");
        kolumna.add("Imie");
        kolumna.add("Nazwisko");
        kolumna.add("Wiek");
      String zap = "From Tabelauser ORDER BY id ASC";
      Session s = HibernateUtil.getSessionFactory().getCurrentSession();
      s.beginTransaction();
      List<Tabelauser> baza2 = (List<Tabelauser>)s.createQuery(zap).list();
      ArrayList<ArrayList<String>> wiersz = new ArrayList<ArrayList<String>>();
          wiersz.clear();
          for (Tabelauser p : baza2) {
            String pid = (""+p.getId());
            String pim = (p.getImie());
            String pna = (p.getNazwisko());
            String pwi = (""+p.getWiek());
                ArrayList<String> elementy = new ArrayList<String>();
                elementy.clear();
                elementy.add(pid);
                elementy.add(pim);
                elementy.add(pna);
                elementy.add(pwi);
              wiersz.add(elementy);
           }
      s.getTransaction().commit();
        JTable tabelkax = new JTable(wiersz,kolumna);
        jScrollPane1.setViewportView(tabelkax);
        tabelkax.setVisible(true);
    }
Pozdrawiam
\_.?._/
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: JTable

Post przez Morfidon »

Jaki jest to błąd? Wypisz go.
kompozyt
Początkujący
Początkujący
Posty: 14
Dołączył(a): piątek, 27 sierpnia 2010, 19:52

Re: JTable

Post przez kompozyt »

cannot find symbol
symbol: constructor JTable(java.util.ArrayList<java.util.ArrayList<java.lang.String>>,java.util.ArrayList<java.lang.String>)
location: class javax.swing.JTable
\_.?._/
kompozyt
Początkujący
Początkujący
Posty: 14
Dołączył(a): piątek, 27 sierpnia 2010, 19:52

Re: JTable

Post przez kompozyt »

tak na marginesie doczytałem się w internecie i nie tylko bo sam NetBeans sam zwraca na to uwagę że:
cytuję
"nie używaj klasy Vector - to relikt przeszłości.
Zamiast tego używaj interfejsu List oraz klas go implementujących,
jak np. ArrayList."
\_.?._/
Post Reply