无法获取隐藏的JTable列 [英] Unable to get hidden JTable column

查看:52
本文介绍了无法获取隐藏的JTable列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用了一个带有两个按钮(有效和无效按钮)的JTable.当我单击非活动按钮时,我将隐藏表的第一列.另外,当我单击活动"按钮时,我也会尝试显示第一列.但是问题是,当我点击活动"按钮时,我无法显示其首选大小的第一栏.

这是隐藏第一列的代码,

  expTable.getColumnModel().getColumn(0).setMinWidth(0);expTable.getColumnModel().getColumn(0).setMaxWidth(0);expTable.getColumnModel().getColumn(0).setWidth(0); 

这是找回第一栏的代码,

  expTable.getColumnModel().getColumn(0).setMinWidth(0);expTable.getColumnModel().getColumn(0).setMaxWidth(300);expTable.getColumnModel().getColumn(0).setWidth(100); 

首先,我单击非活动"按钮,然后单击活动"按钮.但这是行不通的.

对以上操作有任何想法.

  private void inactiveButtonActionPerformed(java.awt.event.ActionEvent evt){expTable.getColumnModel().getColumn(0).setMinWidth(0);expTable.getColumnModel().getColumn(0).setMaxWidth(0);expTable.getColumnModel().getColumn(0).setWidth(0);}私有void activeButtonActionPerformed(java.awt.event.ActionEvent evt){expTable.getColumnModel().getColumn(0).setMinWidth(0);expTable.getColumnModel().getColumn(0).setMaxWidth(300);expTable.getColumnModel().getColumn(0).setWidth(100);} 

解决方案

过去,当我需要做类似的事情时,我只是删除并重新添加了 TableColumn

这是这个概念的一个很原始的例子...

  import java.awt.BorderLayout;导入java.awt.EventQueue;导入java.awt.event.ActionEvent;导入java.awt.event.ActionListener;导入javax.swing.JFrame;导入javax.swing.JPanel;导入javax.swing.JScrollPane;导入javax.swing.JTable;导入javax.swing.JToggleButton;导入javax.swing.UIManager;导入javax.swing.UnsupportedLookAndFeelException;导入javax.swing.table.DefaultTableModel;导入javax.swing.table.TableColumn;导入javax.swing.table.TableColumnModel;公共班级主要{公共静态void main(String [] args){新的Main();}公共Main(){EventQueue.invokeLater(new Runnable(){@Override公共无效run(){尝试 {UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());} catch(ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex){ex.printStackTrace();}JFrame frame = new JFrame("Testing");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.add(new TestPane());frame.pack();frame.setLocationRelativeTo(null);frame.setVisible(true);}});}公共类TestPane扩展了JPanel {公共TestPane(){setLayout(new BorderLayout());DefaultTableModel模型=新的DefaultTableModel();model.addColumn("Column 1");model.addColumn("Column 2");model.addColumn("Column 3");model.addColumn(第4栏");model.setRowCount(100);JTable表=新的JTable(模型);添加(新的JScrollPane(table));JToggleButton toggle =新的JToggleButton("Toggle");toggle.addActionListener(new ActionListener(){私有TableColumn列;@Override公共无效actionPerformed(ActionEvent e){TableColumnModel columnModel = table.getColumnModel();如果(toggle.isSelected()){列= columnModel.getColumn(0);table.getColumnModel().removeColumn(column);} else if(column!= null){columnModel.addColumn(column);columnModel.moveColumn(columnModel.getColumnCount()-1,0);}}});添加(切换,BorderLayout.SOUTH);}}} 

我实际上花了一些时间来定制一个 TableModel ,它提供了隐藏和显示列的功能,基本上将这个功能包装在一个很好的可重用包中

I use a JTable with two buttons(Active & Inactive Buttons) . When I click on the Inactive button I hide the first column of the table. Also I try to show the first column when I click on the Active button. But the problem is , when I click on the Active button I couldn't display the first column with its preferred size .

This is the code for hide the first column,

expTable.getColumnModel().getColumn(0).setMinWidth(0);
expTable.getColumnModel().getColumn(0).setMaxWidth(0);
expTable.getColumnModel().getColumn(0).setWidth(0); 

This is the code for get back fist column,

expTable.getColumnModel().getColumn(0).setMinWidth(0);
expTable.getColumnModel().getColumn(0).setMaxWidth(300);
expTable.getColumnModel().getColumn(0).setWidth(100);

First I click on the Inactive button and then I click on the Active button . But this is not working .

Have any idea to how to do above .

private void inactiveButtonActionPerformed(java.awt.event.ActionEvent evt){                                                   
     expTable.getColumnModel().getColumn(0).setMinWidth(0);
     expTable.getColumnModel().getColumn(0).setMaxWidth(0);
     expTable.getColumnModel().getColumn(0).setWidth(0);
  }


private void activeButtonActionPerformed(java.awt.event.ActionEvent evt)                                             
    {                                                 
        expTable.getColumnModel().getColumn(0).setMinWidth(0);
        expTable.getColumnModel().getColumn(0).setMaxWidth(300);
        expTable.getColumnModel().getColumn(0).setWidth(100);
    }

解决方案

In the past when I've need to do something like, I've simply removed and re-added the TableColumn

This is a pretty crude example of the concept...

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JToggleButton;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;

public class Main {
    public static void main(String[] args) {
        new Main();
    }
    public Main() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            setLayout(new BorderLayout());
            DefaultTableModel model = new DefaultTableModel();
            model.addColumn("Column 1");
            model.addColumn("Column 2");
            model.addColumn("Column 3");
            model.addColumn("Column 4");
            model.setRowCount(100);

            JTable table = new JTable(model);
            add(new JScrollPane(table));

            JToggleButton toggle = new JToggleButton("Toggle");
            toggle.addActionListener(new ActionListener() {
                private TableColumn column;
                @Override
                public void actionPerformed(ActionEvent e) {
                    TableColumnModel columnModel = table.getColumnModel();
                    if (toggle.isSelected()) {
                        column = columnModel.getColumn(0);
                        table.getColumnModel().removeColumn(column);
                    } else if (column != null) {
                        columnModel.addColumn(column);
                        columnModel.moveColumn(columnModel.getColumnCount() - 1, 0);
                    }
                }
            });
            add(toggle, BorderLayout.SOUTH);
        }

    }
}

I actually spent sometime putting together a custom TableModel which provide the ability to hide and show columns, which basically wrapped this functionality up in a nice reusable package

这篇关于无法获取隐藏的JTable列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆