elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Consulta sobre JTable
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Consulta sobre JTable  (Leído 2,185 veces)
zonahurbana

Desconectado Desconectado

Mensajes: 178

RS, JC.


Ver Perfil WWW
Consulta sobre JTable
« en: 4 Febrero 2014, 14:16 pm »

He visto que en los JTable es posible agregar datos en las celdas o bloquearlas, pero que aparte de eso, aparecen títulos en las columnas (con un fondo distinto al de las celdas). ¿Es posible agregar además títulos a cada fila?
Es decir, es como crear un cuadro de doble entrada. Quisiera lograr que los datos de calda celda se correspondan con un título de fila (origen) y un título de columna (destino) para organizar datos.


En línea

Nunca dejar de aprender es importante, más allá del ritmo que se siga ...
1mpuls0


Desconectado Desconectado

Mensajes: 1.186


Ver Perfil
Re: Consulta sobre JTable
« Respuesta #1 en: 4 Febrero 2014, 17:18 pm »

Código
  1. import java.awt.*;
  2. import java.awt.event.ActionEvent;
  3. import javax.swing.*;
  4. import javax.swing.UIManager.*;
  5. import javax.swing.event.*;
  6. import javax.swing.table.*;
  7.  
  8. public class JTableRowHeader {
  9.  
  10.    private JFrame frame = new JFrame("JTable RowHeader");
  11.    private JScrollPane scrollPane;
  12.    private JTable table;
  13.    private DefaultTableModel model;
  14.    private TableRowSorter<TableModel> sorter;
  15.    private JTable headerTable;
  16.  
  17.    public JTableRowHeader() {
  18.        table = new JTable(4, 4);
  19.        for (int i = 0; i < table.getRowCount(); i++) {
  20.            table.setValueAt(i, i, 0);
  21.        }
  22.        sorter = new TableRowSorter<TableModel>(table.getModel());
  23.        table.setRowSorter(sorter);
  24.        model = new DefaultTableModel() {
  25.  
  26.            private static final long serialVersionUID = 1L;
  27.  
  28.            @Override
  29.            public int getColumnCount() {
  30.                return 1;
  31.            }
  32.  
  33.            @Override
  34.            public boolean isCellEditable(int row, int col) {
  35.                return false;
  36.            }
  37.  
  38.            @Override
  39.            public int getRowCount() {
  40.                return table.getRowCount();
  41.            }
  42.  
  43.            @Override
  44.            public Class<?> getColumnClass(int colNum) {
  45.                switch (colNum) {
  46.                    case 0:
  47.                        return String.class;
  48.                    default:
  49.                        return super.getColumnClass(colNum);
  50.                }
  51.            }
  52.        };
  53.        headerTable = new JTable(model);
  54.        for (int i = 0; i < table.getRowCount(); i++) {
  55.            headerTable.setValueAt("Row " + (i + 1), i, 0);
  56.        }
  57.        headerTable.setShowGrid(false);
  58.        headerTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
  59.        headerTable.setPreferredScrollableViewportSize(new Dimension(50, 0));
  60.        headerTable.getColumnModel().getColumn(0).setPreferredWidth(50);
  61.        headerTable.getColumnModel().getColumn(0).setCellRenderer(new TableCellRenderer() {
  62.  
  63.            @Override
  64.            public Component getTableCellRendererComponent(JTable x, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
  65.  
  66.                boolean selected = table.getSelectionModel().isSelectedIndex(row);
  67.                Component component = table.getTableHeader().getDefaultRenderer().getTableCellRendererComponent(table, value, false, false, -1, -2);
  68.                ((JLabel) component).setHorizontalAlignment(SwingConstants.CENTER);
  69.                if (selected) {
  70.                    component.setFont(component.getFont().deriveFont(Font.BOLD));
  71.                    component.setForeground(Color.red);
  72.                } else {
  73.                    component.setFont(component.getFont().deriveFont(Font.PLAIN));
  74.                }
  75.                return component;
  76.            }
  77.        });
  78.        table.getRowSorter().addRowSorterListener(new RowSorterListener() {
  79.  
  80.            @Override
  81.            public void sorterChanged(RowSorterEvent e) {
  82.                model.fireTableDataChanged();
  83.            }
  84.        });
  85.        table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
  86.  
  87.            @Override
  88.            public void valueChanged(ListSelectionEvent e) {
  89.                model.fireTableRowsUpdated(0, model.getRowCount() - 1);
  90.            }
  91.        });
  92.        scrollPane = new JScrollPane(table);
  93.        scrollPane.setRowHeaderView(headerTable);
  94.        table.setPreferredScrollableViewportSize(table.getPreferredSize());
  95.        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  96.        frame.add(scrollPane);
  97.        frame.add(new JButton(new AbstractAction("Toggle filter") {
  98.  
  99.            private static final long serialVersionUID = 1L;
  100.            private RowFilter<TableModel, Object> filter = new RowFilter<TableModel, Object>() {
  101.  
  102.                @Override
  103.                public boolean include(javax.swing.RowFilter.Entry<? extends TableModel, ? extends Object> entry) {
  104.                    return ((Number) entry.getValue(0)).intValue() % 2 == 0;
  105.                }
  106.            };
  107.  
  108.            @Override
  109.            public void actionPerformed(ActionEvent e) {
  110.                if (sorter.getRowFilter() != null) {
  111.                    sorter.setRowFilter(null);
  112.                } else {
  113.                    sorter.setRowFilter(filter);
  114.                }
  115.            }
  116.        }), BorderLayout.SOUTH);
  117.        frame.pack();
  118.        frame.setLocation(150, 150);
  119.        frame.setVisible(true);
  120.    }
  121.  
  122.    public static void main(String[] args) {
  123.        try {// UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  124.            for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
  125.                if (info.getName().equals("Nimbus")) {
  126.                    UIManager.setLookAndFeel(info.getClassName());
  127.                    break;
  128.                }
  129.            }
  130.        } catch (Exception e) {
  131.            //e.printStackTrace();
  132.        }
  133.        EventQueue.invokeLater(new Runnable() {
  134.  
  135.            @Override
  136.            public void run() {
  137.                JTableRowHeader TestTableRowHeader = new JTableRowHeader();
  138.            }
  139.        });
  140.    }
  141. }
  142.  

:http://stackoverflow.com/questions/8187639/jtable-with-titled-rows-and-columns/8187799#8187799


En línea

abc
zonahurbana

Desconectado Desconectado

Mensajes: 178

RS, JC.


Ver Perfil WWW
Re: Consulta sobre JTable
« Respuesta #2 en: 5 Febrero 2014, 05:03 am »

¿Así de largo es el código para poder usar títulos en columnas y filas?
¿O este trae consigo otras funcionalidades? Por ejemplo, la parte que indica "Sorter" tal vez sea para ordenar datos o algo así.

Gracias, voy a tratar de entenderlo.
En línea

Nunca dejar de aprender es importante, más allá del ritmo que se siga ...
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
consulta sobre ASP
.NET (C#, VB.NET, ASP)
Dannysoft 2 2,924 Último mensaje 20 Septiembre 2007, 01:52 am
por BADBYTE-K
Como llenar un Jtable con un resultado de una Consulta SQL
Java
Pipo Di Borracho 3 11,809 Último mensaje 24 Octubre 2010, 06:37 am
por Amerikano|Cls
JTable sobre JTable
Java
CartosP 6 3,915 Último mensaje 18 Marzo 2018, 13:44 pm
por CartosP
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines