ActionListener in un JTabbedPane

di il
5 risposte

ActionListener in un JTabbedPane

Salve a tutti vorrei avere alcune info se è possibile

io ho questo semplice codice
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;

public class Test extends JFrame implements ActionListener
{
public Test()
{
buildGUI();
}

private void buildGUI()
{
setDefaultCloseOperation(EXIT_ON_CLOSE);
UIManager.put("TabbedPane.contentOpaque", Boolean.FALSE);
JTabbedPane mainTab = new JTabbedPane();
mainTab.setOpaque(false);
mainTab.addTab("Visualizzazione ad albero", buildTreeView());
mainTab.addTab("Visualizzazione a lista", buildListView());
getContentPane().add(mainTab, BorderLayout.CENTER);
// pack(); // Il risultato e' brutto. Metto le dimensioni preferite
setSize(1280, 720);
setLocationRelativeTo(null);

}

private JPanel buildListView()
{
String[] countries = {
"Italia",
"San Marino",
"Vaticano",
"Andorra",
"Principato di Monaco",
"Repubblica Ceca"
};
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
JList list = new JList(countries);
panel.add(new JScrollPane(list));
return panel;
}

private JPanel buildTreeView()
{
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
DefaultTreeModel treeModel = new DefaultTreeModel(buildTreeNode());
JTree tree= new JTree(treeModel);
panel.add(new JScrollPane(tree), BorderLayout.CENTER);
return panel;
}

private DefaultMutableTreeNode buildTreeNode()
{
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Europa");
DefaultMutableTreeNode rootMediterranean = new DefaultMutableTreeNode("Mediterraneo");
DefaultMutableTreeNode rootNorthern = new DefaultMutableTreeNode("Paesi nordici");
DefaultMutableTreeNode rootMittle = new DefaultMutableTreeNode("MittleEuropa");
DefaultMutableTreeNode rootEast = new DefaultMutableTreeNode("Europa dell'Est");

root.add(rootMediterranean);
root.add(rootNorthern);
root.add(rootMittle);
root.add(rootEast);

DefaultMutableTreeNode nodeItaly = new DefaultMutableTreeNode("Italia");
DefaultMutableTreeNode nodeSpain = new DefaultMutableTreeNode("Spagna");
DefaultMutableTreeNode rootPortugal = new DefaultMutableTreeNode("Europa");
rootMediterranean.add(nodeItaly);
rootMediterranean.add(nodeSpain);
rootMediterranean.add(rootPortugal);

DefaultMutableTreeNode nodeDenmark = new DefaultMutableTreeNode ("Danimarca");
DefaultMutableTreeNode nodeNorway = new DefaultMutableTreeNode ("Norvegia");
DefaultMutableTreeNode nodeSweden = new DefaultMutableTreeNode ("Svezia");
rootNorthern.add(nodeDenmark);
rootNorthern.add(nodeNorway);
rootNorthern.add(nodeSweden);

DefaultMutableTreeNode nodeFrance = new DefaultMutableTreeNode ("France");
DefaultMutableTreeNode nodeGermany = new DefaultMutableTreeNode ("Germany");
DefaultMutableTreeNode nodeSwitzerland = new DefaultMutableTreeNode ("Switzerland");

rootMittle.add(nodeFrance);
rootMittle.add(nodeGermany);
rootMittle.add(nodeSwitzerland);

DefaultMutableTreeNode nodePoland = new DefaultMutableTreeNode ("Polonia");
DefaultMutableTreeNode nodeEstonia = new DefaultMutableTreeNode ("Estonia");
DefaultMutableTreeNode nodeLettonia = new DefaultMutableTreeNode ("Latvia");
rootEast.add(nodePoland);
rootEast.add(nodeEstonia);
rootEast.add(nodeLettonia);
return root;
}

/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
SwingUtilities.invokeLater(() -> {
new Test().setVisible(true);
});
}

@Override
public void actionPerformed(ActionEvent ae) {



}

}

c'è un modo per aggiungere un actionevent ad ogni elemento che compone il JTabbedPane?

Grazie per l'attenzione

5 Risposte

  • Re: ActionListener in un JTabbedPane

    Javier ha scritto:


    c'è un modo per aggiungere un actionevent ad ogni elemento che compone il JTabbedPane?
    Non ho guardato il tuo codice. Se vuoi ricevere notifica quando viene selezionata una qualunque altra "scheda" del JTabbedPane, allora vedi addChangeListener(ChangeListener l).
    A seguito dell'evento, quale è la scheda selezionata lo sai dal getSelectedComponent() o getSelectedIndex().
  • Re: ActionListener in un JTabbedPane

    Ciao e grazie per la risposta.
    Praticamente ho due tab e ogni tab è composta da alcuni elementi.
    Io voglio gestire gli eventi non alla selezione della tab ma alla selezione degli elementi...si può fare?
  • Re: ActionListener in un JTabbedPane

    Javier ha scritto:


    ogni tab è composta da alcuni elementi.
    Io voglio gestire gli eventi non alla selezione della tab ma alla selezione degli elementi...si può fare?
    Ogni "scheda" del JTabbedPane contiene 1 java.awt.Component. Al JTabbedPane non interessa assolutamente cosa sia (es. un JPanel con 100 componenti dentro, un JScrollPane, un JLabel, ecc....).
    Quindi cosa c'è nel tab non è affare del JTabbedPane.

    Precisa cosa: "elementi" cosa? Ogni componente ha i suoi listener appositi.
    Ti è chiara la questione? Se vuoi ricevere una qualche notifica da un componente dentro la scheda del JTabbedPane ..... JTabbedPane non c'entra niente.
  • Re: ActionListener in un JTabbedPane

    Allora praticamente se avvii il programmino da come output un pannello con una tabella con due schede ogni scheda formata da nomi di nazioni.
    Io vorrei implementare che alla selezione della nazione in una scheda succede che si apre una nuova tabella con altre cose...

    Spero sia chiaro
  • Re: ActionListener in un JTabbedPane

    Up
Devi accedere o registrarti per scrivere nel forum
5 risposte