Solved

scroll bars in swing

Posted on 2003-12-03
2
763 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 125 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

What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

Join & Write a Comment

Suggested Solutions

How to install Selenium IDE and loops for quick automated testing. Get Selenium IDE from http://seleniumhq.org (http://seleniumhq.org) Go to that link and select download selenium in the right hand columnThat will then direct you to their downlo…
Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
This video teaches viewers about errors in exception handling.
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …

709 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

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now