[JAVA] JList of List verschil en uses

Pagina: 1
Acties:

  • The Wrecker
  • Registratie: Juli 2002
  • Laatst online: 19-05 22:27

The Wrecker

Networking Rulez

Topicstarter
Zoals de topic titel al doet vermoeden. Ik kan niet kiezen tussen een JList en een List. Beiden werken(heb het getest). Ik zie dat men voornamelijk een JList gebruikt, maar ik vraag me af wat de reden is.

Een Jlist is
traag
meer functies

Een List is
vrij kaal
erg licht

Ik heb gezocht hier binnen GOT en op google. Krijg alleen niet echt antwoord wanneer je wat moet gebruiken.

Hieronder code voor het gebruik van List
Het gaat uiteraard om: private List Titel = new List(5,false);

Ik heb me ook suf gezocht om de width aan te passen, maar dat zal wel aan mij liggen hoe je dat moet doen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.TitledBorder;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.*;

// Notice, do not import com.mysql.jdbc.*
// or you will have problems!
public class TestQuery extends JApplet implements ItemListener
{
    private List Titel = new List(5,false); 
    private JComboBox combKrant = new JComboBox();
    private int Artikelnummers;
    private String Temp;
    private JTextField Aantalart = new JTextField();
    public void init()
    {
        Aantalart.setEditable(false);
        
        //Hallo.setHorizontalAlignment(JTextArea.CENTER);
        //comboBox.setSelectedIndex(4);
        //comboBox.addActionListener(this);
        JPanel OUT = new JPanel();
        
        JScrollPane krant = new JScrollPane(Titel);
        krant.setSize(50,30);

        // aantal artikelen veld word gevuld, maar geen artikelen zitten nog in Titel
        Aantalart.setText("Aantal artikelen: "+ String.valueOf(Titel.getItemCount()));
        //Scrollbar settings houden we op auto
        //krant.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        //krant.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        OUT.add(combKrant);
        OUT.add(Aantalart);
        OUT.add(krant);
        OUT.setBorder(new TitledBorder("Kranten Spul"));
        getContentPane().add(OUT,BorderLayout.CENTER);
        
        // vul de combobox
        combKrant.addItem("krant bl abla");
        combKrant.addItemListener(this);
        
        try
        {
            // The newInstance() call is a work around for some
            // broken Java implementations
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            
            // de sql query sql is een functie die de database aanroept
            SQL("Select * from Charturaal");
        } 
        catch (Exception ex) 
        {
        }
        
    }
    public void itemStateChanged(ItemEvent e)
    {
    /*
        Als Item veranderd word dit uitgevoerd
    */
    SQL("Select* from " +combKrant.getSelectedItem());
    }
    /*
    public Dimension getPreferredSize() 
    {
        return new Dimension(200, 200);
    }
    */
    public void SQL(String sql) 
    {
        Statement stmt = null;
        ResultSet rs = null;
        try 
        {
            Connection conn = DriverManager.getConnection
("jdbc:mysql://localhost/kranten?user=root&password=jan");
            stmt = conn.createStatement();
            
            rs = stmt.executeQuery(sql);
            Titel.removeAll();
            while (rs.next())
            {
            Titel.add(rs.getString(1)+" "+rs.getString(2));
            }
            Aantalart.setText("Aantal artikelen: "+ String.valueOf(Titel.getItemCount()));
            // Close everyting
            rs.close();
            stmt.close();
            conn.close();
            
        }
        catch (SQLException ex) 
        {
            // handle any errors
            System.out.println("SQLException: " + ex.getMessage());
            System.out.println("SQLState: " + ex.getSQLState());
            System.out.println("VendorError: " + ex.getErrorCode());
        }
    }
// handle the error
}


edit:

ben nog even verder gegeaan met google, maar ben er nog niet helemaal uit
http://www.bitafterbit.it...p?workid=37&chapterid=226

[ Voor 31% gewijzigd door The Wrecker op 10-11-2004 13:26 ]


  • grhmpf
  • Registratie: December 2000
  • Laatst online: 29-05-2022

grhmpf

Android <3

JList is een swing component, List is een AWT component. Swing is de opvolger/uitbreiding van awt. De reden dat je dus meer JList ziet is waarschijnlijk omdat de meerste gui's swing gebruiken.

  • The Wrecker
  • Registratie: Juli 2002
  • Laatst online: 19-05 22:27

The Wrecker

Networking Rulez

Topicstarter
hmm ik gebruik ook swing,

welke raad je aan?

heb het volgende gevonden:

23. JList

The JList component has both an easy (non-MVC) implementation and a more complicated view. Now, you'll see how to display a list of String objects, just like an AWT List component. Thankfully, it has gotten much easier. To add a String[] (or Vector) of elements to a JList, just tell the constructor or use the setListData() method.

There is one major difference between List and JList. JList doesn't directly support scrolling. You need to place the JList within a JScrollPane object, and let it deal with the scrolling.


En ik zet 'm in een scrollpane :X |:(
Klopt het dat JList trager is dan List?

[ Voor 99% gewijzigd door The Wrecker op 10-11-2004 11:12 ]


  • grhmpf
  • Registratie: December 2000
  • Laatst online: 29-05-2022

grhmpf

Android <3

Aangezien Swing componenten lightweight zijn, is dat vaak beter. AWT componenten hebben (meestal) een directe mapping op een native component. Ik ben geen java gui expert, maar Swing heeft over het algemeen een mooiere scheiding van model en view. Zelf laat ik awt links liggen, dus ik zou zelf ook voor het swing component gaan.

In het bericht wat je quote staan al een paar redenen opgesomt waarom je voor swing zou moeten gaan :)

Swing componenten zijn niet per definitie trager, maar het kan wel doordat ze lightweight zijn: ze worden door java getekend en niet door het onderliggende os.

Oke nog een edit: ik zou eerst een goeie swing tutorial opduiken (bijvoorbeeld die van sun). Dan lees je ook dat je eigenlijk niet geacht wordt de hoogte en breedte van componenten hard te zetten maar met layout managers te werken. Dit omdat je applicatie op elk platform er dan fatsoenlijk uitziet. Natuurlijk kan het wel zonder layout manager, maar dat moet je eigenlijk niet willen.

[ Voor 41% gewijzigd door grhmpf op 10-11-2004 11:16 ]


  • The Wrecker
  • Registratie: Juli 2002
  • Laatst online: 19-05 22:27

The Wrecker

Networking Rulez

Topicstarter
Ik denk eigenlijk een gridlayout te gebruiken, maar ok. Ik snap nu wat het verschil is.

Vind het toch wel vreemd dat setSize() niet werkt, maar ok. In ieder geval bedankt voor de hulp. nu nog een keuze maken.

edit:

Ik ga voor de swing variant waarschijnlijk, uhm tenzij ik niet een makkelijke add functie heb ofzo :o
Ok adden van info gaat met addElement en lukt prima. Het lijkt net zo snel te gaan of misschien zelfs iets sneller (caching???)

[ Voor 39% gewijzigd door The Wrecker op 10-11-2004 11:55 ]


  • grhmpf
  • Registratie: December 2000
  • Laatst online: 29-05-2022

grhmpf

Android <3

Je kan wel de preferred, minimale en maximale grootte opgeven van een component. Of de layoutmanager daar iets mee doet hangt af van de layoutmanager die je gebruikt.

Volgens mij is de call iets van setPreferredSize en vriendjes.

  • The Wrecker
  • Registratie: Juli 2002
  • Laatst online: 19-05 22:27

The Wrecker

Networking Rulez

Topicstarter
Die heb ik inderdaad ook al gezien, maar niet elk component schijnt een setPreferredSize te hebben ofzo.

Mwah, daar kom ik wel achter. Zo'n noob ben ik nu ook weer niet. Was ff in de war met die lists die ik tegenkwam.

Het is nogal een tijd geleden dat ik met swing en JAVA gewerkt heb enzo. Anders kan ik met javascript altijd nog de sql functie aanroepen in deze classe. (Het komt uiteindelijk in Lotus Notes)

Ik kan in ieder geval weer verder met proggen :D

edit:

die setpreferred werkt nu idd ook


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/* UIteindelijk de code die dus werkt met de JList
Verre van compleet en final voor mijn doeleinden,
maar voor mensen die dit topic nog langskomen

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.TitledBorder;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.*;

// Notice, do not import com.mysql.jdbc.*
// or you will have problems!
public class TestQuery extends JApplet implements ItemListener
{
    /*
        http://java.sun.com/docs/books/tutorial/uiswing/components/list.html
        http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/DefaultListModel.html
    */
    private DefaultListModel TitelModel = new DefaultListModel();
    private JList Titel = new JList(TitelModel); 
    private JComboBox combKrant = new JComboBox();
    private String Temp;
    private JTextField Aantalart = new JTextField();
    
    
    public void init()
    {
        Aantalart.setEditable(false);
        Titel.setVisibleRowCount( 5 );
        JPanel OUT = new JPanel();
        JScrollPane krant = new JScrollPane(Titel);
        //Scrollbar settings houden we op Always
        krant.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        krant.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        OUT.add(combKrant);
        OUT.add(Aantalart);
        OUT.add(krant);
        OUT.setBorder(new TitledBorder("Kranten Spul"));
        getContentPane().add(OUT,BorderLayout.CENTER);
        krant.setPreferredSize(new Dimension(400, 80));
        // vul de combobox
        combKrant.addItem("krant bl abla");
        combKrant.addItemListener(this);
        
        try
        {
            // The newInstance() call is a work around for some
            // broken Java implementations
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            
            // de sql query sql is een functie die de database aanroept
            SQL("Select * from Charturaal");
        } 
        catch (Exception ex) 
        {
        }
        
    }
    public void itemStateChanged(ItemEvent e)
    {
    /*
        Als Item veranderd word dit uitgevoerd
        Wil ik misschien uitbreiden met de kolommen die opgehaald moeten worden
    */
    SQL("Select* from " + combKrant.getSelectedItem());
    }

    public void SQL(String sql) 
    {
        /*
            Hierin word een Select query uitgevoerd op de database
            Als Input heb je de query
        */
        Statement stmt = null;
        ResultSet rs = null;
        try 
        {
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/kranten?user=root&password=jan");
            stmt = conn.createStatement();
            
            rs = stmt.executeQuery(sql);
            TitelModel.removeAllElements();
            while (rs.next())
            {
            TitelModel.addElement(rs.getString(1)+" "+rs.getString(2));
            }
            Aantalart.setText("Aantal artikelen: "+ String.valueOf(TitelModel.getSize()));
            // Close everyting
            rs.close();
            stmt.close();
            conn.close();
            
        }
        catch (SQLException ex) 
        {
            // handle any errors
            System.out.println("SQLException: " + ex.getMessage());
            System.out.println("SQLState: " + ex.getSQLState());
            System.out.println("VendorError: " + ex.getErrorCode());
        }
    }
// handle the error
}

[ Voor 96% gewijzigd door The Wrecker op 10-11-2004 13:26 ]


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 16:37

Robtimus

me Robtimus no like you

The_Wrecker schreef op 10 november 2004 @ 12:46:
Die heb ik inderdaad ook al gezien, maar niet elk component schijnt een setPreferredSize te hebben ofzo.
Alle components die subclasses van JComponent zijn hebben die, en dat zijn vrijwel alle components die met een J beginnen.

Uitzonderingen: JApplet, JDialog, JFrame, JWindow. En die hebben dan meteen geen setPreferredSize, wel een getPreferredSize. Maar daar kun je langs werken door de volgende code:
Java:
1
2
3
4
5
JApplet/JDialog/JFrame/JWindow main = new ....;
JPanel panel = new JPanel();
panel.setPreferredSize(...);
main.getContentPane().add(panel);
// werk verder met panel
Dat JPanel is nodig omdat getContentPane een Container teruggeeft, en die heeft ook geen setPreferredSize.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • The Wrecker
  • Registratie: Juli 2002
  • Laatst online: 19-05 22:27

The Wrecker

Networking Rulez

Topicstarter
IceManX schreef op 10 november 2004 @ 13:26:
[...]
Alle components die subclasses van JComponent zijn hebben die, en dat zijn vrijwel alle components die met een J beginnen.

Uitzonderingen: JApplet, JDialog, JFrame, JWindow. En die hebben dan meteen geen setPreferredSize, wel een getPreferredSize. Maar daar kun je langs werken door de volgende code:
Java:
1
2
3
4
5
JApplet/JDialog/JFrame/JWindow main = new ....;
JPanel panel = new JPanel();
panel.setPreferredSize(...);
main.getContentPane().add(panel);
// werk verder met panel
Dat JPanel is nodig omdat getContentPane een Container teruggeeft, en die heeft ook geen setPreferredSize.
Misschien dat ik er nog tegenaanloop.
Het is uiteindelijk een applet. Maar die setpreferredsize klopppen in elk geval
Bedankt iedereen!

ps. ik kijk later nog even naar de layoutmanagers

  • nxt
  • Registratie: November 2001
  • Laatst online: 04-02 09:36

nxt

IceManX schreef op 10 november 2004 @ 13:26:
[...]
Java:
1
2
3
JApplet/JDialog/JFrame/JWindow main = new ....;
JPanel panel = new JPanel();
main.getContentPane().add(panel);
Dat JPanel is nodig omdat getContentPane een Container teruggeeft...
Waarom een nieuwe JPanel aanmaken?
Je kan de container toch gewoon casten naar een JPanel?
code:
1
JPanel contentPane = (JPanel)main.getContentPane();

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 16:37

Robtimus

me Robtimus no like you

En waar haal jij vandaan dat het een JPanel is? Want de API zegt alleen maar dat het een Container is. Dat soort aannames maak ik liever niet, zelfs al is het in de huidige implementatie een JPanel, in een latere implementatie kan het een volledig andere Container zijn.

Tuurlijk, je kan altijd ff checken:
Java:
1
2
3
4
5
6
7
8
9
10
11
JPanel panel = null;
Container pane = main.getContentPane();
if (pane instanceof JPanel)
{
    panel = pane;
}
else
{
    panel = new JPanel();
    pane.add(panel);
}
Maar er gewoon van uitgaan dat pane een JPanel is is niet correct, totdat de API zegt dat het zo is.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-04 09:28

Macros

I'm watching...

Ik zet er zelf altijd een content pane in met setContentPane(), kan je zelf uitmaken of het een JPanel of iets anders is.

"Beauty is the ultimate defence against complexity." David Gelernter


  • The Fox NL
  • Registratie: Oktober 2004
  • Laatst online: 19-05 22:24
The_Wrecker, zo te zien gebruik je JApplet. Dat is zoals al eerder gezegd een Swing component. Mijn ervaring is dat als je Swing gebruikt, geen awt componenten erin moet gooien want je krijgt dan rare dingen.
In jou geval zou ik dus voor JList gaan. Gebruikte je Applet ipv JApplet, dan zou ik List gebruiken.

  • The Wrecker
  • Registratie: Juli 2002
  • Laatst online: 19-05 22:27

The Wrecker

Networking Rulez

Topicstarter
The Fox NL schreef op 11 november 2004 @ 10:30:
The_Wrecker, zo te zien gebruik je JApplet. Dat is zoals al eerder gezegd een Swing component. Mijn ervaring is dat als je Swing gebruikt, geen awt componenten erin moet gooien want je krijgt dan rare dingen.
In jou geval zou ik dus voor JList gaan. Gebruikte je Applet ipv JApplet, dan zou ik List gebruiken.
Ik gebruik inderdaad JList nu. En JTextArea. Heb nog geen specifieke layoutmanager, maar het werkt allemaal prima.

Ik denk dat ik wel begrijp wat je bedoeld met 'rare' dingen. Je bedoeld dubbele classes enzo? Mja, als het een oplossing is en goed werkt is het niet erg. Alhoewel het natuurlijk netter is om het bij SWING te houden

  • The Fox NL
  • Registratie: Oktober 2004
  • Laatst online: 19-05 22:24
The_Wrecker schreef op 11 november 2004 @ 13:28:
[...]


Ik gebruik inderdaad JList nu. En JTextArea. Heb nog geen specifieke layoutmanager, maar het werkt allemaal prima.

Ik denk dat ik wel begrijp wat je bedoeld met 'rare' dingen. Je bedoeld dubbele classes enzo? Mja, als het een oplossing is en goed werkt is het niet erg. Alhoewel het natuurlijk netter is om het bij SWING te houden
Heb ooit eens zeeslag gemaakt, ik had toen een JFrame, en daar gooide ik Panels in ipv JPanels, dit had tot gevolg dat als ik een menu selecteerde, de panels boven het uitgeklapte menu kwamen ipv erachter. En dan is het moeilijk een menu-item te selecteren he, als je ze niet kan zien :P

  • The Wrecker
  • Registratie: Juli 2002
  • Laatst online: 19-05 22:27

The Wrecker

Networking Rulez

Topicstarter
The Fox NL schreef op 11 november 2004 @ 13:33:
[...]


Heb ooit eens zeeslag gemaakt, ik had toen een JFrame, en daar gooide ik Panels in ipv JPanels, dit had tot gevolg dat als ik een menu selecteerde, de panels boven het uitgeklapte menu kwamen ipv erachter. En dan is het moeilijk een menu-item te selecteren he, als je ze niet kan zien :P
LOL :D

Dat vind ik wel een apart iets inderdaad. maar als je aan het devven bent kom je daar wel achter denk ik, maar als je zoiets hebt dat je niet snel doorhebt... best lullig.

persoon: "Ja en nu klik je daarop"
klant: "staat er niet"
persoon: "heb het zelf geprogged wat zeur je?"
persoon probeerd zelf: "uhm, :/ . Uh ja sorry :P "

:+

Om toch op de JList terug te komen. Kan je meerdere kolommen erin maken en die uitlezen? Moet denk ik wel kunnen.
mwah ik lees anders de string wel uit en pak wat ik nodig heb.

[ Voor 22% gewijzigd door The Wrecker op 11-11-2004 15:33 ]


  • The Fox NL
  • Registratie: Oktober 2004
  • Laatst online: 19-05 22:24
The_Wrecker schreef op 11 november 2004 @ 13:52:
Om toch op de JList terug te komen. Kan je meerdere kolommen erin maken en die uitlezen? Moet denk ik wel kunnen.
mwah ik lees anders de string wel uit en pak wat ik nodig heb.
Het is volgens mij niet mogelijk meerdere kolommen erin te maken. Als je meerdere kolommen wilt kun je eventueel gebruik maken van een JTable
Pagina: 1