/* * Copyright 1999-2017 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.alibaba.druid.support.jconsole.model; import java.util.ArrayList; import java.util.LinkedHashMap; import javax.swing.event.TableModelListener; import javax.swing.table.TableModel; /** * 自定义duird监控数据表格模板类 * * @author yunnysunny[yunnysunny@gmail.com] */ public class DruidTableModel implements TableModel { /** 数据内容. */ private ArrayList<LinkedHashMap<String, Object>> list; /** 自定义列名集合. */ private ArrayList<String> showKeys; public DruidTableModel(ArrayList<LinkedHashMap<String, Object>> list){ super(); this.list = list; showKeys = null; } public DruidTableModel(ArrayList<LinkedHashMap<String, Object>> list, ArrayList<String> showKeys){ super(); this.list = list; this.showKeys = showKeys; } @Override public Class<?> getColumnClass(int columnIndex) { return String.class; } /* * 如果设置了列名,就是列名的长度;否则返回数据的第一条LinkedHashmap的长度 * @see javax.swing.table.TableModel#getColumnCount() */ @Override public int getColumnCount() { int colCount = 0; if (showKeys != null) { colCount = showKeys.size(); } else if (list != null) { int listLen = list.size(); if (listLen > 0) { colCount = list.get(0).size(); } } return colCount; } /* * 如果设置了自定义列名,则使用自定义列名,并且在返回前拆除掉'-'前面的内容; * 如果没有设置,则返回第一条内容的LinkedHashMap的键名。 * @see javax.swing.table.TableModel#getColumnName(int) */ @Override public String getColumnName(int columnIndex) { if (showKeys != null && showKeys.size() > 0) { String keyNow = showKeys.get(columnIndex); if (keyNow != null) { return keyNow.substring(keyNow.indexOf('-') + 1, keyNow.length()); } } if (list != null && list.size() > 0) { LinkedHashMap<String, Object> firstElement = list.get(0); Object[] keys = firstElement.keySet().toArray(); return keys[columnIndex].toString(); } return null; } @Override public int getRowCount() { return list.size(); } /* * 如果设置了自定义列名,则返回当前列数对应的列名在LinkedHashMap中对应的值; * 否则,返回当前LinkedHashMap在当前列数位置对应的值。 * @see javax.swing.table.TableModel#getValueAt(int, int) */ @Override public Object getValueAt(int rowIndex, int columnIndex) { if (list != null && rowIndex < list.size()) {// 没有超出最大行数 LinkedHashMap<String, Object> dataNow = list.get(rowIndex); if (showKeys != null) { int titleLen = showKeys.size(); if (titleLen > 0 && columnIndex < titleLen) { return dataNow.get(showKeys.get(columnIndex)); } } else { Object[] values = dataNow.values().toArray(); if (columnIndex < values.length) { return values[columnIndex]; } } } return null; } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } @Override public void addTableModelListener(TableModelListener l) { } @Override public void removeTableModelListener(TableModelListener l) { } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { } }