क्लियोपेट्रा की टिप्पणी पढ़ते हुए (उसके दूसरी बार उसने javax.swing.JXTable पर एक नज़र डालने का सुझाव दिया , और अब मुझे खेद है कि मुझे पहली बार एक नज़र नहीं मिला :)) मेरा सुझाव है कि आप लिंक का पालन करें
मेरे पास एक ही समस्या के लिए यह समाधान था: (लेकिन मेरा सुझाव है कि आप ऊपर दिए गए लिंक का पालन करें) तालिका का आकार बदलने पर, तालिका स्तंभ चौड़ाई को वर्तमान तालिका कुल चौड़ाई में स्केल करें। ऐसा करने के लिए, मैं (सापेक्ष) कॉलम चौड़ाई के लिए ints का एक वैश्विक सरणी का उपयोग करता हूं:
private int[] columnWidths=null;
मैं तालिका स्तंभ चौड़ाई सेट करने के लिए इस फ़ंक्शन का उपयोग करता हूं:
public void setColumnWidths(int[] widths){
int nrCols=table.getModel().getColumnCount();
if(nrCols==0||widths==null){
return;
}
this.columnWidths=widths.clone();
//current width of the table:
int totalWidth=table.getWidth();
int totalWidthRequested=0;
int nrRequestedWidths=columnWidths.length;
int defaultWidth=(int)Math.floor((double)totalWidth/(double)nrCols);
for(int col=0;col<nrCols;col++){
int width = 0;
if(columnWidths.length>col){
width=columnWidths[col];
}
totalWidthRequested+=width;
}
//Note: for the not defined columns: use the defaultWidth
if(nrRequestedWidths<nrCols){
log.fine("Setting column widths: nr of columns do not match column widths requested");
totalWidthRequested+=((nrCols-nrRequestedWidths)*defaultWidth);
}
//calculate the scale for the column width
double factor=(double)totalWidth/(double)totalWidthRequested;
for(int col=0;col<nrCols;col++){
int width = defaultWidth;
if(columnWidths.length>col){
//scale the requested width to the current table width
width=(int)Math.floor(factor*(double)columnWidths[col]);
}
table.getColumnModel().getColumn(col).setPreferredWidth(width);
table.getColumnModel().getColumn(col).setWidth(width);
}
}
मेरे द्वारा कॉल किए जाने वाले डेटा को सेट करते समय:
setColumnWidths(this.columnWidths);
और बदलने पर मैं मेज के माता-पिता को दिए गए घटक घटक को कॉल करता हूं (मेरे मामले में JScrollPane जो मेरी तालिका का कंटेनर है):
public void componentResized(ComponentEvent componentEvent) {
this.setColumnWidths(this.columnWidths);
}
ध्यान दें कि जेट टेबल भी वैश्विक है:
private JTable table;
और यहाँ मैंने श्रोता को सेट किया:
scrollPane=new JScrollPane(table);
scrollPane.addComponentListener(this);