1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
| import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.geom.Rectangle2D;
public class TableDemo extends JPanel {
private boolean DEBUG = false;
private int minW = 0;
public static final int AN_W = 50;
public TableDemo() {
super(new GridLayout(1,0));
JTable table = new JTable(new MyTableModel()){
public boolean getScrollableTracksViewportWidth() {
if (autoResizeMode != AUTO_RESIZE_OFF) {
if (getParent() instanceof JViewport) {
return (((JViewport)getParent()).getWidth() > getPreferredSize().width);
}
}
return false;
}
};
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
TableColumn column = null;
for (int i = 0; i < 2; i++) {
column = table.getColumnModel().getColumn(i);
if (i == 0) {
column.setMaxWidth(AN_W);
column.setPreferredWidth(AN_W);
} else {
column.setCellRenderer(new MyCellRenderer());
}
}
JScrollPane scrollPane = new JScrollPane(table);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
add(scrollPane);
}
class MyTableModel extends AbstractTableModel {
private String[] columnNames = {"A/N",
"Title"};
private Object[][] data = {
{new Boolean(false),"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
{new Boolean(false),"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"},
{new Boolean(false),"ccccccccccccc"},
{new Boolean(false),"dddddddddddddddddddddddddd"},
{new Boolean(false),"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"}
};
public int getColumnCount() {
return columnNames.length;
}
public int getRowCount() {
return data.length;
}
public String getColumnName(int col) {
return columnNames[col];
}
public Object getValueAt(int row, int col) {
return data[row][col];
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public boolean isCellEditable(int row, int col) {
if (col > 0) {
return false;
} else {
return true;
}
}
public void setValueAt(Object value, int row, int col) {
data[row][col] = value;
fireTableCellUpdated(row, col);
}
}
class MyCellRenderer extends DefaultTableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column);
Rectangle2D r = getFontMetrics(getFont()).getStringBounds(getText(), getGraphics());
int w = (int)r.getWidth();
if (AN_W+w > minW) {
minW = AN_W + w;
table.getColumnModel().getColumn(column).setMinWidth(w+10);
}
return this;
}
}
public static void main(String[] args) {
//Create and set up the window.
JFrame frame = new JFrame("TableDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create and set up the content pane.
TableDemo newContentPane = new TableDemo();
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);
//Display the window.
frame.pack();
frame.setSize(400,200);
frame.setVisible(true);
}
} |
Partager