Using JViewport with data in 2 classes

  • Thread starter Haircuts Are Important
  • Start date
H

Haircuts Are Important

I've posted this before, but I posted it in a new thread. This is
because the topic has changed to a JViewport question.

In the below project (incomplete code), I have "columnNames" and
"data" defined in 2 classes for 2 separate tables. I go on to define a
JViewport, so that I can scroll vertically in the right table and the
left table will automatically scroll with the right table.

Should I collapse the 2 sets of "columnNames" and "data" into 1 to get
the scrolling that I want.
Thanks,


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

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top