?
Solved

scroll bars in swing

Posted on 2003-12-03
2
Medium Priority
?
786 Views
Last Modified: 2013-11-23
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



0
Comment
Question by:lj8866
2 Comments
 
LVL 2

Accepted Solution

by:
Tols earned 500 total points
ID: 9865497
Do not override 'paint' method, but 'paintComponent':

protected void paintComponent(Graphics g)
{
    super.paintComponent(g);
    //draw code
}
0
 
LVL 2

Expert Comment

by:timbauer
ID: 9866044
Tols is right about overriding paintComponent instead.

However, I think your problem might be in the preferred size of your component. Try calling,
setPreferredSize( new Dimension(900,900) );

I think a JScrollPane decides how much space to give your component based on getPreferredSize

getPreferredSize for any JComponent will fetch your saved dimension (900,900). Generally, if a paint delegate decides how much room is needed for getPreferredSize(). The delegate for JPanel computes this based on its layout and children. Since your Demo component has no children its preferred size is computed as (0,0).

Hope this helps.
- Tim
0

Featured Post

VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

How to install Selenium IDE and loops for quick automated testing. Get Selenium IDE from http://seleniumhq.org Go to that link and select download selenium in the right hand column That will then direct you to their download page. From that p…
Java Flight Recorder and Java Mission Control together create a complete tool chain to continuously collect low level and detailed runtime information enabling after-the-fact incident analysis. Java Flight Recorder is a profiling and event collectio…
The viewer will learn how to implement Singleton Design Pattern in Java.
This video teaches viewers about errors in exception handling.
Suggested Courses
Course of the Month12 days, 22 hours left to enroll

579 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question