This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.
Product Version: NetBeans IDE 6.5 (Build 200811100001) When a component that references an Icon is copied to a different project, the code generator emits a .setIcon(null) regardless of whether the target project references the original project as part of its build path. Curiously, even with that statement in the code, while the design view stays open, the IDE behaves as if the component had the icon and shows it. Steps to reproduce 1) Create some project A, put an image file somewhere, create a JFrame with a JLabel and reference that image in the icon property. 2) Create some project B. Create a JFrame. Project B may or may not reference Project A in its build path. The results will be the same. 3) Select project A's JFrame and Copy the JLabel 4) Select project B's JFrame and Paste the previously copied component. In the code, setIcon(null) will be emitted, though the GUI designer will think the label has an icon (and show it). Even in preview mode, the icon is shown. 5) After closing the editing window and reopening it again, the icon will be gone. The proper behaviour should be, IMHO - If project B contains a reference to project A, simply keep the URL to the original resource - If project B doesn't reference project A, offer the user these options * Add a reference and keep the original URL * Copy the resource to a user-selected package and rewrite the URL of the resource * Remove the icon Currently the system always behaves in the last way, which is the most user-hostile of the possibilities.
This is a strange, I was trying to reproduce that generated code "setIcon(null)", but it works correctly. I have project A with ... - "labelFull" component inside - icon was set using full disk path "D:\doc\icon2.jpg" - generated code ....setIcon(new javax.swing.ImageIcon("D:\\doc\\icon2.jpg")); - "labelRelative" component inside - icon was set using relative path "icon.jpg" - generated code ....setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon.jpg"))) - icon.jpg and form file are in the same folder I have a project B, this project contains reference to project A. I have a project C, this project doesn't reference to project A. I built project A and then project B. I was able to copy-paste "labelFull" component to project B and C, it always shows icon, generated code was valid. I tried to copy-paste "labelRelative" component to B and C project. Inside project B valid icon was shown, generated code was valid. Inside project C label didn't contain an icon and there were no setIcon() code generated inside initComponents() method body. This behaviour sounds reasonably to me. Can you please attach more detailed steps to reproduce that strange "setIcon(null)" behaviour?
Well, the steps are as basic as they get: 1) File-> New Project. 2) Select Java/Java Desktop Appliction. Click Next 3) Project Name : ProjectA. 4) Repeat 1-3 for ProjectB 5) In the "Projects" View, right click on Project B. 6) Select libraries. 7) In the Compile tab, select Add Project, double click on Project A 8) In the Run tab, select Add Project, double click on Project A 9) Use the Windows File Manager to locate some image, then right click on the file name -> Copy 10) Back in netbeans, right click on the "projecta" package -> Paste 11) Open (in projectA) ProjectAView.java. Place a JLabel on it. Click on the icon property to edit it. Select "Image Within Project", and in the combo select the "projecta" package, then in the second combo select the name of the image. Click ok 12) Optionally, Build projectA 13) Right click on the JLabel and select Copy 14) Open (in projectB) ProjectBView.java. Right click on the frame and select Paste. The label appears with its icon 15) In the "Source" view, you will see that setIcon(null) has been generated. 16) If you click on "Preview Design", the label will be shown with its icon. 17) Close ProjectBView.java. Open it again. The icon is gone now. I have a Camstudio screen video capture of the issue, but it is 60Mb so unless you want it, I'm not attaching it. I'll try to reduce it somehow
I followed your steps and the result depends on your 'optional' step 12. If the Project A is built then everything works fine (in the latest development build). If the Project A is not built then the copied label do not have icon set (e.g. no setIcon() call is generated - I wasn't able to reproduce your 'setIcon(null)' problem). Hence, leaving this issue open because of the 'cleaned Project A' test-case. The root problem here seems to be the inability of the IconEditor to find the icon on the source path of a cleaned project (this project depends on). The following scenario shows more serious manifestation of this problem: Let's assume that ProjectB depends on ProjectA and that ProjectA is cleaned. 1. Open IconEditor for some label in ProjectB. 2. Select icon from ProjectA (using 'Image Within Project' chooser) => the icon is correctly shown in the designer. 3. Save the corresponding form, close it and reopen it => the icon is gone.