Win a copy of Programmer's Guide to Java SE 8 Oracle Certified Associate (OCA) this week in the OCAJP forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

JPanel & JScrollPane problem

 
Sree Nivas
Ranch Hand
Posts: 95
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I need a small solution or clue for my current project. If you have any idea pls share with me.
I included a JPanel (which has some graph) in to JScrollPane, and it doesn't display the scrollbars. Why? Can you tell me what could be the reason?
Can we add a container(for ex. JPanel) into JScrollPane?

Here's the code. Anything wrong in this code?

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

public class Test2 extends JFrame{
public Test2() {
JInternalFrame jInternalFrame = new JInternalFrame("Test",true,true,true,true);
JPanel jPanel = new PanelTest();
JScrollPane jScrollPane = new JScrollPane(jPanel,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
jInternalFrame.getContentPane().add(jScrollPane);
getContentPane().add(jInternalFrame);
jInternalFrame.setVisible(true);
setSize(600,600);
setVisible(true);
}

public static void main(String[] args) {
new Test2();
}
}

class PanelTest extends JPanel {

public PanelTest(){}

public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawString("Main Time(us)",30,99);

g.drawString(Integer.toString(1),200,100);
g.drawString(Integer.toString(2),300,100);
g.drawString(Integer.toString(3),400,100);
g.drawString(Integer.toString(4),500,100);
g.drawString(Integer.toString(5),700,100);
g.drawString(Integer.toString(6),900,100);
g.drawString(Integer.toString(7),1000,100);
g.drawString(Integer.toString(8),1100,100);
g.drawLine(100,100,100,900);
}
}
 
Craig Wood
Ranch Hand
Pie
Posts: 1535
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
The first clue comes from adding this inspection line in your Test2 constructor

It gets the actual size of your component (jPanel) after the gui is realized.
In Swing a scrollpane asks its viewport child (the view, here, jPanel) for its preferred size as it gathers information to layout its viewports view. If you want your component to be shown at a size other than the scrollpanes viewport view size you must provide the size information to the scrollpane. You can do this by calling setPreferredSize on the component or by overriding getPreferredSize in the component and returning the desired size. With the code you posted the first option would be the obvious choice:
 
Sree Nivas
Ranch Hand
Posts: 95
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Thanks a lot. It's working fine.

regards
Sreenivas
 
Reyna Estrella
Greenhorn
Posts: 1
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
thks !!! it was that i needed
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic