一个可以实现 左右联动JTable 的完全Dialog 实现类似 Excel的冻结第一列 效果

package spasvo . tcder . gui . dialog . impl;

import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.ScrollPaneConstants;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;

import spasvo.tcder.uitl.DialogUtil;

public class CombineConfigDialog extends JDialog {

    private static final long serialVersionUID = 1L;
    private JTable leftColumsTable;
    private JTable rightColumnsTable;

    private static CombineConfigDialog instance = null;
    /** 关系Integer [源:唯一 column,目标:不唯一 row ] a(目标)=b(源) */
    private List < Integer []> relation = new ArrayList < Integer []>();
    /** 需要显示的内容 Object[]{content,TCDImageItem.timeId,userDataBean.timeId} */
    private List < Object []> content = null;

    public static synchronized CombineConfigDialog getInstance() {
        if ( instance == null) {
            instance = new CombineConfigDialog();
        }
        return instance;
    }

    /**
     * 设置需要显示的内容 Object[]{content,TCDImageItem.timeId,userDataBean.timeId}
     *
     * @param data
     * @param rela
     *            关系
     */
    public void updateContent( List < Object []> data , List < Integer []> rela) {
        this . content = data;
        this . relation = rela;
        LeftColumnsTableModel leftModel = ( LeftColumnsTableModel) leftColumsTable
                . getModel();
        leftModel . updataContent( content);
        RightColumnsTableModel rightModel = ( RightColumnsTableModel) rightColumnsTable
                . getModel();
        rightModel . updataContent( content);
        FontMetrics fm = rightColumnsTable . getFontMetrics( rightColumnsTable
                . getFont());
        for ( int i = 0; i < content . size(); i ++) {
            int width = fm . stringWidth( content . get( i )[ 0 ]. toString()) + 10;
            rightColumnsTable . getColumnModel (). getColumn( i ). setMaxWidth( width);
            rightColumnsTable . getColumnModel (). getColumn( i ). setPreferredWidth(
                    width);
        }
    }

    private CombineConfigDialog() {
        setSize( new Dimens
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值