PDA

View Full Version : Java esiste il listBox?


SteR9
16-03-2004, 19:34
in java esiste un qualcosa di simile al listBox di Vb?
ho bisogno di caricare nel listBox i dati da un file di testo e poi per esempio creare un menu sul tasto destro per poter eliminare la stringa selezionata...
grazie

PGI
16-03-2004, 20:45
Ad occhio direi JList, ma non conosco con precisione il funzionamento di una list-box in VB. Prova a dare un'occhiata alla documentazione Java (JList e DefaultListModel)

cn73
17-03-2004, 09:44
In Java esiste tutto :D

A Visual Index to the Swing Components (http://java.sun.com/docs/books/tutorial/uiswing/components/components.html)

SteR9
17-03-2004, 15:54
grazie a entrambi...ma ora mi chiedo una cosa...con una JList è possibile caricare i dati da un file di testo?
grazie

cn73
17-03-2004, 15:57
In teoria gli oggetti conenuti nelle celle della jList sono degli Object...perciò ci puoi mettere qualunque cose... Nel tuo caso andranno messe delle Stringhe lette sequenzialmente dal File..

Poi le scelte implementative sono molte, sai come leggere i dati da un file testo? Sai come caricare una Lista? Devi caricarla all'inizio o man mano che leggi dal file?

SteR9
17-03-2004, 19:59
ok sono riuscito a leggerli dal file...ma ora ho un problema...
io uso BorderLayout quindi east west ecc...
ora dove lo devo aggiungere lo scrollPane??
se lo aggiungo al mio pannello senza dargli la posizione mi rimpicciolisce la larghezza del Jframe...
come devo fare per mettere lo scrollPane??
grazie!

anx721
17-03-2004, 20:09
Mi sembra molto strano che l'aggiunta di un JScrollPane ti rimpicciloisca il JFrame...

Comuqnue passa il componente da inserire nel JScrollPane direttamente nel costruttore del JScrollPane cioè:

JScrollPane scroll = new JScrollPane(componente)

e non

JScrollPane scroll = new JScrollPane();

scroll.add(componente).

per il resto, il posizionamento all'interno del JPanel dipende solo da dove tu lo vuoi mettere, a nord, ad est, ad ovest a sud o al centro.

SteR9
17-03-2004, 20:27
Originariamente inviato da anx721
Mi sembra molto strano che l'aggiunta di un JScrollPane ti rimpicciloisca il JFrame...

Comuqnue passa il componente da inserire nel JScrollPane direttamente nel costruttore del JScrollPane cioè:

JScrollPane scroll = new JScrollPane(componente)

e non

JScrollPane scroll = new JScrollPane();

scroll.add(componente).

per il resto, il posizionamento all'interno del JPanel dipende solo da dove tu lo vuoi mettere, a nord, ad est, ad ovest a sud o al centro.
è proprio questo il problema...allora io ho creato un frame che contiene una JTextField e un pulsante che stanno nella parte alta del JFrame...quando premo il pulsante devo andare a caricare dei dati letti da un file di testo nella JList che ho posizionato a sud e ora non so dove andare a posizionare lo scroller perchè in ogni punto ho un oggetto
:muro:
ciao :)

anx721
17-03-2004, 20:53
Ma dentro lo scroller ci devi mettere la JList?

Ad ogni modo, per poter aggiungere più di 5 componenti in un pannello con BorderLayout non aggiungere nel pannello principale direttamente i componenti (cioè i bottoni, le Jlist, ecc ecc) ma aggiungi per esempio un altro pannello al quale puoi aggiungere due o piu componenti.

se non hai capito manda uno schizzo di come vuoi posizionati i tuoi componenti e ti propongo una possibile soluzione.

SteR9
18-03-2004, 14:42
allora io ho fatto così:


cerca = new JTextField(30);
cercaLbl = new JLabel("Cerca",SwingConstants.LEFT);
cercaBt = new JButton("Cerca");
listModel = new DefaultListModel();
lista = new JList(listModel);
JScrollPane scroll = new JScrollPane(lista);
cercaBt.addActionListener(this);
mioPanel.add("West",cercaLbl);
mioPanel.add("Center",cerca);
mioPanel.add("East",cercaBt);
tutto.add(lista);
tutto.add(scroll);
mioPanel.add("South",tutto);

"mioPanel" è BorderLayout mentre "tutto" è FlowLayout però non mi aggiunge questo maledetto scroller...dove sbaglio?:muro:

cn73
18-03-2004, 14:57
Non devi aggiungere sia lista che scroll... la lista va nello scrollpane ed è solo quest'ultimo che va aggiunto...

Aggingilo in centro, è il componente più oneroso in termin di spazio...fai un pannello he contenga tutti i bottoni e aggiungilo a sud.Ricordatio di richiamare un bel pack() sul frame quando hai finito di creare la gui...

SteR9
18-03-2004, 15:18
niente non ne vuole sapere di aggiungermelo...allora io faccio così...

mioFrame = new JFrame("Cerca");
mioFrame.setUndecorated(true);
mioFrame.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);

mioPanel = new JPanel();
tutto = new JPanel();
mioPanel.setLayout(new BorderLayout(30,30));
tutto.setLayout(new BorderLayout(30,30));

cerca = new JTextField(30);
cercaLbl = new JLabel("Cerca",SwingConstants.LEFT);
cercaBt = new JButton("Cerca");
listModel = new DefaultListModel();
lista = new JList(listModel);
JScrollPane scroll = new JScrollPane(lista);
cercaBt.addActionListener(this);
mioPanel.add("West",cercaLbl);
mioPanel.add("Center",cerca);
mioPanel.add("East",cercaBt);
tutto.add("Center",lista);
mioFrame.getContentPane().add(mioPanel, BorderLayout.NORTH);
mioFrame.getContentPane().add(tutto, BorderLayout.SOUTH);
mioFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mioFrame.pack();
mioFrame.setVisible(true);

dove sbaglio?:muro:
grazie ancora :)

cn73
18-03-2004, 15:41
Devi aggiungere lo scroll non la lista! Te l'ho detto prima ;)


import javax.swing.*;
import java.awt.*;
import java.awt.event.*;


class Prova2 extends JFrame implements ActionListener{

JFrame mioFrame ;
JPanel mioPanel ;
JPanel tutto;
JTextField cerca;
JLabel cercaLbl;
JButton cercaBt ;
DefaultListModel listModel ;
JList lista ;
JScrollPane scroll;

public Prova2() {

super ("Cerca");

mioPanel = new JPanel();
tutto = new JPanel();
mioPanel.setLayout(new FlowLayout());
tutto.setLayout(new BorderLayout(30,30));

cerca = new JTextField(30);
cercaLbl = new JLabel("Cerca",SwingConstants.LEFT);
cercaBt = new JButton("Cerca");
listModel = new DefaultListModel();
lista = new JList(listModel);
scroll = new JScrollPane(lista);

cercaBt.addActionListener(this);
mioPanel.add(cercaLbl);
mioPanel.add(cerca);
mioPanel.add(cercaBt);

tutto.add(scroll, BorderLayout.CENTER);


getContentPane().add(mioPanel, BorderLayout.SOUTH);
getContentPane().add(tutto, BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
}

public void actionPerformed(ActionEvent e){
if (e.getSource() == cercaBt)
System.out.println("AZIONE CERCA!");
}

public static void main(String arg[]) {
Prova2 p = new Prova2();
}

}

SteR9
18-03-2004, 16:03
Originariamente inviato da cn73
Devi aggiungere lo scroll non la lista! Te l'ho detto prima ;)

ops avevo letto il contrario :D
ora funziona!ma ho un'altra domanda...se volessi mettere lo scroller anche in basso?e un'altra cosa come faccio a impostare le dimensioni del frame?ho provato con setSize() ma non cambiano le dimensioni...
ciao,grazie!

cn73
18-03-2004, 16:10
Lo scroller anche in basso?? cioè?

IL settaggio delle dimensioni di un frame dovrenne andare con setSize() o setPreferredSize()... cmq ti conviene dare una dimensione ai componenti, ad es allo scrollPane... tutto si regolerà di conseguenza...prova a non mettere il pack() (che aggiusta le dimensioni dei componenti in maniera ottimale) dopo il setSize() ti renderai conto di cosa succede e di come correggere ;)

SteR9
18-03-2004, 16:37
Originariamente inviato da cn73
Lo scroller anche in basso?? cioè?

IL settaggio delle dimensioni di un frame dovrenne andare con setSize() o setPreferredSize()... cmq ti conviene dare una dimensione ai componenti, ad es allo scrollPane... tutto si regolerà di conseguenza...prova a non mettere il pack() (che aggiusta le dimensioni dei componenti in maniera ottimale) dopo il setSize() ti renderai conto di cosa succede e di come correggere ;)

ho messo il setSize dopo il pack e funziona...per scroller in basso intendevo quello in larghezza...però ho visto che si inserisce da solo se il testo è lungo...
ciao! :)

cn73
18-03-2004, 19:43
Fare così non è un buon metodo, perche le dimensioni dello schermo non sono fisse (800 x 600, 1024 x 768) e quella che a te sembra una ottima GUI sul tuo pc può diventare una schifezza su un altro pc :D Un buon metodo è quello di dimensionare i componenti come percentuale della dimensione dello schermo, ottenibile con Toolkit.getScreenSize() ;)

SteR9
18-03-2004, 19:51
Originariamente inviato da cn73
Fare così non è un buon metodo, perche le dimensioni dello schermo non sono fisse (800 x 600, 1024 x 768) e quella che a te sembra una ottima GUI sul tuo pc può diventare una schifezza su un altro pc :D Un buon metodo è quello di dimensionare i componenti come percentuale della dimensione dello schermo, ottenibile con Toolkit.getScreenSize() ;)
si lo so,ci avevo pensato ma tanto per il momento non mi interessa di utilizzare il programma su altri pc...ti ringrazio!:)