Re: Drawing images on a JPanel
John B. Matthews wrote:
In article <Pine.LNX.4.64.0905071456310.20018@vega.soi.city.ac.uk>,
George <me@me.com> wrote:
I want to draw an image on a JPanel, but without going through the
addition of a new class that would be extending JPanel and would have a
super.paintComponent call in it.
This seems odd. Can you explain further?
I found that I can get a graphics object by doing panelName.getGraphics()
and then I can use that to draw an image using the drawImage method. It
all works (almost), but the image 'flickers' and dissapears rather than
staying on the panel. How can I get this to happen, i.e. keep the image on
the panel?
Concerning paintComponent(): "[I]f you do not invoke super's
implementation you must honor the opaque property, that is if this
component is opaque, you must completely fill in the background in a
non-opaque color. If you do not honor the opaque property you will
likely see visual artifacts." [1]
Perhaps a short example showing the problem would help. [2]
[1]<http://java.sun.com/javase/6/docs/api/javax/swing/JComponent.html>
[2]<http://pscode.org/sscce.html>
John:
I think there is something wrong with the docs there. Why would you
paint a non-opaque color onto an opaque background if the component is
opaque? I've never had to use super.paintComponent() unless I wanted
whatever was drawn by the parent. Do you know how to create these
artifacts? Trying the code below, with any combination of opaque and
super, I see no problems. Of course, I could be missing the point
completely :-).
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class test extends JComponent {
public test() {
setOpaque(true);
}
public void paintComponent(Graphics g) {
// super.paintComponent(g);
g.setColor(Color.BLUE);
g.fillRect(10,10,10,10);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
final JFrame f = new JFrame();
f.getContentPane().setBackground(Color.YELLOW);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
f.dispose();
}
});
f.add(new test(),BorderLayout.CENTER);
f.setSize(240,180);
f.setVisible(true);
}
});
}
}
--
Knute Johnson
email s/nospam/knute2009/
--
Posted via NewsDemon.com - Premium Uncensored Newsgroup Service
------->>>>>>http://www.NewsDemon.com<<<<<<------
Unlimited Access, Anonymous Accounts, Uncensored Broadband Access