I just started using eclipse classic (v3.7.2), and I admit I am still pretty lost. What I am trying to do now is turn off ALL the auto-generated code eclipse comes up with when I create a class (and if it does it any other time, I would like that gone too.) I'm not talking about suggestions--it can give me drop down boxes with suggestions all it wants, but I do not want it writing ANY of my code for me--not even braces and parentheses. I want a blank screen when I create a class, and for the most part (pretty much except for auto-indentations and the drop down suggestions) I want eclipse to just mind its own business until I ASK it for something.
I managed to get rid of most of the auto-generated stuff through the window > preferences > java > code style > code templates options, but It still generates the class name and closing braces when I create a class:
public class Contact
{
}
Also, I cannot figure out how to get it to stop completing the braces and parentheses.
Thanks.
In Preferences > Java > Editor > Typing you can disable auto-closing of various things, including braces, strings, etc. But you can not get rid of the package declaration or type declaration portions of the "New Class" template. The only option I can think of is, instead of selecting to create a new Java class, instead create a plain file (which will be empty) in the appropriate source folder according to your package structure.
Having said that, I've been programming for over 20 years and I can't imagine any sane reason why you'd not want a tool to insert boilerplate, even minimal boilerplate like the class declaration. The bottom line is that Eclipse will not generate an invalid class that won't compile, and an empty file is NOT a valid class. If you don't want it to create a class, don't ask it to create a class, ask it to create an empty file instead.
ctrl-3, type Code Templates, select Code Templates -- Java/Code Style. A property page will open where you can edit the templates to empty.
Simply hit escape when it appears if you do not want the suggestions it will not auto type on your code anything and box will disappear, otherwise it is not a good idea to get rid of it.
Related
I'm doing a project in NetBeans that uses JFrames. To begin with, I had created the window in a package called "uam.pvoe.form" and among many other elements, I added a Combo Box called "cmbUnit". For the purpose of my submission, it is necessary that this Combo Box accepts objects of type "Unit" instead of "String" which is the default value for "Type parameters".
NOTE: In the image it says "Unidad" instead of "Unit" because the project is in Spanish but I am translating it for you.
The problem is that when I make this change, part of the code generated by NetBeans is not updated, specifically this part (that is where I get an error and it does not allow me to run the project):
I have made this kind of changes before but this has never happened to me. I think the problem is that the type of objects is no longer of type "String" and that array is invalid but as it is part of the automatically generated code, it does not allow me to modify it. To look for a solution, I checked other projects where I made similar changes in the "Type Parameters" but that line does not even appear in the generated NetBeans code. Could anyone help me on any possible steps I am skipping or any way to fix this problem?
In the "Properties"-window you need to open the "Properties"-tab and delete the values of "model".
Does anyone with IntelliJ & NetBeans experience know, if IntelliJ has some similar feature as for NetBeans "Make controller" when right clicking the corresponding FXML file?
I think it is pretty important since it updates, if I have added something new (a FXID for example), and if I deleted it and such - and also places it in the correct place by itself.
I know you, in Scene Builder, can go to "View -> Show Sample Controller Skeleton", but this is just not enough automation, especially not from a Jetbrains IDE.
This also means that the following link is not an answer:
how to do netbeans'"make controller" in intellij idea
[]
Rather than having an action to create the controller, IDEA uses intentions (activate via Alt+Enter or ⌥⏎). And its philosophy would be to keep the controller in sync as you edit the FXML file rather than recreating it to update it with changes.
For example, when you create an FXML file, IDEA offers to create the controller:
First I name it as desired, and then use an Intention to create the corresponding class:
Then as I add things to the FXML, IDEA offers to create the corresponding items in the controller:
Similarly with an fx:id:
And if I use the rename refactor to change the fx:id
it renames the corresponding field name in the Controller to match. So instead of editing it and then recreating the controller to capture the name change, it simply keeps them in sync. But again, the key is to use the rename refactoring and not just "manually" edit the fx:id.
Edit to answer follow-up questions in comments
First a disclaimer... I only dabble in JavaFX to write simple dialogs as front ends to command line scripts. So I'm by no means an expert and may not be aware of a JavaFX related feature in IDEA. But I have been using IDEA for 14 years and typically know what to look for in terms of features and "how do I" questions.
Can you shed some light on using this kind of stuff with Scene Builder, if you know something about it?
Whenever I use a WYSIYWG editor like Scene Builder, I still keep an eye on and cleanup the code it generates. I'm still a bit old school in that way. And I believe IntelliJ IDEA adheres to that philosophy.
I find it really hard to believe IDEA has no way of "mass automatic updating" edits made in Scene Builder
I can tell you as an IDE, IDEA is not big on Wizards or mass code generation. Instead it's more "surgical" in nature. It's "code by intentions" philosophy is to enter/edit your intent, and then use an intention/quick-fix to implement that intention. Thus any code generation it does is small and focused. But... in some cases you can ask it to simultaneously apply an intention to multiple items by opening the intentions side menu (using the right arrow → key) and selecting the "Fix All 'issue name' problems in file". Again, given my limited experience with JavaFx work, I may not be aware of something. But I'm not seeing anything where such a thing would be and I'm not seeing anything in the Help pages.
<soapbox>
When I first started using IDEA in 2003 I too wondered where all the wizards and mass code generation features that my old IDE provided were. (I previously used Forte for Java, the predecessor to NetBeans.) At first I missed them. Then I started using intentions and refactorings for everything. After a couple of months, I didn't miss the wizards. After a few more months, I came to hate wizards in other IDEs. In the long run, I was far more productive using the intentions & refactorings. And I noticed I was no longer spending a lot of time dealing with compile issues and bugs that I did when I used wizards.
</soapbox>
If I assign fx:id's to a lot of buttons and such in Scene Builder, do I then have to manually go into the code view of the fxml file, find all of the fx:id's and for each of them alt+enter to get them into the controller?
Unfortunately for the "create field" intention for missing IDs" there is not a batch mode available. So you can not use the "fix all" option. My educated guess as to why not is that when creating the field you are given the opportunity to select the type for it. For example, with the fx:id for a label, I may want to type the field as Label, Labeled, Control, etc. Granted in most cases you are likely to type it as the actual type it is in your FXML. So you may want to open a feature request asking for a batch mode to be made available for the "Create field" intention that defaults the field to type used in the FXML. Nevertheless, if you get use to using F2 to navigate to the next error, and then using Alt+Enter (or ⌥⏎) to open the quick fix, you'll find you can add the missing fields very quickly.
if I deleted some fx:id's also, then I would have to remember which ones they were, to them manually delete them in the controller?
Again, instead of just "manually" deleting an fx:id, use an IDEA refactoring. When deleting fx:ids (or anything) use the "Safe Delete" refactoring. With your cursor on the id (either in the FXML file or the Controller), type Alt+Delete (or ⌘⌦) to launch "Safe Delete".
If there are no usages, the field is deleted. Otherwise you get a warning:
Click the "View Usages" button. The "Find" toolbar will open up showing the usages.
Update your code to remove their usages. Use the "Rerun Safe Delete" button to monitor your progress. Once all usages are done, hit the "Do Refactor" button to delete the usages. While this may seem more involved than some sort of regenerate the controller option, my question would be how would such a feature deal with the usage of that field in a method within the controller? Would it just not recreate the field leaving a compile error in my controller? How would it "regenerate" all the customization I've made to the controller?
The Safe Delete also keeps your code error free. If I had a dollar for every time I went to delete a something I absolutely knew was not being used anywhere only for the safe delete refactoring to pop up a warning about the place its being used that I totally forgot about.
If you use Javaru's solution then created fields will be public and without #FXML annotations.
To change it go to:
File | Settings | Editor | Code Style | Java | Code Generation | Default Visibility - choose Escalate or Private, and check "use external annotations" at the bottom.
Second solution: open fxml file in scene builder set the controller class in controller section at left bottom part of window. Go to: view | show sample controller skeleton and copy controller class code.
It is my first post, hope I've helped. :)
I can't see create method or create field
I see this
Go to your .fxml file and there is red error element: the name of your handle function in my example.
Just push create it.
IntelliJ gives you possibilities to create your event:
I'm considering switching from Eclipse to IntelliJ IDEA, but there's one thing holding me back: the autocomplete. Eclipse shows me all the information I want from the start whereas IntelliJ holds back some information. The only thing I'm still missing is separate entries in code completion for each constructor signature. And I believe it's pretty weird that's missing since method signatures are done separately.
My question being, is it possible (am I overlooking something) to get IntelliJ to show separate entries for each signature for constructors WITH documentation, instead of just showing the class name and making you figure out afterwards if you're even in the right place or not.
Eclipse way of showing (preferred)
IntelliJ IDEA way of showing (not preferred)
This answer is base on IDEA version 2021.2.2
In the Settings -> Editor -> General -> Code Completion, check Show parameter name hints on completion under Parameter Info session.
Combine with Ctrl + Q, you can view the javadoc for each constructor.
Type the class name and the parenthesis. Inside parenthesis, type Ctrl+P. Eg: new BufferedWriter( <ctrl+P> )
In fact you can type, ctrl+P to get details of any function, not just constructor.
It is also possible to show overloaded constructors by enabling a hidden option. Invoke the Help | Find Action menu item and type Registry to go to the Registry. Here enable the java.completion.show.constructors option.
Copied From: https://stackoverflow.com/a/43639241/2920861
When using Netbeans' features for generating event handlers from a GUI, for example, while the body of the generated methods are editable, I cannot find a way to change the order of the generated methods within the code of a class.
Cutting for cutting and pasting is not allowed with generated code.
How instead might I do this?
Thank you very much!
You can't do that in Netbeans. It's not really a priority because you can use the Navigator instead.
If you really want to move those blocks, open the Java file with an other editor (Gedit, Notepad...) and re-order the blocks here.
You can also remove the //GEN-FIRST and //GEN-LAST to make them editable in Netbeans.
Is there a simpler way of reordering methods within a class source file in IntelliJ than cutting and pasting the code manually? Nowadays I often need this while refactoring legacy code, e.g. to move related methods close to each other in the source code.
In Eclipse AFAIK there is a view similar to the Structure view of IntelliJ, where I can drag and drop methods around. However, this does not work in IntelliJ and I couldn't find any hints from its help either.
I am using IntelliJ 9.0.2 to be specific.
You can select a method name and hit: Ctrl+Shift+Up or Ctrl+Shift+Down to move it up and down.
On OS X: Cmd+Shift+Up or Cmd+Shift+Down
Beyond this the Rearranger Plugin lets you move methods around quickly, and even define a standard ordering based on your coding convention.
IntelliJ has a built in system that allows you to specify how to order your methods. You need to go to Settings (Ctrl + Alt +S) -> Editor -> Code Style -> Java -> Arrangement (tab) and scroll down until you find the icons with methods. There you can manipulate the options to sort them by visibility, or alphabetically, or to keep related ones grouped together.
Here is a screenshot of my settings which will order methods automatically by visibility (public, protected, private) and alphabetically (a-z).
The blue highlights show the currently selected rules.
Not a perfect answer yet, due to a bug in IntelliJ.
Though IntelliJ offers this feature implicitly, but it needs to be enabled as well as fixed. The OP's suggested way is technically arranging methods in depth-first order. However, if you use Breadth-first ordering(which works properly), it should reduce the manual work of moving functions by a lot, by arranging all caller and callee methods together.
Issue Link: https://youtrack.jetbrains.com/issue/IDEA-149524. Please do vote for its resolution.
The appropriate action for this is Rearrange Code. This has no key assigned to it, but you can define your own using Preferences->Keymap.
With your cursor on the method definition line (you do not have to and press ctrl+shift+up or ctrl+shift+down, to move up or down respectively.
You can also to ctrl+shift+numberpad - to quickly collapse everything so you can focus on moving around (plain - works on my laptop as well, not sure why) and ctrl+shift+numberpad + to get back to see everything (ctrl-shift-equals works on my laptop as well).
Select a block of text (hit Ctrl-W a few times) and then use Ctrl-Shift-Up and Ctrl-Shift-Down to move it around.
There is an automated way, which you can later tweak
Code -> show reformat file dialog
and tick "rearrange code" box