我想在JScrollPane中设置一个具有固定num宽度的JTable的每一列,但我不能用infoTable.getColumnModel().getColumn(0).setPreferredWidth(10);
来做
我使用JScrollPane的默认布局,并在j2se 1.4中添加带有scrollPane的setViewPortView(infoTable)的表。
我怎么能这样做?
这是我的代码
private javax.swing.JButton jButton1;
private javax.swing.JScrollPane jScrollPane1;
public TableFrame() {
jScrollPane1 = new javax.swing.JScrollPane();
jButton1 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jScrollPane1.setBorder(javax.swing.BorderFactory.createLineBorder(
new java.awt.Color(0, 0, 0)));
jButton1.setText("jButton1");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
this.setSize(new Dimension(600, 600));
this.jScrollPane1.setSize(500, 500);
this.getContentPane().add(this.jScrollPane1, BorderLayout.CENTER);
this.getContentPane().add(this.jButton1, BorderLayout.WEST);
table = new JTable(new javax.swing.table.DefaultTableModel(100, 2));
this.jScrollPane1.setViewportView(table);
table.getColumnModel().getColumn(0).setWidth(10);
}
PS。回答的问题我需要拖动列来调整大小,所以我无法设置最大和最小尺寸
答案 0 :(得分:8)
还设置列的最小和最大宽度与使用setPreferredWidth设置的相同。
infoTable.getColumnModel().getColumn(0).setMinWidth(10);
infoTable.getColumnModel().getColumn(0).setMaxWidth(10);
infoTable.getColumnModel().getColumn(0).setPreferredWidth(10);
答案 1 :(得分:5)
通常,您只需要设置首选宽度。但要实现目标,首先需要知道默认宽度以及如何使用它们来确定实际的默认大小:
min = 15
preferred = 75
max = Integer.MAX_VALUE
所以你不能使用10,除非你也改变最小宽度。
让我们看一个简单的情况,第1列的首选宽度为25,滚动窗格为500.因此,两列的首选宽度为100(25 + 75)。额外的400像素在两列之间均匀分配,因此列将显示在225(25 + 200)和275(75 + 200)。因此,默认情况下,您不能只显示25像素的第一列,除非您还将第二列设置为475。
如果您希望所有列都以其首选宽度显示,则需要使用:
table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );
答案 2 :(得分:1)
请注意,setWidth()
“不应用于设置JTable中列的宽度,而是使用setPreferredWidth()
。”此外,避免多个冲突的约束。太多会使你的意图混淆。通常,单个setPreferredSize()
就足够了,如下所示。
注意一些功能已更改以供强调。
http://i38.tinypic.com/7281tt.png http://i38.tinypic.com/7281tt.png
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
/** @see http://stackoverflow.com/questions/3448030 */
public class TablePanel extends JPanel {
private JButton button = new JButton("Button");
private JTable table = new JTable(new DefaultTableModel(100, 2));
private javax.swing.JScrollPane jsp = new JScrollPane(table);
public TablePanel() {
super(new BorderLayout());
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(e);
}
});
JPanel panel = new JPanel();
panel.add(button);
this.add(panel, BorderLayout.WEST);
jsp.setBorder(BorderFactory.createLineBorder(Color.red));
jsp.getViewport().setPreferredSize(new Dimension(500, 500));
this.add(jsp, BorderLayout.CENTER);
table.getColumnModel().getColumn(0).setPreferredWidth(6);
table.setGridColor(Color.gray);
}
private void display() {
JFrame f = new JFrame("TablePanel");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(this);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new TablePanel().display();
}
});
}
}
答案 3 :(得分:0)
使用:
setWidth(int i)
与:
结合使用setMaxWidth(int i)
setMinWidth(int i)
仅在您想要为列设置固定宽度并希望它保持这样的情况时使用它,即使表格更改大小或位置也是如此。
setPreferredWidth(10)
只是对布局管理员的推荐。
答案 4 :(得分:0)
正如其他贡献者所说,您必须设置首选,最小和最大宽度。在这里,您可以找到列0增长的示例,第1列具有固定的宽度:
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
final int COLUMN_0_WIDTH = 650;
final int COLUMN_1_WIDTH = 200;
table.getColumnModel().getColumn(0).setPreferredWidth(COLUMN_0_WIDTH);
table.getColumnModel().getColumn(0).setMinWidth(COLUMN_0_WIDTH);
table.getColumnModel().getColumn(0).setMaxWidth(COLUMN_0_WIDTH*3);
table.getColumnModel().getColumn(1).setPreferredWidth(COLUMN_1_WIDTH);
table.getColumnModel().getColumn(1).setMinWidth(COLUMN_1_WIDTH);
table.getColumnModel().getColumn(1).setMaxWidth(COLUMN_1_WIDTH);