📄 serverlisttable.java
字号:
/* * JMule - Java file sharing client * Copyright (C) 2007-2008 JMule team ( jmule@jmule.org / http://jmule.org ) * * Any parts of this program derived from other projects, or contributed * by third-party developers are copyrighted by their respective authors. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */package org.jmule.ui.swing.tables;import java.awt.BorderLayout;import java.awt.Component;import java.awt.GridLayout;import java.awt.Toolkit;import java.awt.datatransfer.Clipboard;import java.awt.datatransfer.ClipboardOwner;import java.awt.datatransfer.DataFlavor;import java.awt.datatransfer.Transferable;import java.awt.datatransfer.UnsupportedFlavorException;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.io.IOException;import java.net.URL;import java.util.Hashtable;import java.util.List;import java.util.Map;import javax.swing.Icon;import javax.swing.JButton;import javax.swing.JDialog;import javax.swing.JFrame;import javax.swing.JMenuItem;import javax.swing.JPanel;import javax.swing.JPopupMenu;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.SwingConstants;import javax.swing.table.DefaultTableColumnModel;import javax.swing.table.DefaultTableModel;import javax.swing.table.TableCellRenderer;import javax.swing.table.TableColumn;import javax.swing.table.TableColumnModel;import javax.swing.table.TableModel;import org.jdesktop.swingx.JXTable;import org.jdesktop.swingx.table.TableColumnExt;import org.jmule.core.JMRunnable;import org.jmule.core.JMThread;import org.jmule.core.JMuleCore;import org.jmule.core.JMuleCoreFactory;import org.jmule.core.edonkey.ServerManager;import org.jmule.core.edonkey.ServerManagerFactory;import org.jmule.core.edonkey.impl.ED2KServerLink;import org.jmule.core.edonkey.impl.Server;import org.jmule.countrylocator.CountryLocator;import org.jmule.ui.FlagPack;import org.jmule.ui.IDialog;import org.jmule.ui.UIConstants;import org.jmule.ui.localizer._;import org.jmule.ui.maintabs.serverlist.INewServerDialog;import org.jmule.ui.swing.ImgRep;import org.jmule.ui.swing.SwingGUIUpdater;import org.jmule.ui.swing.SwingUtils;import org.jmule.ui.swing.maintabs.serverlist.SNewServerDialog;import org.jmule.ui.swing.maintabs.serverlist.ServerDetailsDialog;import org.jmule.ui.swing.models.ServerListTableModel;import org.jmule.ui.utils.NumberFormatter;import org.jmule.util.GeneralComparator;/** * * @author javajox * @version $$Revision: 1.4 $$ * Last changed by $$Author: javajox $$ on $$Date: 2008/10/18 17:42:46 $$ */public class ServerListTable extends JMTable { CountryLocator country_locator = CountryLocator.getInstance(); // =============== Column cell renderers ============================== class ServerNameTableCellRenderer extends ServerListTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); if(!server.isDown()) if(server.isConnected()) this.setIcon(ImgRep.getIcon("server_connected.png")); else this.setIcon(ImgRep.getIcon("server.png")); else this.setIcon(ImgRep.getIcon("server_error.png")); URL flag_icon_url = FlagPack.getFlagAsURLByIP(server.getAddress(), FlagPack.FlagSize.S18x25); String name = ( server.getName() != "" ) ? server.getName() : null; String ip = ( server.getAddress() != "" ) ? server.getAddress() : null; String ver = ( server.getVersion() != "") ? " ver. " + server.getVersion() + "<br>" : null; String desc = ( server.getDesc() != "" ) ? server.getDesc() : null; String ping = ( server.getPing() > 0 ) ? "<tr><td>Ping</td><td>" + server.getPing() + "</td></tr>" + "" : null; String users = ( server.getNumUsers() > 0 ) ? "<tr><td>Users</td><td>" + NumberFormatter.formatSizeHumanReadable(server.getNumUsers()) + " (max " + NumberFormatter.formatSizeHumanReadable(server.getMaxUsers()) +")"+ "</td></tr>" + "" : null; //String max_users = ( server.getMaxUsers() > 0 ) ? server.getMaxUsers() + "" : null; String files = ( server.getNumFiles() > 0 ) ? "<tr><td>Files</td><td>" + NumberFormatter.formatSizeHumanReadable(server.getNumFiles()) + " Limits [soft: " + NumberFormatter.formatSizeHumanReadable(server.getSoftLimit()) + ", hard: " + NumberFormatter.formatSizeHumanReadable(server.getHardLimit()) +"]" +"</td></tr>" + "" : null; //String soft_limit = ( server.getSoftLimit() > 0 ) ? server.getSoftLimit() + "" : null; //String hard_limit = ( server.getHardLimit() > 0 ) ? server.getHardLimit() + "" : null; //String down = ( server.isDown() ? "<tr><td>Status</td><td><font color=\"red\"><b>DOWN</b></font></td></tr>" : null ); this.setText(" " + server.getName()); String text = "<html>" + "<body " + (server.isDown()?"color=\"#c0c0c0\"":"") + ">" + ( name != null ? name : "" ) + ( ver != null ? ver : "" ) + ( desc != null ? desc : "" ) + "<hr>" + "<table>" + ( ( ip != null || flag_icon_url != null ) ? ("<tr><td>IP</td><td>" + ( flag_icon_url != null ? "<img src=\""+flag_icon_url+"\"> " : "" ) + ( ip != null ? ip : "") + "</td></tr>") : "" ) + ( ping != null ? ping : "" ) + ( users != null ? users : "" ) + ( files != null ? files : "" ) + "</table>"+ "</body>" + "</html>"; //System.out.println(text); this.setToolTipText(text); this.setHorizontalAlignment(SwingConstants.LEFT); return this; } } // -------------------------------------------------------------------------- class CCTableCellRenderer extends ServerListTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); this.setHorizontalAlignment(SwingConstants.CENTER); this.setText(!country_locator.isServiceDown() ? country_locator.getCountryCode(server.getAddress()) : "Unknown"); if( !country_locator.isServiceDown() ) this.setToolTipText(country_locator.getCountryName(server.getAddress())); return this; } } // --------------------------------------------------------------------------- class FlagTableCellRenderer extends ServerListTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); this.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); Icon flag_icon = FlagPack.getFlagAsIconByIP(server.getAddress(), FlagPack.FlagSize.S25x15); if( flag_icon != null ) this.setIcon(flag_icon); if( !country_locator.isServiceDown() ) this.setToolTipText(country_locator.getCountryName(server.getAddress())); return this; } } // -------------------------------------------------------------------------- class StaticTableCellRenderer extends ServerListTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); this.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); this.setText(server.isStatic()?"Yes":"No"); return this; } } // --------------------------------------------------------------------------- class DescTableCellRenderer extends ServerListTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); this.setHorizontalAlignment(SwingConstants.LEFT); this.setText(" " + server.getDesc()); this.setToolTipText(server.getDesc()); return this; } } // --------------------------------------------------------------------------- class PingTableCellRenderer extends ServerListTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); this.setText(server.getPing() + " "); this.setHorizontalAlignment(SwingConstants.RIGHT); return this; } } // ----------------------------------------------------------------------------- class UsersTableCellRenderer extends ServerListTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); this.setText(NumberFormatter.formatSizeHumanReadable(server.getNumUsers()) + " "); this.setHorizontalAlignment(SwingConstants.RIGHT); return this; } } // ------------------------------------------------------------------------------- class MaxUsersTableCellRenderer extends ServerListTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); this.setText(NumberFormatter.formatSizeHumanReadable(server.getMaxUsers()) + " "); this.setHorizontalAlignment(SwingConstants.RIGHT); return this; } } // -------------------------------------------------------------------------------- class FilesTableCellRenderer extends ServerListTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); this.setText(NumberFormatter.formatSizeHumanReadable(server.getNumFiles()) + " "); this.setHorizontalAlignment(SwingConstants.RIGHT); return this; } } // -------------------------------------------------------------------------------- class SoftLimitTableCellRenderer extends ServerListTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); this.setText(NumberFormatter.formatSizeHumanReadable(server.getSoftLimit()) + " "); this.setHorizontalAlignment(SwingConstants.RIGHT); return this; } } // ---------------------------------------------------------------------------------- class HardLimitTableCellRenderer extends ServerListTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); this.setText(NumberFormatter.formatSizeHumanReadable(server.getHardLimit()) + " "); this.setHorizontalAlignment(SwingConstants.RIGHT); return this; } } // ----------------------------------------------------------------------------------- class VersionTableCellRenderer extends ServerListTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); this.setHorizontalAlignment(SwingConstants.LEFT); this.setText(" "+server.getVersion()); return this; } } // ------------------------------------------------------------------------------------ class IPTableCellRenderer extends ServerListTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); this.setHorizontalAlignment(SwingConstants.LEFT); this.setText(" "+server.getAddress() + ":" + server.getPort()); return this; } } // -------------------------------------------------------------------------------------- class DownTableCellRenderer extends ServerListTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); this.setText(server.isDown()?"Yes":"No"); this.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); return this; } } private JMuleCore _core = JMuleCoreFactory.getSingleton(); private ServerManager _server_manager = _core.getServerManager(); private final Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); private ServerListTableModel server_list_model; private SwingGUIUpdater _gui_updater = SwingGUIUpdater.getInstance(); private final JXTable _this; private ServerDetailsDialog server_details; public ServerListTable(JFrame parent) { super(parent); init(); _this = this; } //public void refresh() { //_this.updateUI(); // TableModel model = _this.getModel(); //((AbstractTableModel)model).fireTableDataChanged(); //TableModel model = _this.getModel(); //((AbstractTableModel)model).fireTableRowsUpdated( // 0, model.getRowCount() ); // repaint(); //} private void init() { // Create columns for server manager TableColumnExt name = new TableColumnExt(); name.setIdentifier(UIConstants.SERVER_LIST_NAME_COLUMN_ID); name.setModelIndex(ServerListTableModel.SERVER_NAME); name.setVisible(_pref.isColumnVisible(UIConstants.SERVER_LIST_NAME_COLUMN_ID)); name.setHeaderValue("Name"); name.setCellRenderer(new ServerNameTableCellRenderer()); name.setComparator(new GeneralComparator("getName")); table_columns.add(name); //server_tab_column_model.addColumn( name ); TableColumnExt cc = new TableColumnExt(); cc.setIdentifier(UIConstants.SERVER_LIST_CC_COLUMN_ID); cc.setModelIndex(ServerListTableModel.CC); cc.setVisible(_pref.isColumnVisible(UIConstants.SERVER_LIST_CC_COLUMN_ID)); cc.setHeaderValue("CC"); cc.setCellRenderer(new CCTableCellRenderer()); table_columns.add(cc); TableColumnExt flag = new TableColumnExt(); flag.setIdentifier(UIConstants.SERVER_LIST_FLAG_COLUMN_ID); flag.setModelIndex(ServerListTableModel.FLAG); flag.setVisible(_pref.isColumnVisible(UIConstants.SERVER_LIST_FLAG_COLUMN_ID)); flag.setHeaderValue("Flag"); flag.setCellRenderer(new FlagTableCellRenderer()); table_columns.add(flag); TableColumnExt ip = new TableColumnExt(); ip.setModelIndex(ServerListTableModel.SERVER_IP); ip.setIdentifier(UIConstants.SERVER_LIST_IP_COLUMN_ID); ip.setVisible(_pref.isColumnVisible(UIConstants.SERVER_LIST_IP_COLUMN_ID)); ip.setHeaderValue("IP"); ip.setCellRenderer(new IPTableCellRenderer());
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -