Re: Horizontally scrolling JTable
- From: RedGrittyBrick <redgrittybrick@xxxxxxxxxxxxx>
- Date: Thu, 29 Mar 2007 14:42:48 +0100
Andrew Thompson wrote:
RedGrittyBrick wrote:Andrew Thompson wrote:RedGrittyBrick wrote: ..
Thanks, that is perfect in all but one respect ... Unfortunately
the table headings no longer show.
I am beginning to think this is a bug, and have started trawling
through the bug D/B looking for similar problems.
Here is a likely looking one, though Sun
marked it 'Closed, not a bug' (shrugs). *
<http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4194022>
using a slight variant of the advice
on that page, I came up with this (very
hackish looking) code that seems to behave
as we might expect..
<snip SSCCE head>
HorizScrollTable() {
setLayout(new BorderLayout());
JTable table = new JTable(data, headings){
Component parent;
public boolean getScrollableTracksViewportWidth(){
return isThinnerThanParent();
}
boolean isThinnerThanParent() {
if (parent==null) {
parent = getParent();
}
Dimension d1 = getSize();
Dimension d2 = parent.getSize();
return (d1.width<=d2.width);
}
};
table.setAutoResizeMode(
JTable.AUTO_RESIZE_ALL_COLUMNS);
JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane, BorderLayout.CENTER);
}
<snip SSCCE tail>
Does that work for you?
Thanks Andrew, yes that works the way I wanted.
Before I read your latest posting I'd also been hunting in the bugs database as you suggested ...
Searching Sun's Bug database led me (eventually) to Bug 4127936 reported 10-APR-1998 and marked "In progress, bug", "Evaluation: ... needs to be fixed before FCS with JDK1.2." :-o
There are several suggested workarounds in the commentary. For future readers of this thread: apart the workaround which Andrew found (see above), another workaround that I tried was ...
....
scrollPane.addComponentListener(new
CorrectStrangeBehaviourListener(table, scrollPane));
....
/**
*
* @author dbeutner 16-MAY-2002
* See Sun Java bug report 4127936.
* Amended 29/3/2007 by RedGrittyBrick to add
* constructor with parameters
*
*/
private class CorrectStrangeBehaviourListener
extends ComponentAdapter {
private JTable table;
private JScrollPane scrollPane;
CorrectStrangeBehaviourListener(JTable table,
JScrollPane scrollPane) {
this.table = table;
this.scrollPane = scrollPane;
}
public void componentResized(ComponentEvent e) {
if (table.getPreferredSize().width
<= scrollPane.getViewport()
.getExtentSize().width) {
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
} else {
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
}
}
}
The one Andrew found is shorter but since I have several tables it may be worth me putting the bulk of the workaround code into a separate class as the above example does.
Thanks again Andrew.
.
- Follow-Ups:
- Re: Horizontally scrolling JTable
- From: Andrew Thompson
- Re: Horizontally scrolling JTable
- References:
- Horizontally scrolling JTable
- From: RedGrittyBrick
- Re: Horizontally scrolling JTable
- From: Andrew Thompson
- Re: Horizontally scrolling JTable
- From: RedGrittyBrick
- Re: Horizontally scrolling JTable
- From: Andrew Thompson
- Re: Horizontally scrolling JTable
- From: RedGrittyBrick
- Re: Horizontally scrolling JTable
- From: Andrew Thompson
- Horizontally scrolling JTable
- Prev by Date: Re: SWT without Eclipse?
- Next by Date: Making color image with transparency into black & white w/transparency
- Previous by thread: Re: Horizontally scrolling JTable
- Next by thread: Re: Horizontally scrolling JTable
- Index(es):
Relevant Pages
|
|