Sunday Dec 20, 2009

Marry Christmas, to everyone who cares

In my office, on my table...

Before the Christmass, in the NetBeans office

What it looks like: A bit bored IT guy (Petr Dvorak;o)) wants to check how fast he can complete 50-piece SnowWhite puzzle after drinking 3 litres of vodka with juice (ehm... juice with vodka)...

What it is: We will have a small private party in the end of the day with the NetBeans QE guys, everyone gets a "welcome shot", the weak ones get a juice too... Yeah, and I almost forgot I have a 3-years-old sister and I was looking for some creative present in the last minute...

Marry Christmas! :)

Friday Dec 18, 2009

A quick JFileChooser demo

Today, I noticed that many new NetBeans users have a difficulty of implementing a file chooser functionality. Usually, you just write all the code by hand, but there is also a way how to achieve several goals using the designer in the NetBeans IDE.

This tutorial should demonstrate how to leverage the NetBeans GUI Builder for implementing a custom file chooser. As a setup, we will also create a small Java desktop application.

You can download the resulting project with file chooser.


Before you start, make sure you have NetBeans IDE 6.8 and JDK 1.6.

Step-by-step guide

As a first thing, we create a new Java Desktop Application:

  1. Invoke File>New Project, select Java category and choose Java Desktop Application project type
  2. Click Next, fill in some application name ("JFileChooserDemo") and make sure Basic Application is selected
  3. Click Finish

At this moment, a new Java Desktop application with three important files is created:

  • JFileChooserDemoApp
  • JFileChooserDemoView
  • JFileChooserDemoAboutBox

 Just as on this picture:

Projects view

 Double-click the JFileChooserDemoView to make sure it is opened in the designer.

Java Desktop Application - GUI Builder

Open the component palette (Ctrl+Shift+8).

Drag a new Menu Item (JMenuItem, from Swing Menus category) in the menu bar that was created by default.

Right-click this item in the designer and invoke Change Variable Name - rename the item to openFileMenuItem. Then, press Space (to start editing the text of the component that is selected in the designer) and change the text to "Open text file".

To set an action to this menu item, right click it and invoke Events>Action>Action Performed. A new method is generated, it is called for example openFileMenuItemActionPerformed - copy the name to the clipboard for a while.

Changing menu item variable name

Drag a Tool Bar (from Swing Containers category) to the designer and add one button (JButton, from Swing Controls) to the tool bar.

Change the button's text to "Open" by selecting it and pressing Space.

Rename both components' variable names again using the context menu, so that you don't have to stick with the ugly "jButton1"-like names.

Currently, you have an event handler for the "Open" menu item. To set the same event handler to the button, single-click the button and select Events tab in the Properties view. Paste the name of the method in the "actionPerformed" event and press Enter to confirm.

At this moment, the method "openFileMenuItemActionPerformed" (or similar name) is set as an event handler for both button in the toolbar and menu item.

Finally, add a JTextArea (Swing Controls) in the form (and rename the variable). The form should look like this:

Java Desktop Application - GUI Builder

So, now we have finished the basics. Let's add a JFileChooser to the form.

Open the inspector window if it is not opened (Window>Navigating>Inspector) and right-click Form JFileChooserDemoView node.

Invoke "Add From Palette>Swing Windows>File Chooser".

A JFileChooser is added in the inspector. Right-click the node and rename the variable to "fileChooser".

Add JFileChooser using the inspector view

Note: You can also drag&drop the File Chooser from the palette to the white area of the GUI Builder - it will have the same result. It is a bit harder, though, because the default preview of the JFileChooser is rather big and you might end up with the window being inserted inside some of the panels, which is not what you want.

Note: If you don't create a Java Desktop Application or if you just have a JFrame form, you can right-click the "Other components" node instead of the "Form JFileChooserDemoView" node - it will add the JFileChooser component to the JFrame (to the JFrame class) but not in its visual part...

Inspector contains Other Components node for the default JFrame forms

Now, you can click the JFileChooser in the inspector and edit some of its properties in the Properties view. For example, you can edit the title of the dialog by editing the dialogTitle property (change it to "This is open dialog").

To display the file chooser from your application, just paste this code to the openFileMenuItemActionPerformed method and press Ctrl+Shift+I to fix the imports (otherwise, there will be some errors in your code):

    int returnVal = fileChooser.showOpenDialog(this.getFrame());
    if (returnVal == JFileChooser.APPROVE_OPTION) {
        File file = fileChooser.getSelectedFile();
        // ... code that loads the contents of the file in the text area
    } else {
        // ...

Let's do some minor work to add some custom filter.

Note: Users who used to work with MS Visual Studio and .NET might be familiar with a quick but ugly way of making custom filters - typing extensions and descriptions of the filter with a vertical separator in a special property, like this:

openFileDialog.Filter = "Bitmap images|\*.bmp|All files|\*.\*";

see - Java does it in a more difficult but cleaner way...

Select the File Chooser in the Inspector window. Click the asterisk ("...") button by the File Filter property in the properties view.

Select Custom code from the combobox in the dialog that shows up and type "new MyCustomFilter()" in the text field and confirm the dialog - yes, the code will not be compilable now, we will fix it.

All we need to do is to write an inner (or outer, if you like) class that extends the FileFilter class. Just copy and paste following code in the source of your class to create an inner class.

    class MyCustomFilter extends javax.swing.filechooser.FileFilter {

        public boolean accept(File file) {
            // Allow just directories and files with ".txt" extension...
            return file.isDirectory() || file.getAbsolutePath().endsWith(".txt");

        public String getDescription() {
            // This description will be displayed in the dialog,
            // hard-coded = ugly, should be done via I18N
            return "Text documents (\*.txt)";


OK, so that should be it. If there is still something unclear, do not hesitate to ask in the discussion below. If you start the sample project, the result should look something like this:

JFileChooser demo - result

If you want to have more switchable file filters, see addChoosableFileFilter method. You can indeed implement all the stuff yourself, following the tutorial on How to use File Choosers.

Sunday Nov 15, 2009

How Glassfish powers Eqyptian seafood restaurants

Me and my friend were walking in the streets of Luxor, desperately looking for something to eat in an early night. In spite of being the center of an Egyptian tourism, it is quite hard to find a clean restaurant in the city.

Suddenly, I glimpsed a seafood restaurant and - well - the picture on its board was at least quite familiar to me...

Glassfish on the board of Egyptian restaurant

I spent some time staring at the board, trying to make sure I am not mistaken... Well, in the end, we didn't eat there but still the restaurant left a great impression... :)

This just makes me wonder - do local Mexican restaurants cook from NetBeans?

Thursday Jul 09, 2009

How to get the userdir of your NetBeans RCP application?

Userdir is a directory where NetBeans RCP applications store settings and cache. Sometimes it can be helpful to be able to get the directory from the NetBeans RCP application itself. Most of the users initially go with something like:

String user_dir = System.getProperty("user.dir");

... and then they realize this returns a different folder from what they need. Instead, they are looking for this:

String user_dir = System.getProperty("netbeans.user");

Monday Jun 22, 2009

Student projects wanted!

The university/student projects have their own specifics. One of the most visible one is that the innovation and enthusiasm is often combined with rather weak software engineering and poor execution. I know it from my own experience. When I and my team of three students started our software project at the MatFyz (Charles University in Prague), we had to deal with a lot of issues on our own.

For example, we were looking for the right development tools and for the infrastructure for our project... As we didn't have much practical experience with this, we ended up with our own instance of wiki (MediaWiKi on a freehosting), we used our own issue tracker (really - I am serious, we wrote our own PHP application just for the purpose - yeah, we were... young...), we placed our code in the Mercurial repository located on our faculty server and we used Google Groups as an alternative to the mailing lists.


[Read More]

Friday Jun 19, 2009

NetBeans IDE is scanning/parsing/indexing for ages? Yeah, it's a bug!

"Scanning in progress..." - I believe that everyone have met the issue. You open some larger project and you can not use the NetBeans IDE for a few minutes until the sources are "scanned", whatever it means...[Read More]

Wednesday Jun 17, 2009

Enhancements of the NetBeans Output view

... or rather "Finally, a font size can be configured for Output view"?

Today, I was sitting in my office with Tomas Holy, a dev guy who was responsible for the Output view (the view where build output is written, for example). We were chatting for a while as we needed to relax a bit after the hard labor we do.

I suddenly recalled a very commonly heard RFE's:

"Thomas, you know what you should implement? Settings for the font size in the Output view..."

Tomas's reply was plain as usual - with his traditionally bored voice he said:

"Yeah, it is already there..."

He was right, it really showed up in NetBeans 6.7... Those are great news for many people (especially for teachers/professors who use NB IDE at their lessons).

So currently, you can right-click the output window a do quite a lot of cool stuff, such as:

  • Resize the font (Ctrl+MouseWheel works as well)
  • Change a font ("wrapping mode" must be disabled)
  • Set a filter for the output lines (so that only lines matching a regexp can be shown, for example)
The new Output view

Furthermore, Tomas told me he did some rather major enhancements regarding the search functionality (in the Output window), therefore the search should be much faster and should be more memory efficient. I bet everyone has noticed better coloring of the text output...

I hope you will be happy of this enhancement as much as I am! :)

Hudson integration in NetBeans 6.7

Are you a Java developer and did you ever need to build your sources automatically? In this case, you must have already heard about Hudson... If you have used this tool, you must also know how great it is... But there is one more cool thing now (get ready to get excited:-)). We have integrated Hudson in the NetBeans IDE 6.7.[Read More]

Tuesday Jun 16, 2009

Dialogs in NetBeans RCP, DialogDisplayer class

Friends of mine who tried to play around with the NetBeans platform usually didn't know how to correctly create a custom dialog. They tend to reason about this task in the basic "swingy" way: create a new JOptionPane, set it visible when needed and hide it when not needed anymore... But the NetBeans platform has much better and more structured way of displaying a dialog.[Read More]

Thursday Mar 26, 2009

Build the latest NetBeans yourself

This blog post describes how to clone and build NetBeans from the Hg repository. It also contains some notes that I received from my friends who followed my original instructions.[Read More]

« April 2014