I've an application that collects a monochrome "image" as an array of
"unsigned short" (short[]), saves it as a TIFF (thanks for that help) and displays it on JPanel. I'd rather use the ImageJ methods etc. to display the image on the JPanel and reduce my code. Is this possible? How? Thanks, Nate -- When I was 12 I thought I would live forever. So far, so good. -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html |
Hi Robert,
On Tue, 22 Oct 2013, Robert Lockwood wrote: > I've an application that collects a monochrome "image" as an array of > "unsigned short" (short[]), saves it as a TIFF (thanks for that help) > and displays it on JPanel. I'd rather use the ImageJ methods etc. to > display the image on the JPanel and reduce my code. > > Is this possible? How? Unfortunately, the ImageCanvas -- ImageJ 1.x' AWT component intended to display images -- is tightly bound to the ImageWindow class and does not play well with other components in the same AWT container. Besides, all the claims that AWT and Swing mix well now seem to be premature still. Therefore we integrated Simon Andrews' JImagePanel into Fiji: https://github.com/fiji/fiji/blob/master/src-plugins/fiji-lib/src/main/java/fiji/util/gui/JImagePanel.java It should be relatively easy to integrate into your software: it is contained in the fiji-lib artifact available at http://maven.imagej.net/. You could also extract the file and insert into your own source code, of course, but you'd ask for diverging versions. Ciao, Johannes -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html |
In order to have an ImagePanel for my application I downloaded the
JImagePanel from GitHub in response to Johannes reply, created a class for it in my project changing the package to my package in Eclipse Keppler. In my GUI initialization where the GUI is built I have: jImagePanel = new JImagePanel(); jImagePanel.setName("jImagePanel"); jImagePanel.setBorder(new LineBorder(new Color(0, 0, 0))); jImagePanel.setBounds(10, 10, 641, 481); jImagePanel.setBackground(Color.WHITE); jImagePanel.setOpaque(false); pnlBase.add(jImagePanel); when the image is read I display it with: if (!jImagePanel.isOpaque()) { jImagePanel.setOpaque(true); } jImagePanel.updateImage(imp); When I shift from Source to Design Google Builder crashes indicating problems in JImagePanel's method paintCompnent(). When I attempt to run it the GUI does not display properly, the contents of the JFrame are gray. Moving the cursor over the contents exposes all the JButtons, but nothing else, and clicking on the button results in the expected display of my file selector. If the file is selected the image displays correctly as do all the other visual objects in the JFrame. I get NullPointerException errors that finger the same line that trying to move to Display fingers. I modified the below code to check that imp was not null but it had no effect. Johannes gave another URL for the code but I don't know how to get that code. I guess I'm partway there ... From JImagePanel: @Override public void paintComponent(Graphics g) { super.paintComponent(g); try { if (imageUpdated) { imageUpdated = false; imp.updateImage(); } Java2.setBilinearInterpolation(g, Prefs.interpolateScaledImages); Image img = imp.getProcessor().createImage(); // THIS IS THE ERROR LINE if (img != null) { waitForImage(img); int displayWidth = (int) (srcRect.width * magnification); int displayHeight = (int) (srcRect.height * magnification); Dimension size = getSize(); int offsetX = (size.width - displayWidth) / 2; int offsetY = (size.height - displayHeight) / 2; g.translate(offsetX, offsetY); g.drawImage(img, 0, 0, displayWidth, displayHeight, srcRect.x, srcRect.y, srcRect.x + srcRect.width, srcRect.y + srcRect.height, null); } drawOverlay(g); } catch (OutOfMemoryError e) { IJ.outOfMemory("Paint"); } } On Wed, Oct 23, 2013 at 7:31 AM, Johannes Schindelin < [hidden email]> wrote: > Hi Robert, > > On Tue, 22 Oct 2013, Robert Lockwood wrote: > > > I've an application that collects a monochrome "image" as an array of > > "unsigned short" (short[]), saves it as a TIFF (thanks for that help) > > and displays it on JPanel. I'd rather use the ImageJ methods etc. to > > display the image on the JPanel and reduce my code. > > > > Is this possible? How? > > Unfortunately, the ImageCanvas -- ImageJ 1.x' AWT component intended to > display images -- is tightly bound to the ImageWindow class and does not > play well with other components in the same AWT container. > > Besides, all the claims that AWT and Swing mix well now seem to be > premature still. > > Therefore we integrated Simon Andrews' JImagePanel into Fiji: > > > https://github.com/fiji/fiji/blob/master/src-plugins/fiji-lib/src/main/java/fiji/util/gui/JImagePanel.java > > It should be relatively easy to integrate into your software: it is > contained in the fiji-lib artifact available at http://maven.imagej.net/. > > You could also extract the file and insert into your own source code, of > course, but you'd ask for diverging versions. > > Ciao, > Johannes > -- When I was 12 I thought I would live forever. So far, so good. -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html |
Hi Robert,
Can you please post a complete example demonstrating the problem? GitHub.com is a nice place to do this. It will make it much easier for people to help you. Regards, Curtis On Thu, Oct 24, 2013 at 12:25 PM, Robert Lockwood <[hidden email]>wrote: > In order to have an ImagePanel for my application I downloaded the > JImagePanel from GitHub in response to Johannes reply, created a class for > it in my project changing the package to my package in Eclipse Keppler. > > In my GUI initialization where the GUI is built I have: > > jImagePanel = new JImagePanel(); > jImagePanel.setName("jImagePanel"); > jImagePanel.setBorder(new LineBorder(new Color(0, 0, 0))); > jImagePanel.setBounds(10, 10, 641, 481); > jImagePanel.setBackground(Color.WHITE); > jImagePanel.setOpaque(false); > pnlBase.add(jImagePanel); > > when the image is read I display it with: > > if (!jImagePanel.isOpaque()) { > jImagePanel.setOpaque(true); > } > > jImagePanel.updateImage(imp); > > When I shift from Source to Design Google Builder crashes indicating > problems in JImagePanel's method paintCompnent(). > > When I attempt to run it the GUI does not display properly, the contents of > the JFrame are gray. Moving the cursor over the contents exposes all the > JButtons, but nothing else, and clicking on the button results in the > expected display of my file selector. If the file is selected the image > displays correctly as do all the other visual objects in the JFrame. > > I get NullPointerException errors that finger the same line that trying to > move to Display fingers. > > I modified the below code to check that imp was not null but it had no > effect. > > Johannes gave another URL for the code but I don't know how to get that > code. > > I guess I'm partway there ... > > From JImagePanel: > > @Override > public void paintComponent(Graphics g) { > super.paintComponent(g); > try { > if (imageUpdated) { > imageUpdated = false; > imp.updateImage(); > } > Java2.setBilinearInterpolation(g, > Prefs.interpolateScaledImages); > > Image img = imp.getProcessor().createImage(); // THIS IS THE > ERROR LINE > > if (img != null) { > waitForImage(img); > int displayWidth = (int) (srcRect.width * magnification); > int displayHeight = (int) (srcRect.height * magnification); > Dimension size = getSize(); > int offsetX = (size.width - displayWidth) / 2; > int offsetY = (size.height - displayHeight) / 2; > g.translate(offsetX, offsetY); > g.drawImage(img, 0, 0, displayWidth, displayHeight, > srcRect.x, > srcRect.y, srcRect.x + srcRect.width, srcRect.y > + srcRect.height, null); > } > drawOverlay(g); > } catch (OutOfMemoryError e) { > IJ.outOfMemory("Paint"); > } > } > > > > > On Wed, Oct 23, 2013 at 7:31 AM, Johannes Schindelin < > [hidden email]> wrote: > > > Hi Robert, > > > > On Tue, 22 Oct 2013, Robert Lockwood wrote: > > > > > I've an application that collects a monochrome "image" as an array of > > > "unsigned short" (short[]), saves it as a TIFF (thanks for that help) > > > and displays it on JPanel. I'd rather use the ImageJ methods etc. to > > > display the image on the JPanel and reduce my code. > > > > > > Is this possible? How? > > > > Unfortunately, the ImageCanvas -- ImageJ 1.x' AWT component intended to > > display images -- is tightly bound to the ImageWindow class and does not > > play well with other components in the same AWT container. > > > > Besides, all the claims that AWT and Swing mix well now seem to be > > premature still. > > > > Therefore we integrated Simon Andrews' JImagePanel into Fiji: > > > > > > > https://github.com/fiji/fiji/blob/master/src-plugins/fiji-lib/src/main/java/fiji/util/gui/JImagePanel.java > > > > It should be relatively easy to integrate into your software: it is > > contained in the fiji-lib artifact available at http://maven.imagej.net/ > . > > > > You could also extract the file and insert into your own source code, of > > course, but you'd ask for diverging versions. > > > > Ciao, > > Johannes > > > > > > -- > When I was 12 I thought I would live forever. > So far, so good. > > -- > ImageJ mailing list: http://imagej.nih.gov/ij/list.html > -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html |
Thanks Curtis, I have minimal code that re-creates the problem with an
application class, TestApp, and a single class, JImagePanel. I have no idea how to get them into github. I've never had any cooperators with whom to collaborate so I'm absolutely ignorant of how to use github. On Thu, Oct 24, 2013 at 11:10 AM, Curtis Rueden <[hidden email]> wrote: > Hi Robert, > > Can you please post a complete example demonstrating the problem? > GitHub.com is a nice place to do this. It will make it much easier for > people to help you. > > Regards, > Curtis > > > On Thu, Oct 24, 2013 at 12:25 PM, Robert Lockwood <[hidden email] > >wrote: > > > In order to have an ImagePanel for my application I downloaded the > > JImagePanel from GitHub in response to Johannes reply, created a class > for > > it in my project changing the package to my package in Eclipse Keppler. > > > > In my GUI initialization where the GUI is built I have: > > > > jImagePanel = new JImagePanel(); > > jImagePanel.setName("jImagePanel"); > > jImagePanel.setBorder(new LineBorder(new Color(0, 0, 0))); > > jImagePanel.setBounds(10, 10, 641, 481); > > jImagePanel.setBackground(Color.WHITE); > > jImagePanel.setOpaque(false); > > pnlBase.add(jImagePanel); > > > > when the image is read I display it with: > > > > if (!jImagePanel.isOpaque()) { > > jImagePanel.setOpaque(true); > > } > > > > jImagePanel.updateImage(imp); > > > > When I shift from Source to Design Google Builder crashes indicating > > problems in JImagePanel's method paintCompnent(). > > > > When I attempt to run it the GUI does not display properly, the contents > of > > the JFrame are gray. Moving the cursor over the contents exposes all the > > JButtons, but nothing else, and clicking on the button results in the > > expected display of my file selector. If the file is selected the image > > displays correctly as do all the other visual objects in the JFrame. > > > > I get NullPointerException errors that finger the same line that trying > to > > move to Display fingers. > > > > I modified the below code to check that imp was not null but it had no > > effect. > > > > Johannes gave another URL for the code but I don't know how to get that > > code. > > > > I guess I'm partway there ... > > > > From JImagePanel: > > > > @Override > > public void paintComponent(Graphics g) { > > super.paintComponent(g); > > try { > > if (imageUpdated) { > > imageUpdated = false; > > imp.updateImage(); > > } > > Java2.setBilinearInterpolation(g, > > Prefs.interpolateScaledImages); > > > > Image img = imp.getProcessor().createImage(); // THIS IS THE > > ERROR LINE > > > > if (img != null) { > > waitForImage(img); > > int displayWidth = (int) (srcRect.width * magnification); > > int displayHeight = (int) (srcRect.height * > magnification); > > Dimension size = getSize(); > > int offsetX = (size.width - displayWidth) / 2; > > int offsetY = (size.height - displayHeight) / 2; > > g.translate(offsetX, offsetY); > > g.drawImage(img, 0, 0, displayWidth, displayHeight, > > srcRect.x, > > srcRect.y, srcRect.x + srcRect.width, srcRect.y > > + srcRect.height, null); > > } > > drawOverlay(g); > > } catch (OutOfMemoryError e) { > > IJ.outOfMemory("Paint"); > > } > > } > > > > > > > > > > On Wed, Oct 23, 2013 at 7:31 AM, Johannes Schindelin < > > [hidden email]> wrote: > > > > > Hi Robert, > > > > > > On Tue, 22 Oct 2013, Robert Lockwood wrote: > > > > > > > I've an application that collects a monochrome "image" as an array of > > > > "unsigned short" (short[]), saves it as a TIFF (thanks for that help) > > > > and displays it on JPanel. I'd rather use the ImageJ methods etc. to > > > > display the image on the JPanel and reduce my code. > > > > > > > > Is this possible? How? > > > > > > Unfortunately, the ImageCanvas -- ImageJ 1.x' AWT component intended to > > > display images -- is tightly bound to the ImageWindow class and does > not > > > play well with other components in the same AWT container. > > > > > > Besides, all the claims that AWT and Swing mix well now seem to be > > > premature still. > > > > > > Therefore we integrated Simon Andrews' JImagePanel into Fiji: > > > > > > > > > > > > https://github.com/fiji/fiji/blob/master/src-plugins/fiji-lib/src/main/java/fiji/util/gui/JImagePanel.java > > > > > > It should be relatively easy to integrate into your software: it is > > > contained in the fiji-lib artifact available at > http://maven.imagej.net/ > > . > > > > > > You could also extract the file and insert into your own source code, > of > > > course, but you'd ask for diverging versions. > > > > > > Ciao, > > > Johannes > > > > > > > > > > > -- > > When I was 12 I thought I would live forever. > > So far, so good. > > > > -- > > ImageJ mailing list: http://imagej.nih.gov/ij/list.html > > > > -- > ImageJ mailing list: http://imagej.nih.gov/ij/list.html > -- When I was 12 I thought I would live forever. So far, so good. -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html |
I found the error, the JPanel that the JImagePanel was added to had a
layout set to null, when I commented out that line the errors went away but my GUI is messed up. Some how there was a design error that didn't show until I tried to add the JImagePanel or I screwed something up ... Thanks Curtis and Johannes. On Thu, Oct 24, 2013 at 12:39 PM, Robert Lockwood <[hidden email]>wrote: > Thanks Curtis, I have minimal code that re-creates the problem with an > application class, TestApp, and a single class, JImagePanel. > > I have no idea how to get them into github. I've never had any > cooperators with whom to collaborate so I'm absolutely ignorant of how to > use github. > > > On Thu, Oct 24, 2013 at 11:10 AM, Curtis Rueden <[hidden email]> wrote: > >> Hi Robert, >> >> Can you please post a complete example demonstrating the problem? >> GitHub.com is a nice place to do this. It will make it much easier for >> people to help you. >> >> Regards, >> Curtis >> >> >> On Thu, Oct 24, 2013 at 12:25 PM, Robert Lockwood <[hidden email] >> >wrote: >> >> > In order to have an ImagePanel for my application I downloaded the >> > JImagePanel from GitHub in response to Johannes reply, created a class >> for >> > it in my project changing the package to my package in Eclipse Keppler. >> > >> > In my GUI initialization where the GUI is built I have: >> > >> > jImagePanel = new JImagePanel(); >> > jImagePanel.setName("jImagePanel"); >> > jImagePanel.setBorder(new LineBorder(new Color(0, 0, 0))); >> > jImagePanel.setBounds(10, 10, 641, 481); >> > jImagePanel.setBackground(Color.WHITE); >> > jImagePanel.setOpaque(false); >> > pnlBase.add(jImagePanel); >> > >> > when the image is read I display it with: >> > >> > if (!jImagePanel.isOpaque()) { >> > jImagePanel.setOpaque(true); >> > } >> > >> > jImagePanel.updateImage(imp); >> > >> > When I shift from Source to Design Google Builder crashes indicating >> > problems in JImagePanel's method paintCompnent(). >> > >> > When I attempt to run it the GUI does not display properly, the >> contents of >> > the JFrame are gray. Moving the cursor over the contents exposes all >> the >> > JButtons, but nothing else, and clicking on the button results in the >> > expected display of my file selector. If the file is selected the image >> > displays correctly as do all the other visual objects in the JFrame. >> > >> > I get NullPointerException errors that finger the same line that trying >> to >> > move to Display fingers. >> > >> > I modified the below code to check that imp was not null but it had no >> > effect. >> > >> > Johannes gave another URL for the code but I don't know how to get that >> > code. >> > >> > I guess I'm partway there ... >> > >> > From JImagePanel: >> > >> > @Override >> > public void paintComponent(Graphics g) { >> > super.paintComponent(g); >> > try { >> > if (imageUpdated) { >> > imageUpdated = false; >> > imp.updateImage(); >> > } >> > Java2.setBilinearInterpolation(g, >> > Prefs.interpolateScaledImages); >> > >> > Image img = imp.getProcessor().createImage(); // THIS IS >> THE >> > ERROR LINE >> > >> > if (img != null) { >> > waitForImage(img); >> > int displayWidth = (int) (srcRect.width * >> magnification); >> > int displayHeight = (int) (srcRect.height * >> magnification); >> > Dimension size = getSize(); >> > int offsetX = (size.width - displayWidth) / 2; >> > int offsetY = (size.height - displayHeight) / 2; >> > g.translate(offsetX, offsetY); >> > g.drawImage(img, 0, 0, displayWidth, displayHeight, >> > srcRect.x, >> > srcRect.y, srcRect.x + srcRect.width, srcRect.y >> > + srcRect.height, null); >> > } >> > drawOverlay(g); >> > } catch (OutOfMemoryError e) { >> > IJ.outOfMemory("Paint"); >> > } >> > } >> > >> > >> > >> > >> > On Wed, Oct 23, 2013 at 7:31 AM, Johannes Schindelin < >> > [hidden email]> wrote: >> > >> > > Hi Robert, >> > > >> > > On Tue, 22 Oct 2013, Robert Lockwood wrote: >> > > >> > > > I've an application that collects a monochrome "image" as an array >> of >> > > > "unsigned short" (short[]), saves it as a TIFF (thanks for that >> help) >> > > > and displays it on JPanel. I'd rather use the ImageJ methods etc. >> to >> > > > display the image on the JPanel and reduce my code. >> > > > >> > > > Is this possible? How? >> > > >> > > Unfortunately, the ImageCanvas -- ImageJ 1.x' AWT component intended >> to >> > > display images -- is tightly bound to the ImageWindow class and does >> not >> > > play well with other components in the same AWT container. >> > > >> > > Besides, all the claims that AWT and Swing mix well now seem to be >> > > premature still. >> > > >> > > Therefore we integrated Simon Andrews' JImagePanel into Fiji: >> > > >> > > >> > > >> > >> https://github.com/fiji/fiji/blob/master/src-plugins/fiji-lib/src/main/java/fiji/util/gui/JImagePanel.java >> > > >> > > It should be relatively easy to integrate into your software: it is >> > > contained in the fiji-lib artifact available at >> http://maven.imagej.net/ >> > . >> > > >> > > You could also extract the file and insert into your own source code, >> of >> > > course, but you'd ask for diverging versions. >> > > >> > > Ciao, >> > > Johannes >> > > >> > >> > >> > >> > -- >> > When I was 12 I thought I would live forever. >> > So far, so good. >> > >> > -- >> > ImageJ mailing list: http://imagej.nih.gov/ij/list.html >> > >> >> -- >> ImageJ mailing list: http://imagej.nih.gov/ij/list.html >> > > > > -- > When I was 12 I thought I would live forever. > So far, so good. > -- When I was 12 I thought I would live forever. So far, so good. -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html |
In reply to this post by Robert Lockwood
Hi Robert,
> I have no idea how to get them into github. I've never had any > cooperators with whom to collaborate so I'm absolutely ignorant of how > to use github. Another option is to just ZIP it up and post it online somewhere, such a server you control. Or if you have Dropbox, you can put it there and share the link. Whatever works for you! Regards, Curtis On Thu, Oct 24, 2013 at 2:39 PM, Robert Lockwood <[hidden email]>wrote: > Thanks Curtis, I have minimal code that re-creates the problem with an > application class, TestApp, and a single class, JImagePanel. > > I have no idea how to get them into github. I've never had any cooperators > with whom to collaborate so I'm absolutely ignorant of how to use github. > > > On Thu, Oct 24, 2013 at 11:10 AM, Curtis Rueden <[hidden email]> wrote: > > > Hi Robert, > > > > Can you please post a complete example demonstrating the problem? > > GitHub.com is a nice place to do this. It will make it much easier for > > people to help you. > > > > Regards, > > Curtis > > > > > > On Thu, Oct 24, 2013 at 12:25 PM, Robert Lockwood <[hidden email] > > >wrote: > > > > > In order to have an ImagePanel for my application I downloaded the > > > JImagePanel from GitHub in response to Johannes reply, created a class > > for > > > it in my project changing the package to my package in Eclipse Keppler. > > > > > > In my GUI initialization where the GUI is built I have: > > > > > > jImagePanel = new JImagePanel(); > > > jImagePanel.setName("jImagePanel"); > > > jImagePanel.setBorder(new LineBorder(new Color(0, 0, 0))); > > > jImagePanel.setBounds(10, 10, 641, 481); > > > jImagePanel.setBackground(Color.WHITE); > > > jImagePanel.setOpaque(false); > > > pnlBase.add(jImagePanel); > > > > > > when the image is read I display it with: > > > > > > if (!jImagePanel.isOpaque()) { > > > jImagePanel.setOpaque(true); > > > } > > > > > > jImagePanel.updateImage(imp); > > > > > > When I shift from Source to Design Google Builder crashes indicating > > > problems in JImagePanel's method paintCompnent(). > > > > > > When I attempt to run it the GUI does not display properly, the > contents > > of > > > the JFrame are gray. Moving the cursor over the contents exposes all > the > > > JButtons, but nothing else, and clicking on the button results in the > > > expected display of my file selector. If the file is selected the > image > > > displays correctly as do all the other visual objects in the JFrame. > > > > > > I get NullPointerException errors that finger the same line that trying > > to > > > move to Display fingers. > > > > > > I modified the below code to check that imp was not null but it had no > > > effect. > > > > > > Johannes gave another URL for the code but I don't know how to get that > > > code. > > > > > > I guess I'm partway there ... > > > > > > From JImagePanel: > > > > > > @Override > > > public void paintComponent(Graphics g) { > > > super.paintComponent(g); > > > try { > > > if (imageUpdated) { > > > imageUpdated = false; > > > imp.updateImage(); > > > } > > > Java2.setBilinearInterpolation(g, > > > Prefs.interpolateScaledImages); > > > > > > Image img = imp.getProcessor().createImage(); // THIS IS > THE > > > ERROR LINE > > > > > > if (img != null) { > > > waitForImage(img); > > > int displayWidth = (int) (srcRect.width * > magnification); > > > int displayHeight = (int) (srcRect.height * > > magnification); > > > Dimension size = getSize(); > > > int offsetX = (size.width - displayWidth) / 2; > > > int offsetY = (size.height - displayHeight) / 2; > > > g.translate(offsetX, offsetY); > > > g.drawImage(img, 0, 0, displayWidth, displayHeight, > > > srcRect.x, > > > srcRect.y, srcRect.x + srcRect.width, srcRect.y > > > + srcRect.height, null); > > > } > > > drawOverlay(g); > > > } catch (OutOfMemoryError e) { > > > IJ.outOfMemory("Paint"); > > > } > > > } > > > > > > > > > > > > > > > On Wed, Oct 23, 2013 at 7:31 AM, Johannes Schindelin < > > > [hidden email]> wrote: > > > > > > > Hi Robert, > > > > > > > > On Tue, 22 Oct 2013, Robert Lockwood wrote: > > > > > > > > > I've an application that collects a monochrome "image" as an array > of > > > > > "unsigned short" (short[]), saves it as a TIFF (thanks for that > help) > > > > > and displays it on JPanel. I'd rather use the ImageJ methods etc. > to > > > > > display the image on the JPanel and reduce my code. > > > > > > > > > > Is this possible? How? > > > > > > > > Unfortunately, the ImageCanvas -- ImageJ 1.x' AWT component intended > to > > > > display images -- is tightly bound to the ImageWindow class and does > > not > > > > play well with other components in the same AWT container. > > > > > > > > Besides, all the claims that AWT and Swing mix well now seem to be > > > > premature still. > > > > > > > > Therefore we integrated Simon Andrews' JImagePanel into Fiji: > > > > > > > > > > > > > > > > > > https://github.com/fiji/fiji/blob/master/src-plugins/fiji-lib/src/main/java/fiji/util/gui/JImagePanel.java > > > > > > > > It should be relatively easy to integrate into your software: it is > > > > contained in the fiji-lib artifact available at > > http://maven.imagej.net/ > > > . > > > > > > > > You could also extract the file and insert into your own source code, > > of > > > > course, but you'd ask for diverging versions. > > > > > > > > Ciao, > > > > Johannes > > > > > > > > > > > > > > > > -- > > > When I was 12 I thought I would live forever. > > > So far, so good. > > > > > > -- > > > ImageJ mailing list: http://imagej.nih.gov/ij/list.html > > > > > > > -- > > ImageJ mailing list: http://imagej.nih.gov/ij/list.html > > > > > > -- > When I was 12 I thought I would live forever. > So far, so good. > > -- > ImageJ mailing list: http://imagej.nih.gov/ij/list.html > -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html |
In reply to this post by Robert Lockwood
Hi Robert,
> the JPanel that the JImagePanel was added to had a layout set to null, > when I commented out that line the errors went away The default layout of a JPanel is FlowLayout, which personally is never what I want. It tends to not work as expected in many situations. I would suggest one of the following: myPanel.setLayout(new BorderLayout()); myPanel.setLayout(new BoxLayout(myPanel, BoxLayout.X_AXIS)); // components go horizontally myPanel.setLayout(new BoxLayout(myPanel, BoxLayout.Y_AXIS)); // components go vertically If all you want is the JImagePanel inside the JPanel and nothing else, using BorderLayout is probably simplest. But there are many options: http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html My personal favorite layout manager for complex UIs is MigLayout ( http://www.miglayout.com/). It is flexible and powerful while remaining fairly simple to use (unlike GridBagLayout). But it is a third party library, not built in to the JDK. Regards, Curtis On Thu, Oct 24, 2013 at 3:02 PM, Robert Lockwood <[hidden email]>wrote: > I found the error, the JPanel that the JImagePanel was added to had a > layout set to null, when I commented out that line the errors went away but > my GUI is messed up. Some how there was a design error that didn't show > until I tried to add the JImagePanel or I screwed something up ... > > Thanks Curtis and Johannes. > > > On Thu, Oct 24, 2013 at 12:39 PM, Robert Lockwood <[hidden email] > >wrote: > > > Thanks Curtis, I have minimal code that re-creates the problem with an > > application class, TestApp, and a single class, JImagePanel. > > > > I have no idea how to get them into github. I've never had any > > cooperators with whom to collaborate so I'm absolutely ignorant of how to > > use github. > > > > > > On Thu, Oct 24, 2013 at 11:10 AM, Curtis Rueden <[hidden email]> > wrote: > > > >> Hi Robert, > >> > >> Can you please post a complete example demonstrating the problem? > >> GitHub.com is a nice place to do this. It will make it much easier for > >> people to help you. > >> > >> Regards, > >> Curtis > >> > >> > >> On Thu, Oct 24, 2013 at 12:25 PM, Robert Lockwood <[hidden email] > >> >wrote: > >> > >> > In order to have an ImagePanel for my application I downloaded the > >> > JImagePanel from GitHub in response to Johannes reply, created a class > >> for > >> > it in my project changing the package to my package in Eclipse > Keppler. > >> > > >> > In my GUI initialization where the GUI is built I have: > >> > > >> > jImagePanel = new JImagePanel(); > >> > jImagePanel.setName("jImagePanel"); > >> > jImagePanel.setBorder(new LineBorder(new Color(0, 0, 0))); > >> > jImagePanel.setBounds(10, 10, 641, 481); > >> > jImagePanel.setBackground(Color.WHITE); > >> > jImagePanel.setOpaque(false); > >> > pnlBase.add(jImagePanel); > >> > > >> > when the image is read I display it with: > >> > > >> > if (!jImagePanel.isOpaque()) { > >> > jImagePanel.setOpaque(true); > >> > } > >> > > >> > jImagePanel.updateImage(imp); > >> > > >> > When I shift from Source to Design Google Builder crashes indicating > >> > problems in JImagePanel's method paintCompnent(). > >> > > >> > When I attempt to run it the GUI does not display properly, the > >> contents of > >> > the JFrame are gray. Moving the cursor over the contents exposes all > >> the > >> > JButtons, but nothing else, and clicking on the button results in the > >> > expected display of my file selector. If the file is selected the > image > >> > displays correctly as do all the other visual objects in the JFrame. > >> > > >> > I get NullPointerException errors that finger the same line that > trying > >> to > >> > move to Display fingers. > >> > > >> > I modified the below code to check that imp was not null but it had no > >> > effect. > >> > > >> > Johannes gave another URL for the code but I don't know how to get > that > >> > code. > >> > > >> > I guess I'm partway there ... > >> > > >> > From JImagePanel: > >> > > >> > @Override > >> > public void paintComponent(Graphics g) { > >> > super.paintComponent(g); > >> > try { > >> > if (imageUpdated) { > >> > imageUpdated = false; > >> > imp.updateImage(); > >> > } > >> > Java2.setBilinearInterpolation(g, > >> > Prefs.interpolateScaledImages); > >> > > >> > Image img = imp.getProcessor().createImage(); // THIS IS > >> THE > >> > ERROR LINE > >> > > >> > if (img != null) { > >> > waitForImage(img); > >> > int displayWidth = (int) (srcRect.width * > >> magnification); > >> > int displayHeight = (int) (srcRect.height * > >> magnification); > >> > Dimension size = getSize(); > >> > int offsetX = (size.width - displayWidth) / 2; > >> > int offsetY = (size.height - displayHeight) / 2; > >> > g.translate(offsetX, offsetY); > >> > g.drawImage(img, 0, 0, displayWidth, displayHeight, > >> > srcRect.x, > >> > srcRect.y, srcRect.x + srcRect.width, > srcRect.y > >> > + srcRect.height, null); > >> > } > >> > drawOverlay(g); > >> > } catch (OutOfMemoryError e) { > >> > IJ.outOfMemory("Paint"); > >> > } > >> > } > >> > > >> > > >> > > >> > > >> > On Wed, Oct 23, 2013 at 7:31 AM, Johannes Schindelin < > >> > [hidden email]> wrote: > >> > > >> > > Hi Robert, > >> > > > >> > > On Tue, 22 Oct 2013, Robert Lockwood wrote: > >> > > > >> > > > I've an application that collects a monochrome "image" as an array > >> of > >> > > > "unsigned short" (short[]), saves it as a TIFF (thanks for that > >> help) > >> > > > and displays it on JPanel. I'd rather use the ImageJ methods etc. > >> to > >> > > > display the image on the JPanel and reduce my code. > >> > > > > >> > > > Is this possible? How? > >> > > > >> > > Unfortunately, the ImageCanvas -- ImageJ 1.x' AWT component intended > >> to > >> > > display images -- is tightly bound to the ImageWindow class and does > >> not > >> > > play well with other components in the same AWT container. > >> > > > >> > > Besides, all the claims that AWT and Swing mix well now seem to be > >> > > premature still. > >> > > > >> > > Therefore we integrated Simon Andrews' JImagePanel into Fiji: > >> > > > >> > > > >> > > > >> > > >> > https://github.com/fiji/fiji/blob/master/src-plugins/fiji-lib/src/main/java/fiji/util/gui/JImagePanel.java > >> > > > >> > > It should be relatively easy to integrate into your software: it is > >> > > contained in the fiji-lib artifact available at > >> http://maven.imagej.net/ > >> > . > >> > > > >> > > You could also extract the file and insert into your own source > code, > >> of > >> > > course, but you'd ask for diverging versions. > >> > > > >> > > Ciao, > >> > > Johannes > >> > > > >> > > >> > > >> > > >> > -- > >> > When I was 12 I thought I would live forever. > >> > So far, so good. > >> > > >> > -- > >> > ImageJ mailing list: http://imagej.nih.gov/ij/list.html > >> > > >> > >> -- > >> ImageJ mailing list: http://imagej.nih.gov/ij/list.html > >> > > > > > > > > -- > > When I was 12 I thought I would live forever. > > So far, so good. > > > > > > -- > When I was 12 I thought I would live forever. > So far, so good. > > -- > ImageJ mailing list: http://imagej.nih.gov/ij/list.html > -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html |
<<
My personal favorite layout manager for complex UIs is MigLayout ( http://www.miglayout.com/). It is flexible and powerful while remaining fairly simple to use (unlike GridBagLayout). But it is a third party library, not built in to the JDK. >> Thanks, this application is a demo (and test bed for me) for one size of image. I can't resist adapting it for different image sizes from our cameras. I did figure out that the JImagePanel had to be in it's own panel but I used flow layout, I'll experiment. I can immediately see where I should be using mig layout (after following your link) and I see that it is included in Eclipse Keppler. I both use Google Builder and code some of the display by hand. Nate On Thu, Oct 24, 2013 at 7:31 PM, Curtis Rueden <[hidden email]> wrote: > Hi Robert, > > > the JPanel that the JImagePanel was added to had a layout set to null, > > when I commented out that line the errors went away > > The default layout of a JPanel is FlowLayout, which personally is never > what I want. It tends to not work as expected in many situations. > > I would suggest one of the following: > > myPanel.setLayout(new BorderLayout()); > myPanel.setLayout(new BoxLayout(myPanel, BoxLayout.X_AXIS)); // > components go horizontally > myPanel.setLayout(new BoxLayout(myPanel, BoxLayout.Y_AXIS)); // > components go vertically > > If all you want is the JImagePanel inside the JPanel and nothing else, > using BorderLayout is probably simplest. But there are many options: > > http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html > > My personal favorite layout manager for complex UIs is MigLayout ( > http://www.miglayout.com/). It is flexible and powerful while remaining > fairly simple to use (unlike GridBagLayout). But it is a third party > library, not built in to the JDK. > > Regards, > Curtis > > > On Thu, Oct 24, 2013 at 3:02 PM, Robert Lockwood <[hidden email] > >wrote: > > > I found the error, the JPanel that the JImagePanel was added to had a > > layout set to null, when I commented out that line the errors went away > but > > my GUI is messed up. Some how there was a design error that didn't show > > until I tried to add the JImagePanel or I screwed something up ... > > > > Thanks Curtis and Johannes. > > > > > > On Thu, Oct 24, 2013 at 12:39 PM, Robert Lockwood <[hidden email] > > >wrote: > > > > > Thanks Curtis, I have minimal code that re-creates the problem with an > > > application class, TestApp, and a single class, JImagePanel. > > > > > > I have no idea how to get them into github. I've never had any > > > cooperators with whom to collaborate so I'm absolutely ignorant of how > to > > > use github. > > > > > > > > > On Thu, Oct 24, 2013 at 11:10 AM, Curtis Rueden <[hidden email]> > > wrote: > > > > > >> Hi Robert, > > >> > > >> Can you please post a complete example demonstrating the problem? > > >> GitHub.com is a nice place to do this. It will make it much easier for > > >> people to help you. > > >> > > >> Regards, > > >> Curtis > > >> > > >> > > >> On Thu, Oct 24, 2013 at 12:25 PM, Robert Lockwood < > [hidden email] > > >> >wrote: > > >> > > >> > In order to have an ImagePanel for my application I downloaded the > > >> > JImagePanel from GitHub in response to Johannes reply, created a > class > > >> for > > >> > it in my project changing the package to my package in Eclipse > > Keppler. > > >> > > > >> > In my GUI initialization where the GUI is built I have: > > >> > > > >> > jImagePanel = new JImagePanel(); > > >> > jImagePanel.setName("jImagePanel"); > > >> > jImagePanel.setBorder(new LineBorder(new Color(0, 0, 0))); > > >> > jImagePanel.setBounds(10, 10, 641, 481); > > >> > jImagePanel.setBackground(Color.WHITE); > > >> > jImagePanel.setOpaque(false); > > >> > pnlBase.add(jImagePanel); > > >> > > > >> > when the image is read I display it with: > > >> > > > >> > if (!jImagePanel.isOpaque()) { > > >> > jImagePanel.setOpaque(true); > > >> > } > > >> > > > >> > jImagePanel.updateImage(imp); > > >> > > > >> > When I shift from Source to Design Google Builder crashes indicating > > >> > problems in JImagePanel's method paintCompnent(). > > >> > > > >> > When I attempt to run it the GUI does not display properly, the > > >> contents of > > >> > the JFrame are gray. Moving the cursor over the contents exposes > all > > >> the > > >> > JButtons, but nothing else, and clicking on the button results in > the > > >> > expected display of my file selector. If the file is selected the > > image > > >> > displays correctly as do all the other visual objects in the JFrame. > > >> > > > >> > I get NullPointerException errors that finger the same line that > > trying > > >> to > > >> > move to Display fingers. > > >> > > > >> > I modified the below code to check that imp was not null but it had > no > > >> > effect. > > >> > > > >> > Johannes gave another URL for the code but I don't know how to get > > that > > >> > code. > > >> > > > >> > I guess I'm partway there ... > > >> > > > >> > From JImagePanel: > > >> > > > >> > @Override > > >> > public void paintComponent(Graphics g) { > > >> > super.paintComponent(g); > > >> > try { > > >> > if (imageUpdated) { > > >> > imageUpdated = false; > > >> > imp.updateImage(); > > >> > } > > >> > Java2.setBilinearInterpolation(g, > > >> > Prefs.interpolateScaledImages); > > >> > > > >> > Image img = imp.getProcessor().createImage(); // THIS > IS > > >> THE > > >> > ERROR LINE > > >> > > > >> > if (img != null) { > > >> > waitForImage(img); > > >> > int displayWidth = (int) (srcRect.width * > > >> magnification); > > >> > int displayHeight = (int) (srcRect.height * > > >> magnification); > > >> > Dimension size = getSize(); > > >> > int offsetX = (size.width - displayWidth) / 2; > > >> > int offsetY = (size.height - displayHeight) / 2; > > >> > g.translate(offsetX, offsetY); > > >> > g.drawImage(img, 0, 0, displayWidth, displayHeight, > > >> > srcRect.x, > > >> > srcRect.y, srcRect.x + srcRect.width, > > srcRect.y > > >> > + srcRect.height, null); > > >> > } > > >> > drawOverlay(g); > > >> > } catch (OutOfMemoryError e) { > > >> > IJ.outOfMemory("Paint"); > > >> > } > > >> > } > > >> > > > >> > > > >> > > > >> > > > >> > On Wed, Oct 23, 2013 at 7:31 AM, Johannes Schindelin < > > >> > [hidden email]> wrote: > > >> > > > >> > > Hi Robert, > > >> > > > > >> > > On Tue, 22 Oct 2013, Robert Lockwood wrote: > > >> > > > > >> > > > I've an application that collects a monochrome "image" as an > array > > >> of > > >> > > > "unsigned short" (short[]), saves it as a TIFF (thanks for that > > >> help) > > >> > > > and displays it on JPanel. I'd rather use the ImageJ methods > etc. > > >> to > > >> > > > display the image on the JPanel and reduce my code. > > >> > > > > > >> > > > Is this possible? How? > > >> > > > > >> > > Unfortunately, the ImageCanvas -- ImageJ 1.x' AWT component > intended > > >> to > > >> > > display images -- is tightly bound to the ImageWindow class and > does > > >> not > > >> > > play well with other components in the same AWT container. > > >> > > > > >> > > Besides, all the claims that AWT and Swing mix well now seem to be > > >> > > premature still. > > >> > > > > >> > > Therefore we integrated Simon Andrews' JImagePanel into Fiji: > > >> > > > > >> > > > > >> > > > > >> > > > >> > > > https://github.com/fiji/fiji/blob/master/src-plugins/fiji-lib/src/main/java/fiji/util/gui/JImagePanel.java > > >> > > > > >> > > It should be relatively easy to integrate into your software: it > is > > >> > > contained in the fiji-lib artifact available at > > >> http://maven.imagej.net/ > > >> > . > > >> > > > > >> > > You could also extract the file and insert into your own source > > code, > > >> of > > >> > > course, but you'd ask for diverging versions. > > >> > > > > >> > > Ciao, > > >> > > Johannes > > >> > > > > >> > > > >> > > > >> > > > >> > -- > > >> > When I was 12 I thought I would live forever. > > >> > So far, so good. > > >> > > > >> > -- > > >> > ImageJ mailing list: http://imagej.nih.gov/ij/list.html > > >> > > > >> > > >> -- > > >> ImageJ mailing list: http://imagej.nih.gov/ij/list.html > > >> > > > > > > > > > > > > -- > > > When I was 12 I thought I would live forever. > > > So far, so good. > > > > > > > > > > > -- > > When I was 12 I thought I would live forever. > > So far, so good. > > > > -- > > ImageJ mailing list: http://imagej.nih.gov/ij/list.html > > > > -- > ImageJ mailing list: http://imagej.nih.gov/ij/list.html > -- When I was 12 I thought I would live forever. So far, so good. -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html |
Free forum by Nabble | Edit this page |