setvalueat llenar funcion editar editable con columna chuidiang celdas bloquear java swing jtable jscrollpane jtableheader

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.