Re: 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/