I am trying to show a histogram for a image in jlabel, but its not working.
//hist : array containing histogram values
//wid: width of image
//ht: height of image
mylabel.add(new showData(hist,wid,ht));
The code that I am using to display histogram is:
class showData extends JLabel{
int w,h;
int hist[] = new int[256];
int max_hist=0;
public showData(int[] histValue,int w, int h) {
System.arraycopy(histValue, 0, hist, 0, 256);
this.w = w;
this.h = h;
for (int i = 0; i < 256; i++) {
if(hist[i]>max_hist)
max_hist=hist[i];
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int x = (w - 256) / 2;
int lasty = h - h * hist[0] / max_hist;
for (int i=0; i<256; i++, x++) {
int y = h - h * hist[i] / max_hist;
g.setColor(new Color(i, i, i));
g.fillRect(x, y, 1, h);
g.setColor(Color.red);
g.drawLine(x-1,lasty,x,y);
lasty = y;
}
}
}
When debugged, I found that showData() method was getting invoked, but paintComponent() doesn’t. Why is it so? The Jlabel ‘mylabel’ doesn’t show anything?
The following code works for me. Pay attention to the setting of the preferredSize in the constructor: