简体   繁体   中英

How to select either rows or columns in a JTable?

By default, in a JTable, if you select a cell, that cell's entire row is selected. I would like to keep this functionality.

However, the buttons in the header (above each column) do nothing by default. I want to be able to click one of them and have that entire column be highlighted (and I dont want to get rid of the ability to select entire rows by doing this)

How do I go about doing this?

Found another example at https://kodejava.org/how-do-i-allow-row-or-column-selection-in-jtable/ :

"To allow a row selection or a column selection or both row and column selection in JTable component we can turn it on and off by calling the JTable's setRowSelectionAllowed() and JTable's setColumnSelectionAllowed() methods.

Both of these method accept a boolean value indicating whether the selection is allowed or not allowed. Setting both of them to true allow us to select rows and columns from JTable."

package org.kodejava.example.swing;

import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import java.awt.*;

public class TableAllowColumnSelection extends JPanel {
public TableAllowColumnSelection() {
    initializePanel();
}

private void initializePanel() {
    this.setLayout(new BorderLayout());
    this.setPreferredSize(new Dimension(500, 150));

    JTable table = new JTable(new PremiereLeagueTableModel());
    // sets to false to disallow row selection in the table
    // model.
    table.setRowSelectionAllowed(false);

    // Sets to true to allow column selection in the table
    // model.
    table.setColumnSelectionAllowed(true);

    JScrollPane pane = new JScrollPane(table);
    this.add(pane, BorderLayout.CENTER);
}

public static void showFrame() {
    JPanel panel = new TableAllowColumnSelection();
    panel.setOpaque(true);

    JFrame frame = new JFrame("JTable Column Selection");
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    frame.setContentPane(panel);
    frame.pack();
    frame.setVisible(true);
}

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            TableAllowColumnSelection.showFrame();
        }
    });
}

class PremiereLeagueTableModel extends AbstractTableModel {
    // TableModel's column names
    private String[] columnNames = {
        "TEAM", "P", "W", "D", "L", "GS", "GA", "GD", "PTS"
    };

    // TableModel's data
    private Object[][] data = {
        { "Liverpool", 3, 3, 0, 0, 7, 0, 7, 9 },
        { "Tottenham", 3, 3, 0, 0, 8, 2, 6, 9 },
        { "Chelsea", 3, 3, 0, 0, 8, 3, 5, 9 },
        { "Watford", 3, 3, 0, 0, 7, 2, 5, 9 },
        { "Manchester City", 3, 2, 1, 0, 9, 2, 7, 7 }
    };

    public int getRowCount() {
        return data.length;
    }

    public int getColumnCount() {
        return columnNames.length;
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        return data[rowIndex][columnIndex];
    }
 }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM