Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #24276

Re: Code Included: Freeze column

Newsgroups comp.lang.java.programmer
Date 2013-06-03 10:18 -0700
References (1 earlier) <nospam-D730B4.16293729052013@news.aioe.org> <b838090c-9d8e-48b2-bc22-582f7c61efb4@googlegroups.com> <nospam-6B3694.21402330052013@news.aioe.org> <3e3557ff-431c-4a9f-bf7c-777eeaeb65f7@w15g2000vbn.googlegroups.com> <nospam-7A73BC.23591631052013@news.aioe.org>
Message-ID <653739d6-b70e-4e57-9af2-2dfaa66fec79@k4g2000yqb.googlegroups.com> (permalink)
Subject Re: Code Included: Freeze column
From Haircuts Are Important <clusardi2k@aol.com>

Show all headers | View raw


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­­der());
   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();
         }
      }
};

Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Code Included: Freeze column Haircuts Are Important <clusardi2k@aol.com> - 2013-05-29 12:55 -0700
  Re: Code Included: Freeze column "John B. Matthews" <nospam@nospam.invalid> - 2013-05-29 16:29 -0400
    Re: Code Included: Freeze column clusardi2k@aol.com - 2013-05-29 23:53 -0700
      Re: Code Included: Freeze column "John B. Matthews" <nospam@nospam.invalid> - 2013-05-30 21:40 -0400
        Re: Code Included: Freeze column Haircuts Are Important <clusardi2k@aol.com> - 2013-05-31 11:19 -0700
          Re: Code Included: Freeze column "John B. Matthews" <nospam@nospam.invalid> - 2013-05-31 23:59 -0400
            Re: Code Included: Freeze column Haircuts Are Important <clusardi2k@aol.com> - 2013-06-03 10:18 -0700
              Re: Code Included: Freeze column Haircuts Are Important <clusardi2k@aol.com> - 2013-06-03 12:48 -0700
              Re: Code Included: Freeze column "John B. Matthews" <nospam@nospam.invalid> - 2013-06-03 23:03 -0400
                Re: Code Included: Freeze column Haircuts Are Important <clusardi2k@aol.com> - 2013-06-04 05:05 -0700
                Re: Code Included: Freeze column "John B. Matthews" <nospam@nospam.invalid> - 2013-06-04 23:04 -0400
                Re: Code Included: Freeze column Haircuts Are Important <clusardi2k@aol.com> - 2013-06-05 11:53 -0700
                Re: Code Included: Freeze column "John B. Matthews" <nospam@nospam.invalid> - 2013-06-05 16:02 -0400
                Re: Code Included: Freeze column Lew <lewbloch@gmail.com> - 2013-06-05 13:09 -0700
                Re: Code Included: Freeze column clusardi2k@aol.com - 2013-06-05 16:27 -0700
                Re: Code Included: Freeze column Lew <lewbloch@gmail.com> - 2013-06-05 17:35 -0700
                Re: Code Included: Freeze column "John B. Matthews" <nospam@nospam.invalid> - 2013-06-06 21:42 -0400
                Re: Code Included: Freeze column Haircuts Are Important <clusardi2k@aol.com> - 2013-06-10 09:34 -0700
                Re: Code Included: Freeze column "John B. Matthews" <nospam@nospam.invalid> - 2013-06-10 13:49 -0400
                Re: Code Included: Freeze column Lew <lewbloch@gmail.com> - 2013-06-04 12:17 -0700
                Re: Code Included: Freeze column Haircuts Are Important <clusardi2k@aol.com> - 2013-06-04 12:54 -0700
                Re: Code Included: Freeze column Lew <lewbloch@gmail.com> - 2013-06-04 14:17 -0700
                Re: Code Included: Freeze column Joerg Meier <joergmmeier@arcor.de> - 2013-06-05 00:12 +0200
                Re: Code Included: Freeze column "John B. Matthews" <nospam@nospam.invalid> - 2013-06-04 21:39 -0400
                Re: Code Included: Freeze column Lew <lewbloch@gmail.com> - 2013-06-04 19:48 -0700
                Re: Code Included: Freeze column Joerg Meier <joergmmeier@arcor.de> - 2013-06-05 07:36 +0200
                Re: Code Included: Freeze column Lew <lewbloch@gmail.com> - 2013-06-04 22:46 -0700
        Re: Code Included: Freeze column Haircuts Are Important <clusardi2k@aol.com> - 2013-05-31 11:35 -0700
          Re: Code Included: Freeze column Lew <lewbloch@gmail.com> - 2013-05-31 11:43 -0700
            Re: Code Included: Freeze column Haircuts Are Important <clusardi2k@aol.com> - 2013-05-31 11:50 -0700
              Re: Code Included: Freeze column Lew <lewbloch@gmail.com> - 2013-05-31 12:37 -0700
                Re: Code Included: Freeze column Haircuts Are Important <clusardi2k@aol.com> - 2013-05-31 12:44 -0700
          Re: Code Included: Freeze column Haircuts Are Important <clusardi2k@aol.com> - 2013-05-31 12:30 -0700

csiph-web