Why NetBeans?

Today it is time to summarize my experience with NetBeans. I am a user since version 3 (was it 3.4?) and my personal requirements increase not so dramatically like the features does in NetBeans. And so I am still a happy user.

I am not a jee developer so I can’t cover topics like JSF support, ruby or other ‘non-desktop’ features of NetBeans. For all features of the latest version please read this document.

The next points will be

My favorite features in NetBeans 6.1

  1. NetBeans is free, open source, platform independent and stable.
    There are several IDEs on the market, but Eclipse and NetBeans are open source and so they have the best price 😉
    In comparison to Eclipse NetBeans was and is ‘really’ platform independent. That means you can use the same files for windows and Linux. But that’s not all: all platforms has the same support (unlike Eclipse e.g. for Mac OS).
    The latter point (‘stable’) is not true for the early milestones. My experiences with them were really bad, but e.g. the latest version 6.1 with all updates is very mature. I use it every day without a crash so far (although memory consumption is higher compared to previous versions)
  2. NetBeans is easy.
    NetBeans is easy to install and to use. There are several download-bundles so that you don’t need to go into the plugin hell, like in other IDEs. Simply download e.g. the Java-bundle and get the rest later through the plugin manager (Tools->Plugins). The NetBeans folks offer even a version for php development, where you can debug the code! (I tried it and it works under my suse linux, but the installation procedure was ugly…)
    All common actions have a keyboard shortcut or you can create one easily. Even for your ant tasks: Just click on the node which is on the left of the build.xml file (in the files window) and right click on a task. Then ‘create shortcut’. That’s it.
    NetBeans is easy for common tasks like

    • Editing
      I think the most important feature of all IDEs is code completion. In NetBeans you can do this via CTRL+SPACE. This will complete a variable, class or method name for you. One great example is to place the cursor after
      new JFrame().addKeyListener(new Key
      and select KeyListener. This will implement the listener automatically for you.
      With NetBeans 6.0 they introduced some code quality hints: if a variable is unused, if a method should be annotated, … To perform the actions associated with the hints (a yellow bulb on the left side) just click ALT+ENTER.
      Other editing-features are: formatting xml or Java sources via ALT+SHIFT+F, fix/organize imports via CTRL+SHIFT+I, create setters and getters via ALT+INSERT, SHIFT+F10 for context menu, maximizing the editor with SHIFT+ESC, jumping to another source code (CTRL+click a method or another object; CTRL+PageUp or Down), open any file with SHIFT+ALT+O
    • Refactoring
      rename of methods, classes via CTRL+R. Change method parameters etc.
      Try it via right click into a Java source and go to Refactor.
    • Running
      just hit F6 … and choose the main application before (right click on the project->main application)
    • Debugging
      hit CTRL+F5 to start debugging. To see the value of a variable hold the mouse over it. You can even evaluate expressions: select the expression with the mouse and hold the mouse over the selection. Or the old way: go to the Watches-Window and add the expression as ‘New Watch’. Even in this ‘add-watches’ text field you can use code completion! With this feature you can change the content of a variable easily. Warning: evaluate only expression without side effects, because otherwise the evaluation will change your variables!!
      Another feature will help those people where the application startup is expensive:
      (slightly) change the code and then go to the Run-menu->Apply Code Changes and continue with the changed code.
      Conditional breakpoints are available via right clicking on the ‘breakpoint rectangle’->breakpoint->customize. Then write any expression into the enabled line for ‘conditions’.
    • Web-start-enabling
      right click on the Java-project, then properties->Application->Web Start. The last time I used this it was a bit tricky to get it working…
    • Packaging
      just hit SHIFT+F11 or clean and build to get a jar file (which is usable via ‘java -jar’) and the other libs in the dist folder.
  3. NetBeans has a lot of plugins.
    Okay, there are a lot more plugins for Eclipse, right. Right at the moment 😉
    The NetBeans community has some really cool plugins e.g. if you didn’t download the full bundle you can add the plugins easily via: Tools->Plugins. And they will work! I never failed to install a plugin. In Eclipse this was not always true.
    You should try the following plugins:

    • With the UML plugin you can create several types of diagrams. E.g. class diagrams. For those diagrams NetBeans offers a way to create them from the Java-source-files automatically.
    • Mobility plugin. Some times ago I developed mobidic (a mobile dictionary) and this even without ever having a smart Java-enabled mobile phone (using the emulator). Then I deployed the created files to a friend with such a mobile and … it worked!
      It is even possible to debug directly on the device (not only in the emulator). Read this.
    • The sqe plugin includes such great tools like findbugs, checkstyle and pmd to enhance you code quality. Go to this page to see how to install it in NetBeans.
      FindBugs is really nice, please try it and I am sure it will lead you to (at least) one bug.
    • For my TimeFinder project I use Spring Rich Client. Then I noticed that NetBeans could help even there with the Spring Rich Client plugin.
    • The Java Application framework support is a smaller project, but well integrated in NetBeans where you can easily create a desktop application (status bar, progress monitor, actions, …) within minutes. Just create a Java project and choose ‘Java Desktop Application’.
  4. NetBeans has good JUnit support.
    Default testing environment in NetBeans was and is JUnit (supported versions are 4.1 or 3.8). You can create a template JUnit-file via right clicking on the Java file->Tools->Create JUnit Tests or CTRL+SHIFT+U. I know that you should create the test before the class, but you should create the empty methods to let NetBeans create the test for you. After that write the test and make them passing (This is the way I go). NetBeans offers a nice UI to show the errors and passed tests. Click on the errors and NetBeans will guide you to the source code.
  5. NetBeans has a Java Profiler.
    Compared to Eclipse’s profiler the NetBeans profiler is faster and easier to setup (one click! really!). E.g. for a very simple project Eclipse’s profiler (within its standard settings) took 1 minute and 4 seconds. Where NetBeans profiler was ready within 4 seconds (nearly the normal execution time). I don’t want to talk about the time it requires to setup the TPTP stuff in Eclipse. The profiler for NetBeans comes with the standard Java-bundle so really no setup procedure. (To be fair: Eclipse’s profiler will be usable after some configuration.)
    With NetBeans 6.0 they introduced a new concept of profiler points, where you can define points in the source code where the profiler should do some actions (take snapshot, clear results, …). Read this for more details.
  6. NetBeans has good maven support.
    I didn’t try other IDEs with maven. In NetBeans you have to download the maven2 plugin then you will have a lot of features:

    • You can directly open any maven project. The pom.xml will be the project descriptor. So a change there will be visible in NetBeans after one second or so. E.g. if you add a new library you will see the added library in the Library node of the project window.
    • The main goals are accessible through keyboard short cuts or via mouse clicks as every other NetBeans project (clean, build, debug, run, test, javadoc)
    • ALT+ENTER on a missing class will ask if you want to search it in a maven repository and if it was found it will automatically add it to your pom.
    • A maven repository browser: Window->’maven repository browser’.
  7. NetBeans has other cool gimmicks
    • Subversion, Cvs and mercurial support; creating or applying patches etc. I personally prefer KdeSVN in combination with NetBeans subversion support.
    • Local history is a new feature introduced in 6.0. It its very handy to redo things that I changed the last week without having access to the underlying subversion – great!
    • You can create an HTML file from a Java source file (with correct highlighting). Go to File menu and click on “Print to HTML”.
    • Your translated project is just a few clicks away: Tools->Internationalization->Internationalization Wizard
    • You want to run your project with different startup parameter? Right click the project->Set Configuration->Customize.
    • Create a license header automatically for every file. (Please ask me if you need an English translation.)
    • To compare two versioned or unversioned files: select them and right click->Tools->Diff

NetBeans is not perfect

(Of course, that’s true for almost all software products)

At the moment NetBeans 6.1 does not offer:

  • An incremental compiler like in Eclipse (this will come with 6.5! and will be called compile on save)
  • A spell checker like in Eclipse
  • TestNG. This is very easy to setup in Eclipse and the hell in NetBeans.
  • Subversion client – you have to install your own command line version first.
  • Formatting of several files. E.g. via right clicking on a package->Tools->Formatting.
  • Searching through keyboard shortcuts
  • Select only some modules for the update process
  • Collect closed documents in a ‘trash’ (like in opera)
  • The collaboration plugin (Real time editing) is far from perfect. Read this for more information. Here Eclipse rocks!!

The most annoying but strangest bug for me in NetBeans is …

Some time ago I developed an QtiPlot or Origin-like application called genvlin with the NetBeans 5.0 platform. Then I discovered a really strange bug under linux with an relative old jdk:

If the user wants to select a menu item e.g. open projects he has to go some menu item below to select this item. It was strange and annoying at the same time, because in NetBeans 5.0 IDE I didn’t see this bug.

Now someone could say: time has changed and no such bug exists in 6.1.

No, thats not true!

Today I discovered exactly the same old and annoying bug in the latest IDE 6.1 (with jdk 1.6.0_06) here I captured a screenshot:

I simulated the mouse pointer with a red dot. In 5.0 it was even worse: the mouse sometimes was several pixels below this point!

I don’t fake it. Believe me! (Does anybody know how to capture screenshot with mouse pointers under linux?) You can trust that I didn’t fake the image, because then I captured another interesting screenshot:

Which might be a solution to the problem: the JPopupMenu (I guess menus are implemented in this manner) is shown at the wrong position.

Has anybody seen the same bug, too??

It is really difficult to reproduce. Sometimes it occures and sometimes not…

E.g. I restarted NetBeans and it disapears.

Please look here for the bug report at netbeans.org.

UPDATE = PARTIAL SOLUTION

Today (19.08.08) it was the first day I see this behaviour in another java application.
(The popupmenu selection was different to the mouse position)
So I guess: its not a netbeans issue!!

UPDATE2

You can stimulate this bug via:

click “restore old size” in the menubar (WindowMaker) of the window of Netbeans -> move the window a bit left (out of screen) -> maximize -> now e.g. right click a project => context menu => bug

Spring Rich Client – Part 2

Let us do some more basics with the “Spring Rich Client” 1.0.0 (SpringRC). Although it is time to give an overview of the entire architecture I won’t do this here, because I am a newbie with Spring and SpringRC. So we will just look into the steps how we get things running.

Update: See an older post for a good intro or this link collection for more information.

Startup

First of all we want to include a license prompt on the very first startup. If it is in pure text format surround the license with <pre>licenseText</pre>, save it to the classpath as /path/license.txt and do the following:

  • Add the source code into LifecycleAdvisor
        private final Log logger = LogFactory.getLog(getClass());
        private static final String SHOW_WIZARD_KEY = "setupWizard.show";
        private Settings settings;
        @Override
        public void onPreStartup() {
            boolean showDialog = true;
            if (settings.contains(SHOW_WIZARD_KEY)) {
                showDialog = settings.getBoolean(SHOW_WIZARD_KEY);
            }
            if (showDialog && getApplication().getApplicationContext().containsBean("setupWizard")) {
                SetupWizard setupWizard = (SetupWizard) getApplication().getApplicationContext().getBean(
                        "setupWizard", SetupWizard.class);
                setupWizard.execute();
                settings.setBoolean(SHOW_WIZARD_KEY, false);
                try {
                    settings.save();
                } catch (IOException ex) {
                    logger.error("Can't save state.", ex);
                }    }    }
        public void setSettings(Settings set) {
            settings = set;
        }
  • Add the following text into the application-context.xml
    <bean id="setupWizard" class="org.springframework.richclient.application.setup.SetupWizard">
        <property name="licenseTextLocation" value="/path/license.txt" />
    </bean>
    <bean id="xmlInternalSettings"
          class="org.springframework.richclient.settings.xml.XmlSettingsFactory"
          factory-bean="settingsManager"
          factory-method="getInternalSettings">
    </bean>
    <bean id="settingsManager" class="org.springframework.richclient.settings.SettingsManager">
            <property name="settingsFactory">
                <bean class="org.springframework.richclient.settings.xml.XmlSettingsFactory"/>
            </property>
    </bean>

    And insert <property name=”settings” ref=”xmlInternalSettings” /> into the lifecycleAdvisor bean’s property list.

  • As last step you have to fill in the message text for this wizard into the message.properties file:
    setup.intro.welcomeTo = Welcome to
    setup.intro.title = TimeFinder!
    setup.intro.description = TimeFinder in one of its future releases will help you with automatic and manual timetabling.
    setup.cancel.title=Cancel Setup
    setup.cancel.message = Do you really want to exit the application?
    acceptLicenseCommand.label=I &accept the terms of this license agreement
    doNotAcceptLicenseCommand.label=I do ¬ accept the terms of this license agreement
    setup.license.title=License agreement
    setup.license.description=Please read the following license agreement carefully

The most of the xml code above is necessary to inject a new instance of Settings which will be created from the SettingsManager.

… Break …

Does anybody of you know, how I can do this in Java, not in ugly xml? Well, I could create the factory directly in the LifecycleAdvisor, but how can I do this dependency injection in Java (with Spring)?

… Okay, let us go further …

This settings object is then accessible within the LifecycleAdvisor because of the setSettings method and is necessary to save, if this wizard should be prompted on the next startup again. The xml-settings will be written to currentPath/settings/internal.settings.xml.
The used SetupWizard extends from AbstractWizard. This abstract class could be used for any other wizards: just add one or more AbstractWizardPages to the wizard and see this documentation. Here is the result:


Another cool feature is to show a progressbar on the splashscreen. This was very easy: add (or replace the existing) bean to the startup-context.xml file:

<bean id="splashScreen" class="org.springframework.richclient.application.splash.ProgressSplashScreen" scope="prototype">
        <property name="imageResourcePath" value="/de/peterk/springr/ui/images/splash-screen.png" />
        <property name="showProgressLabel" value="true" />
</bean>

Now I did an ugly hack. I want to change the colors of the progressbar. But only on the progressbar on startup, so we have to revert the following code:

Color myYellow = new Color(255, 225, 100);
Color myGreen = new Color(120, 208, 60);
UIManager.put("ProgressBar.selectionForeground", myYellow);
UIManager.put("ProgressBar.selectionBackground", myGreen);
UIManager.put("ProgressBar.foreground", myGreen);
UIManager.put("ProgressBar.background", myYellow);
UIManager.put("ProgressBar.border", new LineBorderUIResource(myYellow));

To revert these changes, please look into the method LifecycleAdvisor.onPreWindowOpen (see the resources section, I will not post it here – it is too stupid ;-))

Here is the result:

Views …

Hopefully I can create a next blog entry about the docking framework MyDoggy and the integration into SpringRC. Now it works like a charm – try it out! (see resources).

Today I will show what you can apply to all ‘component managers’ that are integrated in SpringRC.

First: there is one application per virtual machine. But there could be one or more ApplicationPages (JFrames) with several views (center, north, south, …). In our case (MyDoggy) there is only one ApplicationPage.

Normally you want to have more than one component per start-up page. To change this add the following xml to the application-context.xml:

<bean id="aLotOfViews" class="org.springframework.richclient.application.support.MultiViewPageDescriptor">
   <property name="viewDescriptors">
     <list>
        <value>view2</value>
        <value>initialView</value>
     </list>
   </property>
</bean>

And change the startingPageId in the lifecycleAdvisor bean to aLotOfViews. With the upcoming MyDoggy 1.5.0 enabled we can get this nice layout, which will be automatically saved(!):

Of course it is possible to use other layout manager like swing dockings:

… and more!

If you want to use custom components: just add them! I created a custom component with the open source Matisse GUI builder integrated in NetBeans. Here is the code how you can put this component into SpringRC:

public class CalculatorView extends AbstractView {
    protected JComponent createControl() {
        JPanel panel = getComponentFactory().createPanel(new BorderLayout());
        panel.add(new CalculatorPanel()/*created with Matisse*/, BorderLayout.CENTER);
        return panel;
    }}

To add this view to the startingPage do (aLofOfViews already references to this bean, so no changes are necessary there):

<bean id="view2" class="de.timefinder.core.ui.mydoggy.MyDoggyViewDescriptor">
        <property name="viewClass" value="de.timefinder.core.ui.CalculatorView" />
</bean>

One thing you have to know is: How to translate keys within this ‘external’ CalculatorView?

In Matisse do:

  1. Click the button, where you want to translate the text
  2. Then – in the property panel on the right side – click on the […] button
  3. Select “Resource Bundle” instead of “Plain Text”
  4. Use the messages.properties file for the bundle name
  5. Insert the appropriate key (defined in messages.properties)
  6. Use the following line to get the value (click on the “Format…” button) Application.instance().getApplicationContext().getMessage(“{key}”, null, null)

For all of the following components it is easier: do 1, 2, 3 and insert the key! This could be the new slogan for Matisse 😉

Now some more I18N. For example you want to display: “Result of $number!” you should use the following line in message.properties:

calculatorPanel.title=Result of {0} !

and get the formatted string via

Application.instance().getApplicationContext().getMessage("calculatorPanel.title", new Object[]{result}, null);

Another small point could be the ugly output of the standard java 1.4 Logger. We will now change the two-lined logging output into a one-lined. Actually this is a one-liner if you look for yourself into the resource section for the TFFormatter class:

java.util.logging.Logger.getLogger("de.timefinder").getParent().getHandlers()[0].setFormatter(new TFFormatter());

Tasks

In Swing you can use the Swing ProgressMonitor, but in SpringRC you should use the integrated ProgressMonitor to indicate the current progress of a task in the bottom right corner of the page:

With the factorial view of my example you can calculate, yes, factorials. I tried “50 000” and the calculation took nearly the same time as adding the number to the JTextArea …

So, use the ProgressMonitor in combination with the SwingWorker (I grabbed it from jdesktop, but you can use SpringRC’s Swingworker as well. Get the concurrent package from here or through maven. )

Now you can use the following code to execute a long running task:

ApplicationWindow aw = Application.instance().getActiveWindow();
final ProgressMonitor pm = aw.getStatusBar().getProgressMonitor();
String str = Application.instance().getApplicationContext().getMessage("calculatorPanel.startTask", null, null);
pm.taskStarted(str, -1);
SwingWorker sw = new SwingWorker() {
        BigInteger resultLong = BigInteger.ONE;
        //protected Object construct() in SpringRC's SwingWorker!
        protected Object doInBackground() {
            // now my long task and the progress indication
            for (int i = 2; i <= fac && !pm.isCanceled(); i++) {
                pm.worked(100 * i / fac);
                resultLong = resultLong.multiply(BigInteger.valueOf(i));
            }
            return resultLong;
        }
        //protected void finished()
        @Override
        protected void done() {
            // all of the following code will be called on the Event Dispatching Thread
            if (pm.isCanceled()) {
                output.setText("Canceled");
            } else {
                output.setText(resultLong.toString());
            }
            pm.done();
        }
    };
    //sw.start();
    //sw.clear(); // reuse would be possible with SpringRC's SwingWorker!
    sw.execute();

Conclusion

SpringRC offers us – as client-side-programmers – a bunch of powerful utilities to build our application fast and scaleable. Some parts are well documented; some parts not. But I think with relaunching the project in October ’08 (hopefully!) as Spring Desktop it will get a lot of support from even more users and maybe from the company SpringSource itself. Hopefully then the documentation will be better…

The most important point for me is that SpringRC is ‘only’ a sweat jar collection and not a layer between me and Swing.

Another point is that SpringRC uses dependency injection and NetBeans RCP uses the service locator approach e.g.
SomeInterfaceImpl impl = Lookup.lookup(SomeInterface.class).
instead of the setter injection in the very first example for SpringRC.
For others this could be one more argument against NetBeans RCP (not for me …)

Resources

  • Another older, but very good tutorial is located here.
  • Maybe it is interesting to know: in the updated version of the book Spring – A Developer’s Notebook the last chapter 9 is about the Spring Rich Client Project (author was Keith Donald).
  • Here you can find part 1.
  • Here you can download the project without the jars included in the SpringRC’s download (It is a NetBeans 6.1 project, so you can simply copy all jars of SpringRC into the lib folder and open the project with NetBeans. Then resolve references via right click or change the references directly; in nbproject/project.properties).
  • Update: Other resources can be found here.

Real Time Editing with Eclipse and NetBeans

Do you know what real time editing is?

No, then look at this fantastic video to see this feature in Eclipse.

Or browse through this tutorial. It is really great.

I love NetBeans. So is there something similar for NetBeans? Yes! There is a collaboration plugin, but I tried it for myself and, sorry, it is really bad.

Update: You need a private server and then it should work

Here you have my bug list:

  • if I remove a contact, it will be listed the next login
  • if a disconnection happens then one can choose ‘don’t show this dialog again’. This does not work

So the previous bugs are not bad. But then when I tried it with a developer (of timefinder.de) it is only useable for a normal chat, because:

  • the editor will not being updated (after some minutes)!??
  • if you remotely execute the program you will do it several times, because you won’t get a feedback, wether starting was successful. thats awful.

But please proof me wrong and contact me via

  • Install the Developer Collaboration plugin in NetBeans 6.1 via: MenuBar->Tools->Plugins
  • Follow this collab-instructions. It is important to use the server: share.java.net and then add timefinder or peatar to your conversations.

Spring Rich Client – Part 1

Today I will start a series about the great Swing framework called Spring Rich Client (SRC). The 1.0.0 version was released in March 2008 and it is not inactive as I thought before.

You can get more information about SRC from:

Why I listed the forum as the first point? Because for a beginner like me it was the best source of information (after the samples).

So, let us set up a hello world example.

  • Download the Spring Rich Client 1.0.0 from here (19 MB, Apache License 2.0).
  • Download my Hello World skeleton (a NetBeans 6.1 project, 60 KB) or use the spring-richclient-archetype from the download bundle of SRC, where you have to install maven before you can compile and run it.

If you use my Hello World skeleton you should open it in NetBeans, right click on the project node and resolve reference problems. Then go to the place where you have unzipped the SRC and add the first jar file. The other jar files should be added automagically for you.

The project with dependencies would be about 2.7 MB, it is not a small overhead, but okay, I think. As an example for the reader one can compare it to the minimal size of the NetBeans or Eclipse RCP.

Now it is time to start the project with F6 or Run->’Run Main Project’. You should see the frog-splashscreen and the final view:

Now let me explain several things that one could customize in SRC. Please see the Resources section for the result of customization.

As the first point I wanted to know how easy it is to introduce docking capabilities (vl docking). It was really easy!

  • add spring-richclient-docking.jar and vldocking.jar
  • and change 2 things in the richclient-application-context.xml file:
  • change class of initialView to org.springframework.richclient.application.docking.vldocking.VLDockingViewDescriptor
  • add a applicationPageFactory to the richclient-application-context.xml

Then you can add a new window to see the results of dragging:

  • Create the class View2
  • add the following to the richclient-application-context.xml:
  • <bean id=”view2″
    class=”org.springframework.richclient.application.docking.vldocking.VLDockingViewDescriptor”>
    <property name=”viewClass” value=”de.peterk.springr.View2″ />
    <property name=”autoHideEnabled” value=”true” />
    <property name=”closeEnabled” value=”true”/>
    </bean>
  • and you are done! Just start the application go to Windows->Show View->View2

Now,

how easy is it to use your own layout? Configuring the look and feel:

  • Remove the lookAndFeelConfigurer and add instead:
    <bean id=”lookAndFeelConfigurer” class=”de.peterk.springr.ui.KunststoffConfigurer”></bean>
  • remove looks.jar: 350 kb
  • add kunststoff: 17 kb
  • add the KunststoffConfigurer class to the source package

Okay, then changing the splash screen is trivial: just overwrite the splash-screen.png or change the path in the richclient-startup-context.xml file.

Now we should adjust the size of the view, this can be done with 2 lines in the method SimpleLifecycleAdvisor.onPreWindowOpen:

Rectangle rect = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();
configurer.setInitialSize(new Dimension(rect.width, rect.height));

And to translate the messages simply copy all property files to e.g. file_de.properties and translate them! In our case it means “cp message.properties message_de.properties”. If you want to add a translateable tool tip of the initalView-label just use:

  • lblMessage.setToolTipText(getMessage(“initialView.toolTip”));
  • in InitialView.createControl and add the property initialView.toolTip to the property file.

To set a keyboard shortcuts e.g. to leave the application. You need to add one line to the message.properties file

  • exitCommand.label=Exit@ctrl Q

Another interesting action (in SRC they will be called commands) could be restart. So how can we add the action into the menu? You have to add

  • restartCommand.label=Restart@ctrl R
  • in the message.properties file and use
  • Application.instance().start(); Application.instance().getActiveWindow().close();
  • within your RestartCommand class. Then add
  • <bean class=”de.peterk.springr.RestartCommand” />
  • into the commands-context.xml (e.g. after <value>propertiesCommand</value> in fileMenu)

The final result is:

Resources

Here you can download the extended “hello more” sample (a NetBeans 6.1 project about 90 KB, without dep). The full project was 2.9 MB.

Conclusion

One can say that Spring Rich Client is a powerful jar collection :-). But I would say SRC is a great way for your next swing application!

It is very intuitive to use: the whole sample (including to write this blog) took me only about 6 hours. I think you could be really productive with it! In the case I published the documents with mistakes: please leave your comment here!

Old News: NetBeans Tips

Have you ever wondered that there are no “tips of the day” for NetBeans available? Maybe these two sides could satisfy your needs:

  • NetBeans Hacks (Part1) Here the following was new to me: Out-Smart Search & Replace
  • NetBeans Hacks (Part2) Here I suggest you to read Activate Anti-Aliasing Font Rendering in the Editor, Define Shortcuts for Ant Targets and Depend on Other Projects.

But both are for older versions of NetBeans. So are there any plans for newer tips? Yes, there are! Ruth says sun even plans to publish a book (at JavaOne) about this topic.

NetBeans of the year 2010

I am really happy with NetBeans 6.0, but through my usage of other IDEs I noticed that there could be even more features in NetBeans. Namely:

  1. Spell-checking while editing. I know that there is an existing module. But the module isn’t in the final release! (And nbextras is down.)
  2. Serial Version Generator. Even here is an existing modul. But as always I would prefer that a working version will be shipped with the IDE.
  3. A simple binding of an ant-task to a menu entry (to define keyboard shortcuts). E.g. Provide a ‘Create new menu from ant-task’- wizard.
  4. Formatting of several files. E.g. via right clicking on a package->Tools->Formatting.
  5. Searching through keyboard shortcuts should be possible.
  6. One should be able to select specific moduls for the update process. And the process should be done in background.

I know that there is an issue tracker for NetBeans. And here is a quite extensive list. But I want to discuss wether these features are important and if you have suggestions for further improvements. Please do not only mention things that other IDE’s can do.

Instead we should think about a NetBeans of the year 2010 like other people did here and here. (Keep your eyes on the date in both posts!)

Diplomarbeit

Heute hab ich meine Diplomarbeit abgegeben:

Maker-Fringe-Messungen an Gallium-Selenid- und Saccharose-Kristallen.

Interessant für den Java Programmierer ist dann evtl. mein Messprogramm Nonlinear Optic Tools (nlo) – in Java und C mit NetBeans geschrieben.

Auf Anfrage kann ich gerne die Quellen für Latex, gnuplot und die Bilder (mit inkscape bzw. xfig erstellt) veröffentlichen.