Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Pozdrzeni jpopumenu

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: Pozdrzeni jpopumenu

Autor: mKorbel

12:36:34 17.05.2011

to je taky graficky oj***, kde sa zadefinuje Ancesor (JPanel,... cela JFrame), aby pocas dlhych operacii t.j. pri velkom upratovani, ci update z zlozitom GUI sa zamedzilo a nebolo mozne najake MouseClick od uzivatela (cez tabulator a klavesnicu + Enter to este stale ide)

napriklad mas JButton a sceees aby sa zamedzilo dalsiemu/opakovanemu aktivovaniu Action, teda aby po prvom kliknuti bolo setEnabled(false) ci setVisible(false) a to je casto dost nemozne v jednom bloku Action v jednom EDT, tak sa tam do toho Rectangle ponad JButton pouzije GlasPane, samozrejme je to mozne aj inak, avsak ale tiez/zaroven pre Swing nepripustne call sleep(100), hned prvy riadok kodu po disable/unvisible, ma to ale svoje ale, nesmie byt žiaden vystup z EDT do GUI, ale to sa da otestovat, cele je to hafo riadkov kodu a pritom staci jedna jedina public class myGlasspane ...

Citovat příspěvek

 

Re: Pozdrzeni jpopumenu

Autor: marekStu

11:39:28 17.05.2011

Skvely todle velice ponohlo. Ted to funguje, jak ma. Jeste k tomu GlassPane jsem to zatim nikdy nepouzil, mel bych to radeji prekopat, co mi to prinese za vyhody?

Citovat příspěvek

 

Re: Pozdrzeni jpopumenu

Autor: mKorbel

10:44:33 17.05.2011

ahaaa, skusme tuto cestu, je najpohodlnejsie, najmenej kodu, ziadne deklaracie, nic iba nacpane do jednej Class, ked to bude fungovat rozbi si to do separete Class (nema vyznam)

takze naj.., je to udrzat v konkretnej Class ako privatne Objekty, kde je definovana JTree, dovody nemusis sa hrat s konstruktor, vytvorit dalsie dve Class na Listener a JTree + JPopupMenu

[code]
private void createPopupMenu() {
JPopupMenu popup = new JPopupMenu();
popMenuItem = new JMenuItem("blablabla");
popMenuItem.addActionListener((new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
myTree.removeMouseListener(popupListener);
// nejaky kod
myTree.addMouseListener(popupListener);
}
}));
popup.addSeparator();
.
.
.
.
MouseListener popupListener = new PopupListener(popup);
myTree.addMouseListener(popupListener);
[/code]

a aby boli dosazitelne bez potreby delegovat premenne zvonka, vlozit Class
[code]
private class PopupListener extends MouseAdapter {

private JPopupMenu popup;

PopupListener(JPopupMenu popupMenu) {
popup = popupMenu;
}

@Override
public void mousePressed(MouseEvent e) {
maybeShowPopup(e);
}

@Override
public void mouseReleased(MouseEvent e) {
// tu si mozes zmenit vsetko k existujucej definicii popisy +JPopupMenu + JMenuItem + setVisible(true/false)
if(nejakaPodmienka) {
myItem.setVisible(true);
myItem.setVisible(true);
//atd
}
// nezabudni otestovat, ci je vobec nejak Node selected
if(selectedNode) {
maybeShowPopup(e);
}

private void maybeShowPopup(MouseEvent e) {
if (e.isPopupTrigger()) {
popup.show(e.getComponent(), e.getX(), e.getY());
} else {
//popup.setVisible(false);
}
}
}
[/code]

alebo dalsie moznost pohrat sa s GlassPane (casto pouzivane, vsetko vidis, ale zabrani mouseEvents)

Citovat příspěvek

 

Re: Pozdrzeni jpopumenu

Autor: marekStu

10:16:54 17.05.2011

Kurde mam to nejaky divoky. Radeji sem hodim zdrojaky.

Hlavni okno kde je JTree na ktereho mam mouselistener.
Pokud klikne uzivatel pravym mysi mel by vyskocit popu s nabidkou pridat snimek

[code]
public class OknoProjektu extends JPanel {
...


public void mousePressed(MouseEvent e) {
popupMenuProjekt = new PopupMenuProjekt();
if(e.getButton() == 3) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode)
projekty.getLastSelectedPathComponent();
if (node == null)
//Nothing is selected.
return;
Object nodeInfo = node.getUserObject();
if(nodeInfo instanceof Film) {
zobrazPopup = true;
IFilm film = (IFilm) nodeInfo;
film.pridejSnimek(popupMenuProjekt.getSnimek()); // ziskam si novy snimek
stromModel.removeNodeFromParent(node);
sestrojProjekt(film);
//maybeShowPopup(e);
}
}
}

public void mouseReleased(MouseEvent e) {
if(zobrazPopup) maybeShowPopup(e);
}

private void maybeShowPopup(MouseEvent e) {
if (e.isPopupTrigger()) {
popupMenuProjekt.show(e.getComponent(),e.getX(), e.getY());
}
}
[/code]

Trida PopupMenuProjekt ma zatim jeden menuiItem na pridani snimku, uzivatelovi vyskoci okno kde zatim zada jen nazev snimku

[code]
public class PopupMenuProjekt extends JPopupMenu {
private JMenuItem menuPridatSnimek;
private Snimek snimek;

public PopupMenuProjekt() {
setOpaque(true);
menuPridatSnimek = new JMenuItem("Přidat");
menuPridatSnimek.addActionListener(new MIAL());
add(menuPridatSnimek);
snimek = new Snimek(null);
}

public Snimek getSnimek() {
return snimek;
}

class MIAL implements ActionListener {

public void actionPerformed(ActionEvent e) {
snimek.setNazevSnimku(new OknoNazev().getNazev());
snimek.setBackground(Color.WHITE);
snimek.setLayout(new BoxLayout(snimek, BoxLayout.Y_AXIS));
snimek.add(snimek.getPanelIkony());
}

}
}
[/code]

Zkousim to podle vasich rad, ale porad mi se mi stane, ze nez uzivatel zada nejaky nazev, tak uz se snimek vytovri. Zrejem to budu muset nejak jinak vyresit.

Citovat příspěvek

 

Re: Pozdrzeni jpopumenu

Autor: mKorbel

21:51:58 16.05.2011

pozri si http://download.oracle.com/javase/tutorial/uiswing/components/menu.html#popup

ale mas dve moznosti

1/ ak je JPopupMenu spravne pridelene k JPanel ci co tam mas, tak ten MouseListener proste odober na zaciatku toho cohosi co tam robis a to v uplne v prvom riadku kodu a naopak v poslednom riadku kodu to tam opatovne zalistujes

2/
public void mouseReleased(MouseEvent e) {
if(nejakaBooleanJeTrue)
maybeShowPopup(e);
}
}

ta prva cesta je spravna, druha funguje

Citovat příspěvek

 

Pozdrzeni jpopumenu

Autor: marekStu

18:01:12 16.05.2011

Zdravicko trosku bojuji s jpopumenu. Mam kod
[code]
...
popupMenuProjekt.show((JComponent)e.getSource(), e.getX(), e.getY());
film.pridejSnimek(popupMenuProjekt.getSnimek());
[/code]

popupMenuProjekt je odden od Jpop.. ma menuitem vytvor snimek, ktery nabidne uzivateli vytvoreni snimku. Metodou getSnimek() pak novej snimek vracim. Bohuzel co se stane zavolanim popupMenuProjekt.show vyskoci menu item pohoda uzivatel zada parametry atd. jenze metoda [b]film.pridejSnimek(popupMenuProjekt.getSnimek());[/b]
se provede take. Bych potreboval nejak "pozdrzet" nez skoncim s upravou v te tridy popumenu. Doufam ze mi rozumite :) ?

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: