Drawing on Tabs  
Author Message
SkippyBoy





PostPosted: 2006-12-3 4:49:00 Top

java-programmer, Drawing on Tabs Hi all - I have an application where my main frame has a tabbed interface,
and each tab has a JPanel.

I would like to draw a line graph on the second tab (the first tab is where
data is entered) and a bar graph on the second tab.

The problem I have is how to draw on the second or 3rd tabs.

I googled and one solution was to subclass the JPanel and then override the
paintComponent() method. I tried but it doesn't seem to work. I am probably
just doing it wrong.

How would I go about defining/extending the JPanel class? or is there some
other container that would serve this purpose better?

Any help is appreciated.

(remove the +NOSPAM from my email address...)
 
Daniel Dyer





PostPosted: 2006-12-3 6:34:00 Top

java-programmer >> Drawing on Tabs On Sat, 02 Dec 2006 20:49:18 -0000, SkippyBoy
<skippyboy2005+email***@***.com> wrote:

> Hi all - I have an application where my main frame has a tabbed
> interface,
> and each tab has a JPanel.
>
> I would like to draw a line graph on the second tab (the first tab is
> where
> data is entered) and a bar graph on the second tab.
>
> The problem I have is how to draw on the second or 3rd tabs.
>
> I googled and one solution was to subclass the JPanel and then override
> the
> paintComponent() method. I tried but it doesn't seem to work. I am
> probably
> just doing it wrong.
>
> How would I go about defining/extending the JPanel class? or is there
> some
> other container that would serve this purpose better?
>
> Any help is appreciated.

Sub-classing JComponent directly is probably more appropriate. Even
easier is using a ready-made library such as JFreechart.

You might get better advice from comp.lang.java.gui (this reply is
cross-posted with follow-ups set to comp.lang.java.gui only).

Dan.

--
Daniel Dyer
http://www.uncommons.org
 
Knute Johnson





PostPosted: 2006-12-3 8:05:00 Top

java-programmer >> Drawing on Tabs SkippyBoy wrote:
> Hi all - I have an application where my main frame has a tabbed interface,
> and each tab has a JPanel.
>
> I would like to draw a line graph on the second tab (the first tab is where
> data is entered) and a bar graph on the second tab.
>
> The problem I have is how to draw on the second or 3rd tabs.
>
> I googled and one solution was to subclass the JPanel and then override the
> paintComponent() method. I tried but it doesn't seem to work. I am probably
> just doing it wrong.
>
> How would I go about defining/extending the JPanel class? or is there some
> other container that would serve this purpose better?
>
> Any help is appreciated.
>
> (remove the +NOSPAM from my email address...)

This is how I would do it. You will need to make it look better but the
big pieces are all here.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class test {
public static void main(String[] args) {
Runnable r = new Runnable() {
public void run() {
class ChartPanel extends JPanel {
private int value = 0;

public ChartPanel() {
setPreferredSize(new Dimension(200,150));
}

public void setValue(int v) {
value = v;
}

public void paintComponent(Graphics g) {
int w = getWidth();
int h = getHeight();
g.setColor(Color.WHITE);
g.fillRect(0,0,w,h);
g.setColor(Color.BLUE);
g.drawString("100%",0,10);
g.drawString("0%",0,h);
g.fillRect(w/3,h - (h * value / 100),
w/3,h * value / 100);
}
}
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

final ChartPanel cp = new ChartPanel();
SpinnerNumberModel nm =
new SpinnerNumberModel(0,0,100,1);
JSpinner sp = new JSpinner(nm);
sp.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent ce) {
JSpinner sp = (JSpinner)ce.getSource();
cp.setValue(
((Integer)sp.getValue()).intValue());
}
});
JTabbedPane tp = new JTabbedPane();
tp.add(sp,"Changer");
tp.add(cp,"Chart");

f.add(tp);
f.pack();
f.setVisible(true);
}
};
EventQueue.invokeLater(r);
}
}

--

Knute Johnson
email s/nospam/knute/
 
 
SkippyBoy





PostPosted: 2006-12-4 1:52:00 Top

java-programmer >> Drawing on Tabs SkippyBoy wrote:
<snip>


Thanks for the quick replies. I think I have it working now... It seems my
approach was wrong. Here is how I got it to work the way I needed.
1. Turned off the computer
2. Had <sufficient # of beers> to feel better about life.
3. Had a nice steak dinner.
4. Turned computer back on
5. It worked!

I guess what happened was I was running the wrong version or something. I
kept making changes, and I guess I saved them in the wrong place. Anyway -
once I rebooted and tried again - it just worked.

I think I will apply my new 5 step approach more often...