{Kurung Kurawal}

Java Swing, Menyembunyikan Kolom pada JTable

Menyembunyikan kolom pada JTable dapat dilakukan dengan membuat lebar dari kolom tersebut menjadi 0. Kolom pada JTable adalah sebuah class TableColumn tersendiri, yang harus diakses dari object JTable yang bersangkutan.

Berikut contoh aplikasi yang dapat mengimplementasikan penyembunyian kolom dari JTable.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package com.kurungkurawal;
 
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
/**
 * Created with IntelliJ IDEA.
 * Author   : ali LIM ( konglie@outlook.com )
 * Website  : http://www.konglie.web.id
 * Date     : 12/11/2014
 * Time     : 9:48 AM
 * PERIZINAN
 * Saya bukan Pengacara yang mengerti Bahasa Hukum,
 * Namun, program ini saya berikan untuk tujuan pembelajaran
 * dan bagian atau seluruh code di file ini
 * TIDAK BOLEH didistribusikan untuk tujuan komersil atau
 * berbayar, tanpa izin tertulis dari saya.
 * LICENSE
 * I am not a lawyer, but part of or all of this source code
 * MAY NOT be distributed for commercial purpose, without
 * written permission from me.
 */
public class JTableHideColumn {
 
    private JFrame win;
    private JPanel body;
    private JTable table;
    private JComboBox selector;
    private String[] cols = new String[]{"Kolom 1", "Kolom 2", "Kolom 3", "Kolom 4"};
    public void launch(){
        win = new JFrame("Hide JTable Column");
        win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        win.setMinimumSize(new Dimension(400, 300));
 
        Border padding = BorderFactory.createEmptyBorder(10,10,10,10);
        body = new JPanel(new BorderLayout());
        body.setBorder(padding);
        win.getContentPane().add(body);
 
        DefaultTableModel model = new DefaultTableModel(null, cols);
 
        table = new JTable(model){
            public boolean isCellEditable(int x, int y){
                return false;
            }
        };
        table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
 
        JScrollPane scroll = new JScrollPane(table);
        body.add(scroll, BorderLayout.CENTER);
 
        JLabel lbl = new JLabel("<html><center>copyright 2014<br/>lee@konglie.web.id</center></html>");
        lbl.setHorizontalAlignment(SwingConstants.CENTER);
        body.add(lbl, BorderLayout.SOUTH);
 
 
        String[] sample;
        for(int i = 1; i <= 20; i++){
            sample = new String[ cols.length ];
            for(int j = 1; j <= cols.length; j++){
                sample[ j - 1 ] = String.format("Kolom %s baris %s", j, i);
            }
            model.addRow(sample);
        }
 
        selector = new JComboBox();
        selector.setEditable(false);
        body.add(selector, BorderLayout.NORTH);
 
        selector.addItem("Pilih Kolom yang ingin di-hide");
        for(int j = 1; j <= cols.length; j++){
            selector.addItem(cols[ j - 1 ]);
        }
        selector.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                hideCol(selector.getSelectedIndex());
            }
        });
 
        win.pack();
        win.setVisible(true);
        win.setLocationRelativeTo(null);
    }
 
    private void hideCol(int col){
        System.out.println(col);
        // show all
        for(int j = 0; j < cols.length; j++){
            table.getColumnModel().getColumn(j).setMinWidth(Integer.MIN_VALUE);
            table.getColumnModel().getColumn(j).setMaxWidth(Integer.MAX_VALUE);
        }
 
        if(col > 0){
            col = col - 1;
            table.getColumnModel().getColumn(col).setMinWidth(0);
            table.getColumnModel().getColumn(col).setMaxWidth(0);
        }
 
        table.doLayout();
        win.pack();
    }
}

Method inti dari tutorial ini adalah

1
2
JTableObject.getColumnModel().getColumn(int_col).setMinWidth(0);
JTableObject.getColumnModel().getColumn(int_col).setMaxWidth(0);

Dengan membuat lebar maksimal dari sebuah kolom menjadi 0, maka otomatis kolom tersebut tidak akan muncul.
Demo aplikasi dapat didownload disini.

Semoga dapat berguna.