Re: Code Included: Freeze column
I'm lost here, can you give me more ideas? Problem: Both horizontal
and vertical scrolling works on the right table. But, vertical
scrolling on the right table does not scroll the left table!
On May 31, 11:59 pm, "John B. Matthews" <nos...@nospam.invalid> wrote:
In article
<3e3557ff-431c-4a9f-bf7c-777eeaeb6...@w15g2000vbn.googlegroups.com>,
Haircuts Are Important <clusard...@aol.com> wrote:
Everything seems to work except horizontal scrolling
across the two tables
You can tinker with setAutoResizeMode(); but absent some reason to
the contrary, I usually rely on the default.
Horizontal scrolling is working on the right table, so I don't think I
should be modifying setAutoResizeMode().
For improved visual coherence, the tables can share a selection
model, much as you have done with the scrollbars' BoundedRangeModel:
tableA.setSelectionModel(tableB.getSelectionModel());
Scrolling the right table vertically does not affect the row that is
highlighted.
So applying your idea via the below code is useless!
SharedClass implements ListselectionListener {
public void valueChanged (ListSelectionEvent evt){
int index = evt.getFirstIndex();
System.out.println ("Row = " + index);
}
}
listSelectionModel listSelectionModel = scrollTable.getSelectionModel
();
listSelectionModel.addListSelectionListener(new SharedClass());
scrollTable.setSelectionModel(listSelectionModel);
fixedModel.setSelectionModel (scrollTable.getSelectionModel());
//ORIGINAL CODE BELOW
package test;
public class ATimer {
public sttic void ATimer (){}
public static void startTimer(){
Timer timer;
timer = new Timer ();
timer.schedule (new TheData(),0,5000);
}
}
public class TheData extends TimerTask{//REALLY UNUSED CLASS
public void run(){//Data broken up to send to tables separately
//...
}
}
class Test extends JFrame{
public static FixedModel fixedModel;
public static ModelWithScrollbar mainModel;
public static JTable fixedTable;
public static JTable scrollTable;
public Test (){
ATimer.startTimer(); // Details omitted
this.setVisible(true);
this.setTitle ("An example");
fixedModel = new FixedModel ();
fixedTable = new JTable (fixedModel){
@Override
public void valueChanged(ListSelectionEvent e){
super.valueChanged(e);
checkSelection(true);
}
};
mainModel = new ModelWithScrollbar();
scrollTable = new JTable (mainModel){
@Override
public void valueChanged(ListSelectionEvent e){
super.valueChanged(e);
checkSelection(false);
}
};
Dimension dimension = new Dimension(0,0);
fixedTable.getTableHeader().setPreferredSize(dimension);
scrollTable.getTableHeader().setPreferredSize(dimension);
fixedTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
scrollTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
fixedTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
scrollTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
scrollTable.setFocusable(false);
JScrollPane jScrollPane1 = new JScrollPane(scrollTable);
JViewport viewport = new JViewport();
viewport.setView(fixedTable);
viewport.setPreferredSize(fixedTable,getPreferredSize());
jScrollPane1.setRowHeaderView(viewport);
jScrollPane1.setCorner(JScrollPane.UPPER_LEFT_CORNER,
fixedTable.getTableHea=AD=ADder());
getContentPane().add(jScrollPane1,BorderLayout.CENTER);
}
//Indirectly called via Timer t
public static void add_Rows_To_Tables (){
String[] tmp1 = new String [1]; //A, B, C, D, E ,F etc
String[] tmp2 = new String [10]; //
//...
fixedModel.addRow(Arrays.asList(tmp1));
mainModel.addRow(Arrays.asList(tmp2));
fixedTable.getSelectionMode().setSelectionInterval(
fixedTable.getRowCount () - 1,
fixedTable.getRowCount () - 1);
scrollTable.getSelectionMode().setSelectionInterval(
scrollTable.getRowCount () - 1,
scrollTable.getRowCount () - 1);
fixedTable.scrollRectToVisible(
new Rectangle (
fixedTable.getCellRect(
fixedTable.getRowCount() - 1,
0,
true)));
scrollTable.scrollRectToVisible(
new Rectangle (
scrollTable.getCellRect(
scrollTable.getRowCount() - 1,
0,
true)));
}
private void checkSelection(boolean isFixedTable){
int fixedSelectedIndex = fixedTable.geSelectedRow();
int selectedIndex = scrollTable.getSelectedRow();
if (fixedSelectedIndex != selectedIndex){
if (isFixedTable){
scrollTable.setRowSelectionInterval(fixedSelectedIndex,fixedSelectedIndex);
} else {
fixedTable.setRowSelectionInterval(selectedIndex,selectedIndex);
}
}
}
public static main (String[] args){
Test frame = new Test ();
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
frame.setVisible (true);
}
}
public class FixedModel extends AbstractTableModel{
static public List<String> columnNames = new ArrayList();
static public List<List> data = new ArrayList();
{
for (int i = 0;i < 1; i++){
columnNames.add(" ");
}
}
public void addRow(List rowData){
data.add(rowData);
fireTableRowsInserted(data.size() - 1,data.size() - 1);
}
public int getColumnCount() {
return columnNames.size();
}
public int getRowCount() {
return data.size();
}
@Override
public String getColumnName(int col) {
try {
return columnNames.get(col);
} catch (Exception exception) {
return null;
}
}
public Object getValueAt(int row, int col) {
return data.get(row).get(col);
}
public boolean isCellEditable(int row, int col) {
return false;
}
public Class getColumnClass(int c) {
return getValueAt(0,c).getClass();
}
};
public class ModelWithScrollbar extends AbstractTableModel{
static public List<String> columnNames = new ArrayList();
static public List<List> data = new ArrayList();
{
for (int i = 0;i < 10; i++){
columnNames.add(" ");
}
}
public void addRow(List rowData){
data.add(rowData);
fireTableRowsInserted(data.size() - 1,data.size() - 1);
}
public int getColumnCount() {
return columnNames.size();
}
public int getRowCount() {
return data.size();
}
@Override
public String getColumnName(int col) {
try {
return columnNames.get(col);
} catch (Exception exception) {
return null;
}
}
public Object getValueAt(int row, int col) {
return data.get(row).get(col);
}
public boolean isCellEditable(int row, int col) {
return false;
}
public Class getColumnClass(int c) {
try {
return getValueAt(0,c).getClass();
}
catch (Exception exception) {// MAY LEAD TO ERROR
return this.getClass();
}
}
};