Hlavní menu

Nástroje

Guica / PridaniDalsihoTabu

View (print) - Edit page | Recent changes - Page history

Updated 15 February 2011, 15:17 by PremekBrada

Přidání další záložky se službou

Pozn. Tento návod předpokládá, že na novou záložku bude umístěn strom, který bude zobrazovat data, která jsou získávány ze služby (IOSGIService?).

  1. Vytvoření služby. Je zapotřebí vytvořit bundle, který bude poskytovat službu implementují rozhraní IOSGIService?. Příkladem, jak může být tento bundle implementován, mohou být bundly kiv.guica.bundleStateProvider, kiv.guica.serviceStateProvider, kiv.guica.packageStateProvider.
  2. Pokud máme službu, můžeme přistoupit k úpravě samotného GUI. Začneme v souboru gui.java.
  3. Aby náš tab se stromem mohl existovat je zapotřebí zde vytvořit pár instancí:
  4. Dalším krokem je úprava metody contentPaneInit ve stejném souboru. To znamená přidat instance potřebné pro fungování nového stromu. (kód bude velmi podobný tomu, který je tam již 3x pro stávající stromy a záložky)
    • rootNodeExample = new DefaultMutableTreeNode?(); // vytvoření kořenu
    • treeModelExample = new DefaultTreeModel?(rootNodeBundle); //model stromu se kořenem
    • treeExample = new JTree?(treeModelBundle); // vytvoření stromu s daným modelem
    • treeExample.getSelectionModel().setSelectionMode(TreeSelectionModel?.SINGLE_TREE_SELECTION); // ve stromu bude možné vybrat jen jednu položku
    • treeVieExample = new JScrollPane?(treeBundle); // umístění stromu na Pane
  5. Aby se nám zobrazovali tooltipy je nutné následují řádek:
    ToolTipManager?.sharedInstance().registerComponent(treeExample);
  6. Následuje přidání na záložku:\\ upTabbedPane.add("Example", treeViewExample);
  7. Pro pozdější použití přidáme getr pro náš strom: \\ public JTree? getTreeExample(){ return treeExample;}
  8. Pro správné chování je zapotřebí přidat některé věci do souboru GuiFunction?.java. Tato třída obsahuje vlastní funkčnost celého GUI. Má na starosti úpravy stromů apod.
  9. Je třeba přidat instance objektů, které mají na starosti udržování informací o konkrétním stromě. Například které nody byli rozbaleny jaké mají číslo a který Node získaný službou odpovídá nodu ve stromě.
    • private boolean exampleStateServiceAvailable = false; // ukazuje jestli je služba k dispozici
    • private IOSGIState? exampleState; // služba, pomocí které získáváme strom
    • public Set<Integer> exampleExpandedNodes; // seznam nodů, které byly rozbaleny
    • private HashMap?<Integer, Node> exampleNodes; // mapa nodů a jejich čísla (nody ve stromu mají nastaveny jako svá data Integer ve významu id)
    • private HashMap?<Integer, DefaultMutableTreeNode?> exampleTreeNodes;
    • private HashMap?<Integer, String> exampleLeafes; // listy stromů a jejich texty, použito v rendereru
    • private BundleStateTreeCellRenderer? exampleStateRenderer; // renderer si buď můžeme implementovat sami nebo využít DefaultCellRenderer?
    • private IFilter? bundleStateFilter; // není nutné pokud nechceme náš strom filtrovat
  10. Následně tyto proměnné nainicializovat v konstruktoru stejným způsobem ostatní služby.
  11. Přidání do metody Insert(). Metoda insert je volána pokaždé, když se ve frameworku něco změní. Tato metoda zajišťuje změnu stromu (ve skutečnosti vytvoří strom vlastně úplně nový a pomocí proměnných jako je exampleExpandedNodes a map zobrazuje stejný strom).
    Zase si pomůže kopírování kódu, který už zde je jen zde budeme používat naše názvy proměnných (např. if(exampleStateServiceAvailable)...)
  12. Aby se nám strom správně zobrazoval je potřeba upravit jestě metody activateRenderers() a addListeners().
    • activateRenderers()
      • Opět budeme kopírovat, zde se nastavuje jakým rendererem se bude strom vykreslovat.
    • addListeners()
      • Zajímavější je tato metoda. Zde nastavujeme listenery, které budou ovlivňovat chování našeho stromu.
    1. Abychom tyto listenery mohli nastavit je zapotřebí je nejdříve vytvořit. Všechny tyto listenery jsou umístěny v souboru GuiActions?.java. Jsou tří listenery, které bychom měli nastavit:
  13. Na závěr můžeme ještě upravit několik drobností:
    1. Metodu ChooseTreeAccordingToTabbedPane?() - (nutné) výběr správného stromu pokud je vybrána určitá záložka
    2. Třídu v GuiActions? TabbedChangeListener? - reakce na změnu aktivní záložky

Implementace IFilter?

Abychom mohli správně filtrovat náš strom je třeba implementovat IFilter?, což je velmi snadné. Rozhraní má jedinou metodu, která dostavá jako argument strom reprezentovaný instanci Node (kiv.gui.support). A vrací také strom. Stávající filtry nedělají nic jiného než úpravu dětí předaného kořene.

Vlastní renderer

Strom může být vykreslován s vlastními ikonkami, mohou zde být nastaveny tooltipy apod. To vše nabízí vlastní renderer. Jako inspiraci jako může být takový renderer napsaný může poskytnout například BundleStateTreeCellRenderer?.