I am making a swing program in Java. I am instantiating a DemoFrame (inherited from JFrame) in my main class. In this DemoFrame class, I am instantiating a JScrollPane class. The JScrollPane adds a DemoPanel class (inherited off JPanel) which is where the drawing takes place. Then the DemoFrame adds the JScrollPane. I have the view policy set to always view for the scrollbars. The drawing that goes on in DemoPanel is way larger than the window which holds it. However, the problem is that the scroll bars appear but they aren't scrollable. i.e. the program doesnt think that the scrollbars are necessary but displays them because of the always policy. Here's my code:
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.*;
import java.awt.*;
import java.util.*;
import java.io.*;
class DemoFrame extends JFrame
{
private DemoPanel panel;
private int height, width;
private Vector path;
public DemoFrame(Hashtable h, int height, int width, Vector path)
{
super("window");
final int DEFAULT_FRAME_WIDTH = 300;
final int DEFAULT_FRAME_HEIGHT = 300;
this.height = height;
this.width = width;
this.path = path;
// set the size of the frame window
setSize(DEFAULT_FRAME_WIDTH, DEFAULT_FRAME_HEIGHT);
// create and install a "listener object"
// (event handler) to listen for window events
WindowCloser listener = new WindowCloser();
addWindowListener(listener);
// create a panel object and install it in
// the "content pane"
panel = new DemoPanel(h, height, width, path);
JScrollPane js = new JScrollPane(panel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
js.setVisible(true);
js.setOpaque(true);
js.setWheelScrollingEnabled(true);
Container contentPane = getContentPane();
contentPane.add(js, "Center");
this.setVisible(true);
}
}
********************************************************
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.*;
import java.awt.*;
import java.util.*;
import java.io.*;
class DemoPanel extends JPanel
{
private Hashtable h;
private int cellwidth = 10;
private int cellheight = 10;
private int height, width;
private int ULx = 50, ULy = 50;
private Vector path;
public DemoPanel(Hashtable h, int height, int width, Vector path)
{
this.h = h;
this.setVisible(true);
this.setSize(900, 900);
this.height = height;
this.width = width;
this.path = path;
}
public void paint(Graphics g)
{
//paint method
//draws really really big picture
}
}
What should I do?
lj8866
by: TolsPosted on 2003-12-03 at 02:10:20ID: 9865497
Do not override 'paint' method, but 'paintComponent':
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
//draw code
}