Re: Custom JScrollPane - Double JScrollBars
On Apr 26, 8:51 am, pek <kimwl...@gmail.com> wrote:
On Apr 24, 4:30 pm, "David A. Redick" <tinyweldingto...@gmail.com>
wrote:
You'll have to override the layout manager.
In the example below, I made the scroll pane display 2 vertical bars.
All I did was resize/reposition the viewport, the vertical and the
horizontal bar.
The outer most vertical bar will still act like that standard horiz
bar.
The inner vertical bar will be the same normal vertical bar.
PS.
Are you sure you really need to do this?
I agree with RGB that you sure have a look at the other default panes
just make sure. =/
---------------------------------------------------------
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class MySPLayout extends ScrollPaneLayout
{
public void layoutContainer(Container parent)
{
hsb.setOrientation(JScrollBar.HORIZONTAL);
super.layoutContainer(parent);
Rectangle hRec = hsb.getBounds();
Rectangle vRec = vsb.getBounds();
Dimension size = viewport.getExtentSize();
// adjust viewport size, add to the bottom, sub from right side
size.width -= vRec.width;
size.height += hRec.height;
viewport.setExtentSize(size);
// get rid of the corner
vRec.height += hRec.height;
// scoot over to make room
vsb.setLocation(vRec.x - vRec.width, vRec.y);
vsb.setSize(vRec.width, vRec.height);
hsb.setOrientation(JScrollBar.VERTICAL);
hsb.setLocation(vRec.x, vRec.y);
hsb.setSize(vRec.width, vRec.height);
}
}
public class GUI extends JFrame /* implements ActionListener */
{
// GUI objects
JTextArea m_pText;
JScrollPane m_pScrollPane;
GUI()
{
super("Test GUI");
m_pText = new JTextArea("This is a test.");
m_pText.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
m_pScrollPane = new JScrollPane(m_pText);
m_pScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
m_pScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
m_pScrollPane.setLayout(new MySPLayout());
add(m_pScrollPane);
pack();
}
public void dispose()
{
super.dispose();
}
}
First of all thank you for your replies. To be fair, I'll explain a
little more. I want to create a panel that, when needed, will display
vertical and horizontal bars. When either a horizontal or a vertical
scroll bar appears, I want them to be double (2 horizontal scroll bars
or 2 vertical scroll bars). Both will point at the same view, but each
will behave different (probably one of them will scroll faster or
scroll the other way or anything). I want to explicitly define how
each will behave.
I'll try your code and report back. Thank you once again.
OK.. I must admit, the code was awesome! I didn't imagine what it
would do! Thank you very much.
So, since I don't know how (or even why) this code works, I'll just
post what exactly I want to do and hope that you'll also help me on
this.
I came across Picassa this other day. I'm not actually sure if it was
Picassa, but anyway. I noticed that the vertical scroll bar isn't the
conventional one. It works like this:
Let's say that the viewports' view is three screens high.
The vertical bars' knob is at the middle.
If you drag it either way (up or down) the view scrolls respectively.
The cool the about it is that the further the knob is away from the
starting middle point, the faster the view scrolls.
When the knob isn't anymore dragged (you release the mouse) the knob
returns to it's initial position (the middle).
What I'm trying to accomplish (with no luck what so ever) is have both
scroll bars (conventional and picassa-like) in one pane using code
like JDoubleScrollPane.setPicassaLikeVerticalScrollBarPolicy(...) (OK,
it's rather huge, but I'll a better one). So, the developers and the
end user would have the best of both worlds.
Now, I didn't know where to start. I actually thought I had to create
a new component and implement its' own look and feel. Which goes to
say what is the level of my knowledge in Swing.
So, what do you think? Can you help? Or at least give me some pointers
and hints?
Thank you very much.
Panagiotis.