I was able to come up with a solution using this method. Here's how I did it.
I removed the left column from the original table, and added a second table with a dataset comprised only of that column. I positioned it where the left column would have been, so that it almost looks like it is part of the same table. One important step was to remove the vertical scroll bar from the single column table, which I did using JGJohnson's suggestion here. The rest of the steps are only necessary if you need to be able to scroll your table vertically, because the single column table isn't going to automatically scroll with it.
I added a custom property on the main table called "scrollPosition" which is an integer.
Then I added an invisible button and a timer component in the same container as the two tables. The timer has the following properties:
[ul]Delay = 250
Initial Delay = 0
Running? = True
Step By = 1
Bound = 2[/ul]
The Delay can be lowered if scrolling needs to look smoother for your application, or raised if the smoothness doesn't matter
Here is the script on the timer's propertyChange event handler:
[code]if event.propertyName == 'value':
#Get the current position of the main table's scroll bar.
mainTable = event.source.parent.getComponent('tblMain')
scrollBarMain = mainTable.getVerticalScrollBar()
#If the position has changed since last check, click the button to synchronize the left column.
if scrollBarMain.getValue() != mainTable.scrollPosition:
event.source.parent.getComponent('btnScrollSingleColumn').doClick()
mainTable.scrollPosition = scrollBarMain.getValue()[/code]
And here is the script on the button's "actionPerformed" event handler:
[code]#Get the current position of the main table's scroll bar.
mainTable = event.source.parent.getComponent('tblMain')
scrollBarMain= mainTable.getVerticalScrollBar()
#Set the single column table's scroll bar to match the main table.
singleColumnTable = event.source.parent.getComponent('tblSingleColumn')
scrollBarSingleColumn = singleColumnTable.getVerticalScrollBar()
scrollBarSingleColumn.setValue(scrollBarMain.getValue())[/code]
I ended up using a timer for this because I couldn't figure out a way to trigger on the event of the scroll position changing. If I had that trigger/event, it would have been a lot cleaner, I think.