Designing good user interface is very difficult, but one can easily design bad user interface. It is enough to organize it in a surprising way and put things at those places where users don't expect them to be.
Management of custom columns in GanttProject 2.0.x is far from being good. There is one small dialog which creates custom columns, there is a popup menu which has one visibility-checkbox per each custom column (and if you want to show or hide 5 columns, you have to open this menu 5 times and click corresponding checkboxes). However when user wants to change a name of some custom column or change a default value, he may get stuck because it looks like there is no such ability. But wait... if you create a task and open its properties, you will see a tab "Custom Columns" and in fact you may change the names and default values there. Surprise! You can't change the values set in the task whose properties you think you're editing, though... surprise, take two! If you want to edit them, you have to make a column visible in the task table and change them there...
People who don't want to play quests instead of working start asking for manuals, and they are right. Surprises must be documented. I don't like writing manuals, though, so I've redesigned the UI in GanttProject Loire and removed the surprises. Now one can add, delete, show, hide, change names and default values of custom columns in a single place, and there is no need to create even a single task. I hope it makes the user experience much better.