package org.infosec.ismp.applet.manager.component.panel.info.netport; import java.awt.BorderLayout; import java.awt.Dimension; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.swing.BorderFactory; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextField; import org.infosec.ismp.applet.manager.component.panel.component.TitlePanel; import org.infosec.ismp.applet.manager.component.panel.info.AbstractTitlePanel; import org.infosec.ismp.applet.manager.component.panel.utils.SJTUUtils; import twaver.Element; import twaver.MovableFilter; import twaver.SelectableFilter; import twaver.TDataBox; import twaver.TWaverUtil; import twaver.network.TNetwork; import twaver.swing.LabelValueLayout; import twaver.swing.SingleFiledLayout; /** * 网络接口 * 接口 * setPortList * addNetPort * clearPortList */ public class NetPortScrollPanel extends AbstractTitlePanel { private List portList = new ArrayList(); private JPanel netPanel = new JPanel(new SingleFiledLayout()); private JScrollPane pane = new JScrollPane(netPanel); public NetPortScrollPanel() { this.setLayout(new BorderLayout()); setPortList(portList); this.add(pane, BorderLayout.CENTER); } /** * 设置网络端口信息 * portList中存储的数据类型是NetPort * * @param portList */ public void setPortList(List portList) { if (portList == null) { this.portList = new ArrayList(); } else { this.portList = portList; } int size = portList.size(); netPanel.removeAll(); for (int i = 0; i < size; i++) { NetPort netPort = (NetPort) portList.get(i); NetPortPanel port = new NetPortPanel(netPort); netPanel.add(port); } this.validate(); this.repaint(); } /** * 添加网络端口信息。 * * @param netPort */ public void addNetPort(NetPort netPort) { if (portList.contains(netPort)) { return; } portList.add(netPort); NetPortPanel port = new NetPortPanel(netPort); netPanel.add(port); this.validate(); this.repaint(); } /** * 清除所有端口信息。 */ public void clearPortList() { portList = new ArrayList(); netPanel.removeAll(); this.validate(); this.repaint(); } public JPanel getTitlePanel() { return new TitlePanel("网络接口", this); } } /** * 网络端口面板 * */ class NetPortPanel extends JPanel { private NetPort netPort = new NetPort(); private JTextField sendField = SJTUUtils.getTextField(); private JTextField receiveField = SJTUUtils.getTextField(); public NetPortPanel(NetPort netPort) { this.netPort = netPort; initGUI(); sendField.setText(netPort.getSendSpeed() + "kbps"); receiveField.setText(netPort.getReceiveSpeed() + "kbps"); /* *当有数据变化时,更新面板。 */ this.netPort.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { if (TWaverUtil.getPropertyName(evt).equals(NetPort.FILEPREFIX + NetPort.SENDSPEED)) { Double send = (Double) evt.getNewValue(); sendField.setText(send.doubleValue() + "kbps"); } else if (TWaverUtil.getPropertyName(evt).equals(NetPort.FILEPREFIX + NetPort.RECEIVESPEED)) { Double receive = (Double) evt.getNewValue(); receiveField.setText(receive.doubleValue() + "kbps"); } } }); } private void initGUI() { TDataBox box = new TDataBox(); try { box.parse("/org/infosec/ismp/applet/manager/data/port.xml"); } catch (IOException e) { e.printStackTrace(); } JPanel infoPanel = new JPanel(new LabelValueLayout(5, 2, false)); infoPanel.add(SJTUUtils.getLabel("发送速率")); infoPanel.add(sendField); infoPanel.add(SJTUUtils.getLabel("接收速率")); infoPanel.add(receiveField); TNetwork network = new TNetwork(box); network.getToolbar().setVisible(false); network.setPreferredSize(new Dimension(180,100)); network.setMovableFilter(new MovableFilter() { public boolean isMovable(Element arg0) { return false; } }); network.addSelectableFilter(new SelectableFilter() { public boolean isSelectable(Element arg0) { return false; } }); this.setLayout(new SingleFiledLayout()); ////////////// this.add(network); //////////////////// this.add(infoPanel); this.setBorder(BorderFactory.createTitledBorder(netPort.getName())); } }