É possível congelar a 1a coluna de um JTable (swing) ? [Semi-resolvido]  XML
Índice dos Fóruns » Interface Gráfica
Autor Mensagem
julianostr
GUJ Ranger
[Avatar]

Membro desde: 31/03/2006 14:16:14
Mensagens: 855
Localização: Blumenau - SC
Offline

Apesar de já ter achado esse assunto aqui (ano passado), o pessoal não continuou o tópico então resolvi criar um novo.

Gostaria de saber se existe uma maneira de congelar apenas a primeira coluna de um JTable (de 6 colunas por exemplo), não permitindo que o usuário arraste ela para outra ordem/posição e permitindo o scroll de rolagem das outras colunas .

Sei que têm como congelar a table inteira, mas apenas 1 coluna não sei..
<< jtable.getTableHeader().setReorderingAllowed(false); >>

Já conversei com um colega sobre isso e ele me disse que eu teria que "customizar" o JTable. Seria isso mesmo?

This message was edited 3 times. Last update was at 25/03/2008 16:12:33


LASER
Light Amplification by Stimulated Emission of Radiation
julianostr
GUJ Ranger
[Avatar]

Membro desde: 31/03/2006 14:16:14
Mensagens: 855
Localização: Blumenau - SC
Offline

Exemplo paliativo:

package com.gui;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableColumnModel;

public class FixedColumnScrollPane extends JScrollPane
{
public FixedColumnScrollPane(JTable main, int fixedColumns)
{
super( main );

// Use the table to create a new table sharing
// the DataModel and ListSelectionModel

JTable fixed = new JTable( main.getModel() );
fixed.setFocusable( false );
fixed.setSelectionModel( main.getSelectionModel() );
fixed.getTableHeader().setReorderingAllowed( false );
// fixed.getTableHeader().setResizingAllowed( false );
fixed.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
main.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);

// Remove the fixed columns from the main table

for (int i = 0; i < fixedColumns; i++)
{
TableColumnModel columnModel = main.getColumnModel();
columnModel.removeColumn( columnModel.getColumn( 0 ) );
}

// Remove the non-fixed columns from the fixed table

while (fixed.getColumnCount() > fixedColumns)
{
TableColumnModel columnModel = fixed.getColumnModel();
columnModel.removeColumn( columnModel.getColumn( fixedColumns ) );
}

// Add the fixed table to the scroll pane

fixed.setPreferredScrollableViewportSize(fixed.getPreferredSize());
setRowHeaderView( fixed );
setCorner(JScrollPane.UPPER_LEFT_CORNER, fixed.getTableHeader());
}

public static void main(String[] args)
{
// Build your table normally

JTable table = new JTable(10, ;
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
JScrollPane scrollPane= new FixedColumnScrollPane(table, 1 );
//
JFrame frame = new JFrame("Table Fixed Column Demo");
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.getContentPane().add( scrollPane );
frame.setSize(400, 300);
frame.setVisible(true);
}
}


Fonte: http://forum.java.sun.com/thread.jspa?threadID=601267&messageID=3222198

This message was edited 1 time. Last update was at 25/03/2008 16:07:37


LASER
Light Amplification by Stimulated Emission of Radiation
Lao
JavaChild

Membro desde: 22/04/2005 12:00:58
Mensagens: 121
Offline

Exatamente cara.Se você quer que um componente funcione de um modo customizado para seu aplicativo você provávelmente vai ter que customizá-lo.
Dê uma olhada no código fonte dos Models utilizados pela JTable pra você ver o que eles fazem e o que você provávelmente irá ter que fazer.
DefaultTableMode, JTableHeader, DefaultTableColumnModel........
[MSN]
jorgefrancisco
JavaBaby
[Avatar]

Membro desde: 12/04/2007 23:03:49
Mensagens: 77
Offline

Olá Juliano..

Já briguei muito com esse problema, pois eu não queria utilizar duas jtable (como no exemplo que você mostrou acima), porém foi o único jeito que consegui (e olha q pesquisei muito )

Realmente ainda não possui um método do tipo: jTable.setCongelar(numCol) hehe...

abraços!
root_
JavaGuru
[Avatar]

Membro desde: 05/09/2006 15:46:19
Mensagens: 206
Localização: Gurupi - Tocantins
Offline

espero que com isso vc resolva:
http://weblogs.java.net/blog/elevy/archive/2009/01/freezable_jtabl.html

Rogério Milhomens de Queiroz
Agile - Consultoria em Tecnologia da Informação!
http://www.agilecti.com.br
Dataview - Inteligência em Tecnologia!
http://www.dataview.com.br
[Email] [WWW] [MSN]
PadrE
JavaEvangelist
[Avatar]

Membro desde: 03/04/2006 00:01:40
Mensagens: 410
Offline

Galera,


Estou precisando desse efeito de 'congelar painéis' no JTable, mas queria saber se a única solução é criando 2 JTables mesmo, ou se depois de 2 anos temos algum componente mais completo?

É até engraçado, quando me pediram isso pensei comigo em usar 2 JTables, mas achei que seria uma solução meio antiga e que deveria ter algo mais "encapsulado"...


Vlw

PadrecO
"O conhecimento o libertará !"
 
Índice dos Fóruns » Interface Gráfica
Ir para:   
Powered by JForum 2.1.8 © JForum Team