sobota, 20 grudnia 2008

Własny komponent na pasku statusu w NetBeans

W jaki sposób dodać coś własnego do paska statusu aplikacji napisanej przy pomocy platformy NetBeans (czyli np do NetBeans IDE)?
W tym celu musimy stworzyć klasę implementującą interfejs StatusLineElementProvider. Interfejs ten definiuje tylko jedną metodę Component getStatusLineElement(). Metoda zwraca komponent, który ma być umieszczony na pasku statusu.
Stwórzmy więc jakiś przykładowy projekt modułu z komponentem dla paska statusu.



Aplikacja ma ustawioną polską platformę dlatego nazwy bibliotek netbeansowych są po polsku. Menu aplikacji po uruchomieniu również. Należy zwrócić uwagę na biblioteki jaki są dodane do modułu MyStatusLine.

W tym przypadku komponentem jest zwykły JPanel z JLabelem (label z jakimś tekstem i ikoną). Po przejściu do źródła klasy StatusLineElement musimy dopisać implementację interfejsu StatusLineElementProvider.


package org.myorg.status;

import java.awt.Component;
import org.openide.awt.StatusLineElementProvider;

public class StatusLineElement extends javax.swing.JPanel implements StatusLineElementProvider {

public StatusLineElement() {
initComponents();
}

public Component getStatusLineElement() {
return this;
}

...

}


Aby nasza aplikacja "dowiedziała" się o nowym komponencie musimy ją o tym poinformować tworząc w katalogu META-INF/services plik o nazwie takiej jak implementowany przez nas interfejs czyli org.openide.awt.StatusLineElementProvider. Treścią tego pliku będzie pełna nazwa klasy implementującej ten interfejs czyli org.myorg.status.StatusLineElement.

Po uruchomieniu aplikacji na pasku powinien znajdować się nasz komponent.

sobota, 13 grudnia 2008

Progress API

Progress API jest malutką ale użyteczną biblioteką wchodzącą w skład platformy NetBeans i oferującą programiście dostęp do paska postępu przydatnego przy długich zadaniach wykonywanych w tle.
To co nas będzie interesowało to ProgressHandleFactory oraz ProgressHandle.


public void startMyTask() {
Runnable runnable = new Runnable() {
public void run() {
ProgressHandle handle = ProgressHandleFactory.createHandle(
"Moje długie zadanie");
int count = 57;
handle.start(count);
for(int i = 0; i < count; i++){
      handle.progress(i);
        if(i > (count/2)){
          handle.progress("Połowa zadania już za nami");
          }
          try {
          Thread.sleep(200);
          } catch (InterruptedException ex) {
            Exceptions.printStackTrace(ex);
          }
        }
      handle.finish();
    }
};
(new Thread(runnable)).start();
}

Uruchomienie powyższej metody spowoduje pokazanie się paska postępu w prawym dolnym rogu aplikacji.



Po kliknięciu na pasek postępu możemy zobaczyć także informacje szczegółowe na temat wykonywanego zadania.



handle.start(count) uruchamia pasek postępu informując go z ilu kroków będzie się składać zadanie. handle.progress(i) informuje ile kroków już mamy za sobą, handle.progress("Połowa zadania już za nami") dodaje opis do widoku szczegółowego zadania, handle.finish() kończy i ukrywa pasek.

czwartek, 4 grudnia 2008

Styczniowe COOLuary

Właśnie zauważyłem na Developers World wpis na temat przyszłorocznej konferencji pod dość ciekawą nazwą COOLuary. Patrząc na zasady oraz agendę konferencji stwierdzam, że szykuje się coś naprawdę ciekawego. A i cena nie jest powalająca. 30 pln za udział w całodniowej konferencji z obiadem to wg mnie przystępna cena. Założyłem po cichu, że zostanę potraktowany jako "aktywny członek" ;)
Ja się zapisuję.

środa, 3 grudnia 2008

NetBeans na skróty w edytorze

Chciałbym dzisiaj przybliżyć kilka pomocnych (według mnie) skrótów klawiszowych w edytorze NetBeans.

1. Ctrl+/ dodawanie/usuwanie komentarza z linijek wchodzących w skład zaznaczonego obszaru.

2. Ctrl+E usuwanie linii kodu wchodzących w skład zaznaczonego obszaru. Bez zaznaczenia usunięcie tylko jednej linii.

3. Alt+Shift+Up/Down przesunięcie linii (lub zaznaczonego fragmentu) w górę/dół.

4. Ctrl+Shift+Up/Down skopiowanie linii (lub zaznaczonego fragmentu) powyżej/poniżej.

5. Alt+Insert Generator kodu.



6. Ctrl+R Zmiana nazwy.

7. Ctrl+F3 Szukanie wystąpień słowa.
7a. F3/Shift+F3 Następne/poprzednie wystąpienie szukanego słowa.



8. Alt+F7 Wyszukiwanie użycia metody/zmiennej.



9. Alt+Shift+F Formatowanie kodu.

10. Ctrl+Tab Przełączanie pomiędzy otwartymi edytorami.



11. Shift+Esc Przełączenie aktualnego okna pomiędzy dużym a małym rozmiarem.

12. Ctrl+O Wyszukiwanie klasy do edycji.



13. Ctrl+Q Powrót do ostatnio edytowanego miejsca.

14. Ctrl+Shift+I Dodanie brakujących importów.
14a. Alt+Enter Rozwinięcie menu dla podpowiedzi np dla "żaróweczki".



15. Ctrl+I Wyszukiwanie. Z pola wyszukiwanie mamy możliwość uruchomienia różnych akcji.



16. Ctrl+; Dodanie ";" na końcu linii. Szkoda tylko, że nie sprawdza czy linia jest już zakończona ";".
16a. Ctrl+Shift+; Dodanie ";" na końcu linii, wstawienie nowej linii i przejście na jej początek.

17. Nie jest skrótem klawiszowym. Stanięcie na deklaracji typu zwracanego przez metodę podświetla nam wszystkie możliwie punkty wyjścia z tej metody.



A według Ciebie jakie skróty powinny się jeszcze znaleźć w tym krótkim zestawieniu?

sobota, 29 listopada 2008

Polska platforma NetBeans jeszcze raz czyli problemy z lokalizacją

We wpisie opisałem pojawienie się polskiego tłumaczenia platformy. Wszystko było pięknie tak jak to opisałem do momentu aż nie spróbowałem zrobić wersji dystrybucyjnej aplikacji zbudowanej na polskiej platformie (Build ZIP Distribution). Po rozpakowaniu zipa i uruchomieniu aplikacji okazało się, że polskie menu gdzieś zniknęło. Jak się okazało jest za to odpowiedzialny błąd znany już we wcześniejszej wersji NetBeans'a. Błąd ten dotyczy wszystkich tłumaczeń platformy.
Pozostały mi więc dwie możliwości: albo przy każdym budowaniu aplikacji kopiować pliki z potrzebnymi tłumaczeniami albo napisać zadanie anta które uzupełni zipa za mnie. Wybrałem opcję drugą i okazało się, że zadanie to nie jest tak trudne jak mi się na początku wydawało. W tym celu do pliku build.xml odpowiedzialnego za zadania anta związane z naszym projektem dodałem zadanie "build-localized-zip". Zadanie to dodaje do pliku archiwum (stworzonego w zadaniu build-zip - opis tego zadania znajduje się w pliku harness/suite.xml w katalogu platformy, na której budujemy aplikację) pliki z polskimi tłumaczeniami. Minusem tego rozwiązania jest to, że zostaną dodane wszystkie "polskie" pliki a nie tylko z tych modułów, które wykorzystujemy. Biorąc pod uwagę, że na dzień dzisiejszy przetłumaczona jest tylko część modułów platformy nie powinno to stanowić problemu.


<project name="TestPlatform" basedir="."><br />
    <description>Builds the module suite TestPlatform.</description>
<import file="nbproject/build-impl.xml"/>
<target name="build-localized-zip" depends="clean,build-zip"
description="Zbudowanie polskiej dystrybucji">
        <zip destfile="${dist.dir}/${app.name}.zip" update="true">
            <zipfileset dir="${netbeans.dest.dir}" prefix="${app.name}">
                <include name="**/locale/*_pl.jar"/>
            </zipfileset>
        </zip>
   </target>

</project>


Teraz wystarczy uruchomić nasze nowe zadanie i nowa dystrybucja naszej aplikacji będzie już "uzbrojona" w polskie menu.



czwartek, 20 listopada 2008

Silesia JUG 19.11.2008 - materiały z prelekcji

No i po prelekcji. Marek Goldmann oraz Krzysztof Adamczyk napisali kilka słów na temat tego spotkania.
Jeśli ktoś jest zainteresowany to udostępniam slajdy. Przykładowy projekt postaram się udostępnić w najbliższym czasie tylko muszę go odpowiednio przygotować.
Pozwoliłem sobie również udostępnić slajdy Łukasza Lipki wprowadzające i kończące 2. spotkanie śląskiej grupy użytkowników Javy.
Do zobaczenia więc na następnym spotkaniu, które ma się odbyć w przyszłym tygodniu we wtorek tj. 25.11.2005 o 18:30 w budynku COIGu w Katowicach. Tematem będzie ESB Mule a zaprezentuje go Łukasz.

środa, 19 listopada 2008

NetBeans w samo południe

Wg oficjalnych informacji premiera wersji 6.5 NetBeans'a ma mieć miejsce jutro tj. 20 listopada. Więc mogę powiedzieć, że zdziwiłem się trochę po wejściu na stronę Download IDE gdy zobaczyłem, że na stronie tej aktualną wersją do ściągnięcia jest właśnie 6.5. I to pomimo tego, że na stronie głównej aktualną wersją jest jeszcze 6.1. Stan ten zaobserwowałem w samo południe.
Więc ściągam czym prędzej żeby na dzisiejszej prezentacji pokazać już oficjalną wersję 6.5.

poniedziałek, 17 listopada 2008

Silesia Java User Group - NetBeans Platform

W najbliższą środę tj. 19.11.2008 będę miał zaszczyt poprowadzić drugie już spotkanie śląskiego JUGu. Tematem będzie oczywiście platforma NetBeans. Będę chciał przedstawić główne zalety używanie platformy tworząc podczas prelekcji od podstaw prostą aplikację.
Może uda się też powiedzieć coś o nowościach w wersji 6.5 NetBeansa, która na dniach ma ujrzeć światło dzienne.
Dla uczestników są przewidziane nagrody. Oprócz licencji IntelliJ IDEA będą jeszcze nagrody niespodzianki ;) Więc jeśli nie dla prowadzącego i dla tematu to dla nagrody na pewno warto się pojawić w Katowicach na ul. Mikołowskiej 100 w budynku COIGu o godzinie 18:30.

poniedziałek, 10 listopada 2008

NetBeans Release Candidate 2 a sprawa polska

Kilka ,a może kilkanaście dni temu (build jest z 2008.10.27) pojawiła się kolejna wersja NetBeans'a kandydująca do końcowego wydania czyli RC2. Jak zapewne Wam wiadomo, wersja 6.5 będzie dostępna także w polskiej wersji językowej. Wszystko to dzięki polskiemu zespołowi tłumaczącemu.
Chcąc zobaczyć jak to wygląda ściągnąłem polską wersję instalacyjną.
Pierwsze wrażenia:

  • niby polska wersja językowa ale cała instalacja przebiega po angielsku.
  • polska wersja NB nadpisała mi linki (na pulpicie i menu Start) do wcześniej zainstalowanej wersji angielskiej (pomimo, że wybrałem dla polskiej wersji inny katalog)
  • na dzień dzisiejszy procent spolszczenia pozostawia jeszcze dużo do życzenia (wiem, wiem... łatwiej narzekać zamiast pomóc w tłumaczeniu;) )




Ale ponoć platforma jest w całości przetłumaczona. Więc czym prędzej założyłem nowy projekt NetBeans Platform Applications. Muszę przyznać, że po uruchomieniu projektu poczułem się mile zaskoczony.



Dopóki IDE nie będzie kompleksowo przetłumaczone postanowiłem wrócić do oryginalnego NetBeans'a a dla przykładowego projektu ustawić, że ma korzystać z nowo zainstalowanej polskiej wersji platformy. W tym celu w menu Tools -> NetBeans Platforms dodałem (Add Platform) jako kolejną platformę polską i we właściwościach projektu wskazałem, że ma z niej korzystać podczas uruchamiania.



Dzięki temu mogę pracować w środowisku które ma wszystkie opcje w jednym języku (w angielskim) a jednocześnie korzystam z wyników pracy polskiej grupy tłumaczeniowej.

Więc nie pozostaje mi nic innego jak podziękować im za ich pracę.

PS. Jeśli chcecie korzystać z polskiej platformy i oryginalnego IDE to lepiej ściągnąć NetBeans'a w spakowanej wersji zip. Zaoszczędzi to nam poprawiania linków po instalacji polskiej wersji.

piątek, 17 października 2008

Java Developers Day 2008 za nami

Konferencję Java Developers Day 2008 uważam za bardzo udaną. Może poza jednym wykładem sponsora ;) (kto był zapewne wie, który mam na myśli).
Sam brałem udział oprócz ogólnych spotkań w sesji 1. czyli Mockito (Szczepan Faber), Envers (Adam Warski) oraz CEP czyli Complex Event Processing w wykonaniu Waldka Kota.
Nie mogę nie wspomnieć o ostatnim wykładzie w wykonaniu Jacka Laskowskiego, który na koniec rozruszał całą salę pokazując przykłady użycia OSGi. Jak to bywa na prelekcjach przykłady dzielą się na te działające i nie ;)
Fajną sprawą było też Java Underground prowadzone przez Grzegorza Dudę. Minusem było pomieszczenie w piwnicy. Trochę za duszno było przy tylu zainteresowanych.
Zainteresował mnie temat wersjonowania encji więc w najbliższym czasie
postaram się więcej przyglądnąć temu tematowi.

wtorek, 15 lipca 2008

Nauka JEE - projekt LinuxAdvices

Niedawno, w ramach PJUGu, został powołany do życia projekt mający na celu naukę Javy (w szczególności J2EE).
Więcej informacji na temat projektu na blogu Darka, na stronie projektu oraz na grupie dyskusyjnej.

niedziela, 29 czerwca 2008

NetBeans + Ecplise = ...

W sobotę (28.08.2008) miałem okazję uczestniczyć w Ecplise DemoCamps w Krakowie. Spotkanie zaliczam do udanych. W drodze powrotnej przypomniał mi się niedawny wpis na blogu Geertjan Wielengi opisujący jak uruchomić aplikację napisaną z wykorzystaniem NetBeans Platform z Eclipsa.
Jako, że ostatnio miałem trochę do czynienia z bardzo fajną biblioteką Visual Library, która wchodzi w skład platformy NetBeans, pomyślałem, że może by spróbować napisać prosty programik w Eclipsie wykorzystujący tą bibliotekę.
Ściągnąłem Visual Library, odpaliłem Eclipsa i zabrałem się do pracy. Okazało się, że tej pracy nie było dużo (wręcz prawie w ogóle).
Po pierwsze stworzyłem panel, na którym miał wylądować edytor graficzny.


package pl.marekklis.graph;

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

import org.netbeans.api.visual.graph.GraphScene;

public class GraphTest extends JPanel{

public static void main(String[] args) {
JFrame frame = new JFrame("Graph test");
frame.setMinimumSize(new Dimension(400,300));
frame.setSize(400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new GraphTest());
frame.pack();
frame.setVisible(true);
}

public GraphTest() {
initComponents();
}

private void initComponents(){
setLayout(new BorderLayout());
JScrollPane scrollPane = new JScrollPane();
add(scrollPane,BorderLayout.CENTER);
GraphScene scene = new GraphSceneImpl();
scrollPane.setViewportView(scene.createView());
add(scene.createSatelliteView(),BorderLayout.WEST);
}

}


Po drugie stworzyłem implementacje GraphScene.


package pl.marekklis.graph;

import java.awt.Point;

import org.netbeans.api.visual.action.ActionFactory;
import org.netbeans.api.visual.action.ConnectProvider;
import org.netbeans.api.visual.action.ConnectorState;
import org.netbeans.api.visual.anchor.AnchorFactory;
import org.netbeans.api.visual.anchor.AnchorShape;
import org.netbeans.api.visual.graph.GraphScene;
import org.netbeans.api.visual.widget.ConnectionWidget;
import org.netbeans.api.visual.widget.LayerWidget;
import org.netbeans.api.visual.widget.Scene;
import org.netbeans.api.visual.widget.Widget;
import org.netbeans.api.visual.widget.general.IconNodeWidget;
import org.openide.util.Utilities;

public class GraphSceneImpl extends GraphScene {

private LayerWidget mainLayer;
private LayerWidget connectionLayer;
private LayerWidget interactionLayer;

public GraphSceneImpl() {
mainLayer = new LayerWidget(this);
connectionLayer = new LayerWidget(this);
interactionLayer = new LayerWidget(this);
addChild(mainLayer);
addChild(connectionLayer);
addChild(interactionLayer);
Widget w1 = addNode("1. węzeł");
w1.setPreferredLocation(new Point(10, 100));
Widget w2 = addNode("2. węzeł");
w2.setPreferredLocation(new Point(100, 250));
Widget w3 = addNode("Jakiś kolejny węzeł");
w3.setPreferredLocation(new Point(250, 250));
Widget w4 = addNode("Jakiś kolejny węzeł");
w4.setPreferredLocation(new Point(250, 350));
getActions().addAction(ActionFactory.createZoomAction());
}

@Override
protected Widget attachNodeWidget(String arg0) {
IconNodeWidget widget = new IconNodeWidget(this);
if (arg0.startsWith("1")) {
widget.setImage(Utilities.loadImage("pl/marekklis/graph/
resources/gr01.png"));
} else if (arg0.startsWith("2")) {
widget.setImage(Utilities.loadImage("pl/marekklis/graph/
resources/gr02.png"));
} else {
widget.setImage(Utilities.loadImage("pl/marekklis/graph/
resources/gr03.png"));
}
widget.getActions().addAction(
ActionFactory.createExtendedConnectAction(
connectionLayer,new MyConnectProvider()));
widget.getActions().addAction(
ActionFactory.createAlignWithMoveAction(
mainLayer, interactionLayer,
ActionFactory.createDefaultAlignWithMoveDecorator()));
widget.setLabel(arg0);
mainLayer.addChild(widget);
return widget;
}

@Override
protected Widget attachEdgeWidget(String arg0) {
return null;
}

@Override
protected void attachEdgeSourceAnchor(
String arg0, String arg1, String arg2) {
}

@Override
protected void attachEdgeTargetAnchor(
String arg0, String arg1, String arg2) {
}

private class MyConnectProvider implements ConnectProvider {

public boolean isSourceWidget(Widget source) {
return source instanceof IconNodeWidget && source != null
? true : false;
}

public ConnectorState isTargetWidget(Widget src, Widget trg) {
return src != trg && trg instanceof IconNodeWidget ?
ConnectorState.ACCEPT : ConnectorState.REJECT;
}

public boolean hasCustomTargetWidgetResolver(Scene arg0) {
return false;
}

public Widget resolveTargetWidget(Scene arg0, Point arg1) {
return null;
}

public void createConnection(Widget source, Widget target) {
ConnectionWidget conn = new ConnectionWidget(
GraphSceneImpl.this);
conn.setTargetAnchorShape(AnchorShape.TRIANGLE_FILLED);
conn.setTargetAnchor(AnchorFactory.
createRectangularAnchor(target));
conn.setSourceAnchor(AnchorFactory.
createRectangularAnchor(source));
connectionLayer.addChild(conn);
}
}
}


I oto efekt:


W naszym okienku mamy działający przykład wykorzystujący Visual Library.

PS. Biblioteki Visual Library nie musimy ściągać gdyż jest ona częścią Netbeansa i znajduje się w katalog_Netbeansa/platform8/modules/.

poniedziałek, 19 maja 2008

Mechanizm aktualizacji w NetBeans Platform

Przyjrzyjmy się dzisiaj w jaki sposób możemy wykorzystać Auto Update Service do rozprowadzania aktualizacji modułów w aplikacji opartej o platformę NetBeans.
W tym celu załóżmy nowy projekt typu NetBeans Platform Application



oraz projekt modułu o nazwie np UpdateModule



Po założeniu modułu okno projektów wygląda u mnie następująco:



Dodajmy do naszego modułu jakiś element, który zmieniając będzie wymagał utworzenie nowej wersji. Niech będzie to okno na którym umieścimy komponent tekstowy, którego tekst będzie się zmieniał w zależności od wersji.





Następnym krokiem jest dodanie do naszego modułu pliku typu Update Center.





W tym przykładzie jako serwer przechowujący uaktualnienia wybrałem localhost. Dokładny adres serwera z aktualizacjami (a konkretnie do pliku updates.xml opisującego aktualne moduły) znajduje się w pliku Bundle.properties w pakiecie, do którego dodaliśmy Update Center.
Ponieważ szablon projektu NetBeans Platform Application nie posiada zaznaczonych bibliotek Auto Update musimy to zrobić ręcznie.



Teraz możemy już opublikować naszą "aplikację" (Build ZIP Distibution). Rozpakujmy gdzieś archiwum i uruchommy aplikację. W menu Help powinna być pozycja Check for updates. Po wybraniu dostaniemy komunikat, że nasza aplikacja jest aktualna.



Zmieńmy więc tekst w oknie aplikacji (np z "1.0.0" na "1.0.1") i "wypuśćmy" aktualizację. W tym celu zmieniamy we właściwościach modułu Specification version na wyższy numer.



Budujemy moduły poprzez Create NBMs. Moduły (w naszym przypadku będzie to tylko jeden moduł) zostaną utworzone w podkatalogu projektu (build/updates). Wystarczy zawartość tego katalogu przekopiować do katalogu, który jest głównym katalogiem naszego serwera www. Ja wykorzystałem serwer Apache.



Jeśli uruchomimy ponownie aplikację (nie ze środowiska IDE ale wersję z wcześniej utworzonego archiwum ZIP) naszym oczom powinien po chwili ukazać się komunikat o dostępności aktualizacji.



Po zakończeniu procesu aktualizacji mamy już świeżą wersję aplikacji.

niedziela, 18 maja 2008

Materiały z prelekcji

Jeśli ktoś jest zainteresowany, to materiały z mojej prelekcji nt NetBeans Platform są dostępne na stronie PJUGu. Na stronie tej znajdują się również materiały z poprzednich spotkań.

niedziela, 11 maja 2008

PJUG - prelekcja nt. NetBeans Platform

W najbliższy czwartek (15 maja 2008) o godzinie 19:00 będę miał zaszczyt poprowadzić prelekcję na temat platformy NetBeans w ramach czwartkowych spotkań PJUGu.
Podczas prelekcji powstanie od podstaw prosta aplikacja, która będzie mogła działać samodzielnie bądź jako rozszerzenie NetBeans IDE.
Jeśli czas i słuchacze pozwolą ;) to postaram się zaprezentować także bibliotekę Visual Library, która jest częścią platformy.
Istnieje możliwość wcześniejszej rejestracji na to spotkanie.

Serdecznie zapraszam.

poniedziałek, 28 kwietnia 2008

NetBeans 6.1 oficjalnie już jest

Dzisiaj ukazała się nowa, świeża wersja środowiska NetBeans oznaczona numerkiem 6.1.

Jeśli chodzi o platformę to nowością (to chyba zbyt szumne słowo) jest nowy szablon projektu NetBeans Platform Application.



Szablon ten posiada już zaznaczone najpopularniejsze moduły wykorzystywane przy tworzeniu typowej aplikacji opartej o platformę.

poniedziałek, 14 kwietnia 2008

Netbeans Platform - materiały z prelekcji

Jeśli ktoś ma ochotę to można się zapoznać z przykładowym projektem aplikacji zbudowanej na platformie NetBeans, który przedstawiałem w ramach NetBeans Day w Krakowie i Wrocławiu. Dostępna jest także prezentacja.
Przykładowy program został troszkę zmieniony - zdjęcia prelegentów zostały zamienione gdyż używałem ich bez zgody prowadzących.

niedziela, 13 kwietnia 2008

NetBeans RoadShow to już historia

Dzisiaj zakończyła się polska edycja NetBeans World Tour 2007-2008. Czy impreza była udana? Wg mnie tak. Choćby dlatego, że zdobyłem szlify jako prelegent ;) A czy mój wykład na temat platformy NetBeans można zaliczyć do udanych to już nie mnie oceniać. Sądząc po ilości ziewających to jeszcze dużo przede mną do nauki - ale jak to powiedział Jacek Laskowski "ziewający słuchacze to wina poprzednich prelegentów, którzy ich wynudzili" ;)
Chciałbym jeszcze zauważyć, że niedawno ukazała sie kolejna odsłona NetBeans - 6.1 Release Candidate. Moja prelekcja we Wrocławiu zawierała już przykład stworzony właśnie na tym wydaniu. Z ciekawostek jakie zauważyłem to choćby nowy szablon projektu aplikacji opartej na platformie.

niedziela, 30 marca 2008

NetBeans RoadShow



W dniach 11-13 kwietnia 2008 w Krakowie, Warszawie oraz Wrocławiu odbędzie się NetBeans RoadShow, ogólnopolskie tournee będące częścią NetBeans WorldTour 2008 promującego środowisko developerskie NetBeans.

Każdego dnia, podczas wykładów prowadzonych przez specjalistów z Sun Microsystems oraz rodzimych developerów, przedstawiane zostaną nowinki techniczne oraz możliwości tego wspaniałego narzędzia.

I ja tam będę ;). 11 kwietnia w Krakowie i 13 kwietnia we Wrocławiu będę chciał przedstawić zalety NetBeans Platform, wyjaśnić podstawowe pojęcia związane z platformą oraz zaprezentować kilka prostych przykładów aplikacji tworzonych przy jej użyciu.

Serdecznie zapraszam

sobota, 29 marca 2008

Własna zakładka w oknie opcji

Dzisiaj będzie o tym jak do okna opcji dodać własną zakładkę.



Możemy założyć nowy projekt albo skorzystać już z jakiegoś istniejącego. Ja założyłem nowy projekt OptionsModule z pakietem org.myorg.option. Dodajemy do pakietu nowy plik typu Options Panel z kategorii Module Development.



W następnym oknie kreatora wybieramy typ panelu z opcjami jako główny, podajmy nazwy oraz ikonkę.



Jako ikonkę podałem



Następnie kreator prosi nas o podanie prefiksu i pakietu dla nowo tworzonych plików.



Po zakończeniu kreatora przejdźmy do edycji pliku OptionPanel.java. Panel będzie formatką, na której użytkownik będzie mógł edytować stworzone przez nas opcje. Dodajmy więc do panelu JCheckBox, JTextField oraz JSlider. Będą to przykłady zmiennych odpowiednio typów boolean, String i int.



Przejdźmy teraz do edycji kodu OptionPanel.java. Interesować nas będą dwie metody load() i store(). Pierwsza z nich jest odpowiedzialna za odczytanie zapisanych opcji przy otwarciu panelu a druga za zapisanie opcji przy zamknięciu. Standardowo kreator w tych metodach podpowiada nam w komentarzu jak możemy zapisać czy odczytać nasze zmienne.
void load(){
  jCheckBox1.setSelected(NbPreferences.forModule(OptionPanel.class).
   getBoolean("jCheckBox1", false));
  jTextField1.setText(NbPreferences.forModule(OptionPanel.class).
   get("jTextField1", "tekst"));
  jSlider1.setValue(NbPreferences.forModule(OptionPanel.class).
   getInt("jSlider1", 50));
}
void store() {
  NbPreferences.forModule(OptionPanel.class).
   putBoolean("jCheckBox1", jCheckBox1.isSelected());
  NbPreferences.forModule(OptionPanel.class).
   put("jTextField1", jTextField1.getText());
  NbPreferences.forModule(OptionPanel.class).
   putInt("jSlider1", jSlider1.getValue());
}


Do zapamiętywania wartości użyłem klasy NbPreferences. Klasa ta tworzy plik o rozszerzeniu properties dla każdego modułu, dla którego zostanie wywołana. W naszym przypadku będzie to plik option.properies w katalogu config\Preferences\org\myorg w katalogu roboczym dla aplikacji. Przykładowo dla NetBeans IDE jest to $HOME\.netbeans\6.1beta. Metody put, putBoolean, putInt zapisują odpowiednio wartość typu String, boolean, int. Pierwszy argument to klucz a drugi to wartość dla tego klucza. Jak łatwo się domyśleć metody get, getBoolean i getInt służą do odczytywania wartości. Pierwszy argument to klucz a drugi to wartość na wypadek gdyby klucz nie został znaleziony lub wartość jest innego typu. Uruchommy więc nasz przykład (Install\Reload in Target Platform). Wybieramy z menu Tools -> Options.



Po ustawieniu jakiś wartości w polach i zamknięciu (za pomocą przycisku OK) i ponownym otwarciu wartości w polach powinny być ustawione tak jak w momencie zamykania okna. Jeśli teraz gdziekolwiek w naszym programie chcemy skorzystać z jakiejś opcji wystarczy pobrać ją w ten sam sposób jak to było wyżej pokazane w metodzie load().

piątek, 28 marca 2008

Nowy typ plików w Netbeans

Opiszę dzisiaj w jaki sposób dodać obsługę własnego typu plików. Załóżmy ze mamy jakiś plik z rozszerzeniem *.mtyp i chcemy aby pliki tego typu były w jakiś sposób wyróżnione.
Stwórzmy w tym celu nowy moduł o nazwie MyTypeModule:



W nowym module wybieramy z kreatora nowy plik typu File Type.



W następnym oknie kreatora podajemy nowy typ MIME i rozszerzenia dla naszego pliku.



W następnym oknie podajemy prefiks dla plików tworzonych przez kreatora dla obsługi naszego pliku oraz ikonę jaką będą miały pliki *.mtyp.



Jako ikonkę podałem ten oto plik .

Po zakończeniu kreatora otrzymujemy kilka nowych plików. W zasadzie po tych kilku kliknięciach myszką mamy już gotowy moduł wyróżniający pliki z rozszerzeniem mtyp.
Plik MyTypeTemplate.mtyp jest szablonem dla nowo tworzonych plików, w nim możemy wpisać co mają zawierać nowo tworzone pliki. W pliku Bundles.properties w pakiecie, w którym znajdują się pliki MyType* możemy zmienić linijkę Templates/Other/MyTypeTemplate.mtyp=Nowy plik mojego typu (mtyp) co spowoduje wyświetlanie nowej nazwy w kreatorze dodawania nowego pliku. Jeśli wszystkie zmiany już gotowe pora wypróbować nasz moduł. Możemy go zainstalować np. w środowisku IDE lub stworzyć plik modułu nbm i zainstalować.



Po wybraniu Install/Reload in Target Platform uruchomi się nam Netbeans jeszcze raz. W nowo uruchomionym środowisku utwórzmy jakiś projekt (np. JavaApplication1) a następnie spróbujmy dodać do niego nowy plik.



Jak widzimy w kategorii Other pojawiła się nowa pozycja. Po wybraniu nazwy w drzewku projektu pojawił się nowo utworzonym plik z treścią, która zdefiniowaliśmy w pliku Bundles.properties.



W najbliższym czasie spróbuje opisać jak do edytora plików mtyp dodać własne kolorowanie składni oraz podpowiedzi.r