[ RMAN @ 20.11.2010. 15:30 ] @
Sa leve strane ekrana imam treeView nekih fajlova. A sa desne strane tabove. Odnosno svaki put kada neko klikne na fajl treba da se otvori novi tab sa podacima iz tog fajla.
Treba mi pomoc kako da namestim MouseListener da ovo radi.
[ RMAN @ 20.11.2010. 16:29 ] @
Evo uspeo sam nekako :) Recite mi samo da li je ovo ok:

Code:

tree.addMouseListener(new MouseAdapter(){
            public void mouseClicked(MouseEvent e)
            {
                int x = (int) e.getPoint().getX();
                int y = (int) e.getPoint().getY();
                TreePath path = tree.getPathForLocation(x, y);
                if (path != null)
                {
                    Object o=path.getLastPathComponent();
                    if(o instanceof Diagram)
                    {
                        Diagram d=(Diagram)o;
                        System.out.println(d.getName());
                    }
                }

            }
        });
[ MMX @ 20.11.2010. 21:16 ] @
Jeste, logika je skroz ok. Moraćeš još malo da doradiš mouseClicked() metodu da radi ono što si zamislio, ali početak ti je dobar.
[ RMAN @ 20.11.2010. 22:58 ] @
Evo malo sam je doradio :)

Code:
tree.addMouseListener(new MouseAdapter(){
            public void mouseClicked(MouseEvent e)
            {
                int x = (int) e.getPoint().getX();
                int y = (int) e.getPoint().getY();
                TreePath path = tree.getPathForLocation(x, y);
                if (e.getClickCount()==2 && path != null)
                {
                    Object object=path.getLastPathComponent();
                    if(object instanceof Diagram)
                    {
                        Diagram d=(Diagram)object;
                        
                        if(jtp.getTabCount()>0)
                        {
                            for(int i=0;i<jtp.getTabCount();i++)
                            {
                                String tempTab=jtp.getTitleAt(i);
                                // ako udje u ovaj if znaci da je fajl vec otvoren u nekom tabu onda samo fokus
                                if(tempTab.equals(d.getName()))
                                {
                                    jtp.setSelectedIndex(i);
                                    break;
                                }
                                
                                // ako udje u ovaj if znaci da nema otvorenog taba sa datim imenom
                                if(i==jtp.getTabCount()-1)
                                {
                                    JPanel jplInnerPanel = createInnerTabPanel("Dijagram je prazan");
                                    jtp.addTab(d.getName(), jplInnerPanel);
                                    jtp.setSelectedIndex(0);
                                }
                            }
                        }
                        else
                        {
                            JPanel jplInnerPanel = createInnerTabPanel("Dijagram je prazan");
                            jtp.addTab(d.getName(), jplInnerPanel);
                            jtp.setSelectedIndex(0);
                        }
                    }
                    
                }

            }
        });


Radi na dvoklik misa, otvara tab ako nije otvoren a ako jeste fokusira se na njega
[ iMac @ 21.11.2010. 01:16 ] @
Cao, RMAN.

Ok je sve ovo, manje-vise al evo jedan savet: pokusaj da iskoristis sve sto ti nudi JTabbedPane(nadam se da si njega koristio). Evo dajem ti primer, poredim tvoj kod sa onim sto bi mozda mogao da odradis:

Tvoj kod kaze, izmedju ostalog:

if(jtp.getTabCount()>0)
{
for(int i=0;i<jtp.getTabCount();i++)
{
String tempTab=jtp.getTitleAt(i);
// ako udje u ovaj if znaci da je fajl vec otvoren u nekom tabu onda samo fokus
if(tempTab.equals(d.getName()))
{
jtp.setSelectedIndex(i);
break;
}

// ako udje u ovaj if znaci da nema otvorenog taba sa datim imenom
if(i==jtp.getTabCount()-1)
{
JPanel jplInnerPanel = createInnerTabPanel("Dijagram je prazan");
jtp.addTab(d.getName(), jplInnerPanel);
jtp.setSelectedIndex(0);
}
}
}
else
{
JPanel jplInnerPanel = createInnerTabPanel("Dijagram je prazan");
jtp.addTab(d.getName(), jplInnerPanel);
jtp.setSelectedIndex(0);
}

Moras priznati da je ovo malo "mnogo" koda da se proveri da li postoji tab sa selektovanim imenom, ako postoji da ga selektuje, ako ne da ga napravis.
Dakle, ja bi ovo odradio na sledeci nacin


int selectedIndex = jtp.indexOfTab(d.getName());
if(selectedIndex == -1)
{
selectedIndex = addNewTab(d.getName());
}
jtp.setSelectedIndex(selectedIndex);


pri cemu imas metodu

private int addNewTab(String diagramName)
{
JPanel jplInnerPanel = createInnerTabPanel("Dijagram je prazan");
jtp.addTab(diagramName, jplInnerPanel);
return 0;
}



[ RMAN @ 21.11.2010. 09:59 ] @
U pravu si. Ma nisam imao vremena da procitam specifikaciju za JTabbedPane pa sam to nekako iz glave nabrzaka :)

Hvala ti, ispravicu kod.