请问JTABLE如何做到固定行?固定列已经做出来了,但是固定行无论怎样set都做不出来啊。
由于本人的分不多,只能给30分了,但请各位大侠帮忙啊!
由于本人的分不多,只能给30分了,但请各位大侠帮忙啊!
解决方案 »
- classloader的问题
- 死锁的概念不懂
- 经常使用external jar 作为build library 那么jar到底有什么好处??
- 请问如何在Applet打开的JFrame中再打开一个JFrame,让它总是显示到桌面最前面呢?
- 谁能帮我看看(《java编程思想》里的例子)
- applet问题,急!!!
- JBuilder 如何产生Java Application .exe文件??
- 我用了urlConnection对象联接某个http的地址,但是有时候页面会连接很慢,有没有什么办法设定timeout之类的东西,谢谢
- 学习JAVA网络编程需要那些硬件设备?
- weblogic什么时候需要重新启动
- list中选中某一项或某几项,怎样在table或是tableviewer中显示出对应的信息
- Jtable里如何加入jbutton?
重载model中的getValueAt方法即可~
一般情况下返回正常数值
在固定行位置,返回自定义数值即可....
import java.awt.Component;
import java.awt.Point;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JViewport;
import javax.swing.ListSelectionModel;
import java.awt.Rectangle;
import javax.swing.JTable;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.TableColumnModelEvent;
import javax.swing.event.TableColumnModelListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import java.awt.Dimension;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class table_try extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JScrollPane jScrollPane = null;
private JTable jTable = null;
private JTable fix_Ctable = null; // @jve:decl-index=0:visual-constraint="366,45" private JTable fix_Rtable = null; // @jve:decl-index=0:visual-constraint="365,106"
String head1[]={"A","B","C","D","E"}; // @jve:decl-index=0:
String head[]={"行号"};
int rows=15;
DefaultTableModel dtm=null,fix_dtm1=null,fix_dtm2=null,fix_dtm3=null; private JScrollPane jScrollPane1 = null; // @jve:decl-index=0:visual-constraint="377,158" private JTable fix_Ctable1 = null; // @jve:decl-index=0:visual-constraint="371,194"
/**
* This is the default constructor
*/
public table_try() {
super();
initialize();
} /**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(300, 200);
this.setContentPane(getJContentPane());
this.setTitle("JFrame");
} /**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
if (jContentPane == null) {
jContentPane = new JPanel();
//冻结行的关键1
jContentPane.setLayout(new BorderLayout());
jContentPane.add(getJScrollPane(), BorderLayout.CENTER);
jContentPane.add(getJScrollPane1(), BorderLayout.SOUTH);
}
return jContentPane;
} /**
* This method initializes jScrollPane
*
* @return javax.swing.JScrollPane
*/
///jScrollPane添加fix_Ctable与jTable
private JScrollPane getJScrollPane() {
if (jScrollPane == null) {
jScrollPane = new JScrollPane();
jScrollPane.setPreferredSize(new Dimension(400, 100));
//冻结列的关键
jScrollPane.setViewportView(getJTable());
JViewport viewport=new JViewport();
viewport.setView(getFix_Ctable());
viewport.setPreferredSize(fix_Ctable.getPreferredSize());
jScrollPane.setRowHeader(viewport);
jScrollPane.setCorner(JScrollPane.UPPER_LEADING_CORNER,fix_Ctable.getTableHeader());
//冻结行的关键2
jScrollPane.setPreferredSize(new Dimension(400, 52)); // Hmm...
jScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
//jScrollPane滚动时,jScrollPane1的滚动条滚动
JScrollBar bar1 = jScrollPane.getHorizontalScrollBar();
bar1.addAdjustmentListener(new AdjustmentListener() {
public void adjustmentValueChanged(AdjustmentEvent e) {
JScrollBar bar2 =jScrollPane1.getHorizontalScrollBar();
bar2.setValue(e.getValue());
}
});
}
return jScrollPane;
}
/**
* This method initializes jScrollPane1
*
* @return javax.swing.JScrollPane
*/
//jScrollPane1添加fix_Ctable1与fix_Rtable
private JScrollPane getJScrollPane1() {
if (jScrollPane1 == null) {
//行冻结的关键3
jScrollPane1 = new JScrollPane(getFix_Rtable()){
public void setColumnHeaderView(Component view) {} // work around
};
//列冻结关键
JViewport viewport=new JViewport();
viewport.setView(getFix_Ctable1());
viewport.setPreferredSize(fix_Ctable1.getPreferredSize());
jScrollPane1.setRowHeader(viewport);
jScrollPane1.setCorner(JScrollPane.UPPER_LEADING_CORNER,fix_Ctable1.getTableHeader());
//冻结行的关键4
jScrollPane1.setPreferredSize(new Dimension(400, 35));
jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
//jScrollPane1滚动时,jScrollPane的滚动条滚动
JScrollBar bar2 =jScrollPane1.getHorizontalScrollBar();
bar2.addAdjustmentListener(new AdjustmentListener() {
public void adjustmentValueChanged(AdjustmentEvent e) {
JScrollBar bar1 = jScrollPane.getHorizontalScrollBar();
bar1.setValue(e.getValue());
}
}); }
return jScrollPane1;
}
/**
* This method initializes jTable
*
* @return javax.swing.JTable
*/
//jTable
private JTable getJTable() {
if (jTable == null) {
String data[][]=new String[rows][head1.length];
dtm=new DefaultTableModel(data,head1);
jTable = new JTable(dtm);
jTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jTable.getSelectionModel().addListSelectionListener(
new ListSelectionListener(){
public void valueChanged(ListSelectionEvent e) {
checkSelection(false);//列同步
checkSelection1(false);//行同步
// TODO Auto-generated method stub
}
});
//响应列宽事件,当jTable的列宽发生改变的时候,fix_Rtable的列宽也发生改变
jTable.getColumnModel().addColumnModelListener( new TableColumnModelListener()
{ public void columnAdded(TableColumnModelEvent e) {
// TODO Auto-generated method stub
}
public void columnMarginChanged(ChangeEvent e) {
int jtwidth=0,fixwidth=0,i=0;
while(i<jTable.getColumnCount()){
jtwidth=jTable.getColumn(jTable.getColumnName(i)).getWidth();
fixwidth=fix_Rtable.getColumn(fix_Rtable.getColumnName(i)).getWidth();
if(jtwidth!=fixwidth){
fix_Rtable.getColumn(fix_Rtable.getColumnName(i)).setPreferredWidth(jtwidth);
break;
}
i++;
}
// TODO Auto-generated method stub
} public void columnMoved(TableColumnModelEvent e) {
// TODO Auto-generated method stub
} public void columnRemoved(TableColumnModelEvent e) {
// TODO Auto-generated method stub
} public void columnSelectionChanged(ListSelectionEvent e) {
// TODO Auto-generated method stub
}
});
}
return jTable;
} /**
* This method initializes fix_Ctable
*
* @return javax.swing.JTable
*/
//jTable的冻结列fix_Ctable()
private JTable getFix_Ctable() {
if (fix_Ctable == null) {
String data[][]=new String[rows][1];
fix_dtm1=new DefaultTableModel(data,head);
fix_Ctable = new JTable(fix_dtm1);
fix_Ctable.getColumn("行号").setPreferredWidth(38);
fix_Ctable.setSize(new Dimension(174, 45));
fix_Ctable.getSelectionModel().addListSelectionListener(
new ListSelectionListener(){
public void valueChanged(ListSelectionEvent e) {
checkSelection1(true);
// TODO Auto-generated method stub
}
});
}
return fix_Ctable;
} /**
* This method initializes fix_Rtable
*
* @return javax.swing.JTable
*/
//jTable的冻结行fix_Rtable
private JTable getFix_Rtable() {
if (fix_Rtable == null) {
String data[][]=new String[1][1];
fix_dtm2=new DefaultTableModel(data,head1);
fix_Rtable = new JTable(fix_dtm2);
fix_Rtable.setSize(new Dimension(191, 44));
fix_Rtable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
fix_Rtable.getSelectionModel().addListSelectionListener(
new ListSelectionListener(){
public void valueChanged(ListSelectionEvent e) {
checkSelection(true);
// TODO Auto-generated method stub
}
});
fix_Rtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
}
return fix_Rtable;
}
/**
* This method initializes fix_Ctable1
*
* @return javax.swing.JTable
*/
//fix_Rtable的冻结列
private JTable getFix_Ctable1() {
if (fix_Ctable1 == null) {
String data[][]=new String[1][1];
fix_dtm3=new DefaultTableModel(data,head);
fix_Ctable1 = new JTable(fix_dtm3);
fix_Ctable1 .getColumn("行号").setPreferredWidth(38);
fix_Ctable1.setSize(new Dimension(143, 25));
}
return fix_Ctable1;
}
//jTable的行与fix_Ctable的行同步
private void checkSelection1(boolean isFixedTable) {
int fixedSelectedIndex = fix_Ctable.getSelectedRow();
int selectedIndex = jTable.getSelectedRow();
if(fixedSelectedIndex==-1)
fixedSelectedIndex=0;
if(selectedIndex==-1)
selectedIndex=0;
if (fixedSelectedIndex != selectedIndex) {
if (isFixedTable) {
jTable.setRowSelectionInterval(fixedSelectedIndex,
fixedSelectedIndex);
} else {
fix_Ctable
.setRowSelectionInterval(selectedIndex, selectedIndex);
}
}
}
//jTable的列与fix_Rtable同步
private void checkSelection(boolean isFixRtable) {
int fixedSelectedIndex =fix_Rtable.getSelectedColumn();
int selectedIndex = jTable.getSelectedColumn();
if(fixedSelectedIndex==-1)
fixedSelectedIndex=0;
if(selectedIndex==-1)
selectedIndex=0;
if (fixedSelectedIndex != selectedIndex) {
if (isFixRtable) {
jTable.setColumnSelectionInterval(fixedSelectedIndex,
fixedSelectedIndex);
} else {
fix_Rtable
.setColumnSelectionInterval(selectedIndex, selectedIndex);
}
}
// TODO Auto-generated method stub
}
}