funcion - llenar jtable con arraylist java
sobre el ancho de la columna de una JTable en un JScrollPane (5)
Como dicen otros colaboradores, debes establecer los anchos preferido, mínimo y máximo. Aquí puede encontrar un ejemplo en el que la columna 0 crece y la columna 1 tiene un ancho fijo:
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);
Quiero configurar cada columna de una JTable en un JScrollPane con un ancho de infoTable.getColumnModel().getColumn(0).setPreferredWidth(10);
fijo, pero no puedo hacerlo con infoTable.getColumnModel().getColumn(0).setPreferredWidth(10);
utilizo el diseño predeterminado de JScrollPane y agrego la tabla con setViewPortView (infoTable) de scrollPane en j2se 1.4. ¿Cómo puedo hacer esto? aquí está mi código
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);
}
PD. Thx para responder necesito que la columna se pueda arrastrar para cambiar el tamaño, por lo que no puedo establecer el tamaño máximo y mínimo
En general, solo necesita establecer el ancho preferido. Pero para lograr su objetivo, primero necesita saber los anchos predeterminados y cómo se usan para determinar el tamaño predeterminado real:
min = 15
preferred = 75
max = Integer.MAX_VALUE
Entonces no puedes usar 10 a menos que también cambies el ancho mínimo.
Tomemos un caso simple donde su ancho preferido es 25 para la columna 1 y el panel de desplazamiento es 500. Por lo tanto, el ancho preferido de las dos columnas es 100 (25 + 75). Los 400 píxeles adicionales se asignan de manera uniforme entre las dos columnas, por lo que las columnas se mostrarán a 225 (25 + 200) y 275 (75 + 200). Por lo tanto, de forma predeterminada, no puede mostrar la primera columna en 25 píxeles, a menos que también configure la segunda columna en 475.
Si desea que todas las columnas se muestren en sus anchos preferidos, entonces necesita usar:
table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );
Establezca también el ancho mínimo y máximo de la columna igual que el establecido con setPreferredWidth.
infoTable.getColumnModel().getColumn(0).setMinWidth(10);
infoTable.getColumnModel().getColumn(0).setMaxWidth(10);
infoTable.getColumnModel().getColumn(0).setPreferredWidth(10);
Tenga en cuenta que setWidth()
"no se debe usar para establecer los anchos de las columnas en JTable, use setPreferredWidth()
lugar". Además, evite restricciones múltiples y conflictivas. Demasiados confundirán tu intento. A menudo, un solo setPreferredSize()
será suficiente, como se sugiere a continuación.
Tenga en cuenta que algunas características cambiaron por énfasis.
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://.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();
}
});
}
}
Utilizar:
setWidth(int i)
junto con:
setMaxWidth(int i)
setMinWidth(int i)
Úselo solo en caso de que quiera establecer un ancho fijo para la columna y desee que permanezca así incluso si la tabla cambia de tamaño o ubicación.
setPreferredWidth(10)
es solo una recomendación para el administrador de diseño.