⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dfgui.java

📁 java实现的P2P多agent中间件
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	  // Column names
		c = childrenTable.getColumn((Object) childrenTable.getColumnName(0));
		c.setHeaderValue((Object) (new String("Agent name")));
		c = childrenTable.getColumn((Object) childrenTable.getColumnName(1));
		c.setHeaderValue((Object) (new String("Addresses")));
		c = childrenTable.getColumn((Object) childrenTable.getColumnName(2));
		c.setHeaderValue((Object) (new String("Resolvers")));
	
		MouseListener mouseListenerChildren = new MouseAdapter()
		{
			public void mouseClicked(MouseEvent e)
			{
				if (e.getClickCount() >= 1)
					parentTable.clearSelection();
				if (e.getClickCount() ==2)
					{
						DFGUIViewAction ac = new DFGUIViewAction(DFGUI.this);
					  ac.actionPerformed(new ActionEvent((Object)this,0, "View"));
					}
			}
		
		};
		
		childrenTable.addMouseListener(mouseListenerChildren);

    pane1 = new JScrollPane();
    pane1.getViewport().setView(childrenTable);
    childrenPanel.add(pane1,BorderLayout.CENTER);
    childrenPanel.setBorder(BorderFactory.createTitledBorder("Children"));
    
    tablePane.setBottomComponent(childrenPanel);
    tablePane.setDividerLocation(150);
    
    
		tabbedPane.addTab("DF Federation",tablePane);
    tabbedPane.addChangeListener(new tabListener());
	
		getContentPane().add(tabbedPane, BorderLayout.CENTER);
		
		////////////////////////
		// Status message
		////////////////////////
		JPanel statusPanel = new JPanel();
		statusPanel.setLayout(new BorderLayout());
		statusPanel.setBorder(BorderFactory.createTitledBorder("Status"));
		statusField= new JTextField();
		statusField.setEditable(false);
		statusPanel.add(statusField, BorderLayout.CENTER);
		getContentPane().add(statusPanel, BorderLayout.SOUTH);
		
		
		////////////////////////////////////////////////////////////////
		// Execute the Close GUI action when the user attempts to close 
		// the DF GUI window using the button on the upper right corner
    		
		addWindowListener(new	WindowAdapter()
		{
			public void windowClosing(WindowEvent e) 
			{
				DFGUICloseGuiAction ac = new DFGUICloseGuiAction(DFGUI.this);
				ac.actionPerformed(new ActionEvent((Object) this, 0, "Close GUI"));
			}
		} );
}
	
/**
Constructor with arguments.
@param a the DFGUIAdapter with which the gui interacts.
*/
public DFGUI(DFGUIAdapter a)
{
	this();
	setAdapter(a);

}
  
	class tabListener implements ChangeListener
  {
  	public void stateChanged(ChangeEvent event)
  	{
  		Object object = event.getSource();
  		if (object == tabbedPane)
  			tabStateChanged(event);
  	
  	}
  	
  	public void tabStateChanged(ChangeEvent event)
  	{
  		int index = tabbedPane.getSelectedIndex();
  		setButton(index);
	  	
  	}
  
  }
  
  /*
  This method must be used after the constructor of the gui 
  to set the object implementing the DFGUIAdapter interface.
  It's necessary to avoid any dipendency between the JADE tools and 
  the class of the domain package.
  */
  public void setAdapter(DFGUIAdapter a)
  {
  	try{
			setTitle(a.getDescriptionOfThisDF().getName().getName() + "- DF Gui");
			myAgent = a;
		}catch(NullPointerException e){
			e.printStackTrace();
			setTitle("Unknown DF - DF Gui");}
    

  }
  
  
 
  /**
  * Use this method to show a message on the DF GUI.
  * @param msg the string to show
  */
  public void showStatusMsg(String msg) {
    statusField.setText(msg);
  }

	private void setButton(int tab)
	{
		switch (tab){
		
			case 0: //setSearch(true);
							setDeregister(true);
							setRegister(true);
							setModify(true);
							setDFfed(true);
							break;
							
			case 1: //setSearch(true);
						  setDeregister(true);
						  setRegister(true);
					    setModify(true);
							setDFfed(true);
							break;
		
		  case 2: //setSearch(true);
							setDeregister(true);
							setRegister(true);
							setModify(false);
              setDFfed(true);
							break;		
		}
	}
	
	private void setRegister(boolean value)
	{
	  regNewB.setEnabled(value);
		dfRegAction.setEnabled(value);

	}
	
	
	private void setModify(boolean value)
	{
		modifyB.setEnabled(value);
	  dfModifyAction.setEnabled(value);

	}
	
	private void setDeregister(boolean value)
	{	
		deregB.setEnabled(value);
	  dfDeregAction.setEnabled(value);

	}
		
	/*private void setSearch(boolean value)
	{
		searchB.setEnabled(value);
		dfSearchAction.setEnabled(value);

	}*/

	private void setDFfed(boolean value)
	{
	  fedDFB.setEnabled(value);
	  dfFedAction.setEnabled(value);
	}
	
	/**
	* This method permits to set the tabben pane to show.
	*/
	public void setTab (String tab, AID df) 
	{
		if (tab.equalsIgnoreCase("Search"))
			{
				tabbedPane.setSelectedIndex(1);
				tabbedPane.setTitleAt(1,"Last Search on "+ df.getName());
			}
			else
			if (tab.equalsIgnoreCase("Federate"))
				tabbedPane.setSelectedIndex(2);
				else
				 tabbedPane.setSelectedIndex(0);
			
	}
	/**
	* Returns the AID of an agent selected from one of the tables shown.
	*/
	
	public AID getSelectedAgentInTable()
	{
		AID out = null;
		int tab = tabbedPane.getSelectedIndex();
		int row = -1;
		if (tab == 0)
		{
			//row = registeredTable.getSelectedRow();
			row = registeredTable.getSelectionModel().getMinSelectionIndex();
		
			if ( row != -1)
				out = registeredModel.getElementAt(row);
				else out = null;
		}
		else
		if ( tab == 1)
		{
			//row = foundTable.getSelectedRow();
			row = foundTable.getSelectionModel().getMinSelectionIndex();
		
			if (row != -1)
				out = foundModel.getElementAt(row);
				else
				out = null;
		}
		else 
		if (tab == 2)
		{
		   //row = parentTable.getSelectedRow();
		   row = parentTable.getSelectionModel().getMinSelectionIndex(); 
		
		   if (row != -1)
		   	out = parentModel.getElementAt(row);
		   	else
		   	{
		   		//row = childrenTable.getSelectedRow();
		   		row = childrenTable.getSelectionModel().getMinSelectionIndex();
		   
		   	  if (row != -1)
		   	  	out = childrenModel.getElementAt(row);
		   	  	else out = null;
		   	}
		   		
		}
	
	
		return out;
	}
	
	/**
	@return an integer according to the tab selected. 
	*/
	public int kindOfOperation()
	{
	
		int out = -1;
		int tab = tabbedPane.getSelectedIndex();

		if (tab == 0)
			out = AGENT_VIEW; //operation from descriptor table
			else if(tab == 1)
				out = LASTSEARCH_VIEW; // operation from lastsearch view 
				else if (tab == 2)
				{
					//int rowSelected = parentTable.getSelectedRow();
					int rowSelected = parentTable.getSelectionModel().getMinSelectionIndex(); 

					if (rowSelected != -1)
						out = PARENT_VIEW; //OPERATION  from  parent table
						else
						{
							//rowSelected = childrenTable.getSelectedRow();
						  rowSelected = childrenTable.getSelectionModel().getMinSelectionIndex();
							if (rowSelected != -1) 
							  out = CHILDREN_VIEW; //OPERATION from children table
						}
				}
		return out;
						
				}
	
	/**
	 Refresh the DF GUI 
	 */
	public void refresh(Iterator AIDOfAllAgentRegistered,Iterator parents,Iterator children) 
	{
		registeredModel.clear();
		for (; AIDOfAllAgentRegistered.hasNext(); )
		    registeredModel.add((AID)AIDOfAllAgentRegistered.next());
		registeredModel.fireTableDataChanged();
		
		parentModel.clear();
		for (; parents.hasNext(); )
			parentModel.add((AID)parents.next());
		parentModel.fireTableDataChanged();
		
		childrenModel.clear();
		for (; children.hasNext(); )
			childrenModel.add((AID)children.next());
		childrenModel.fireTableDataChanged();
		
	  registeredTable.getSelectionModel().clearSelection();
		parentTable.getSelectionModel().clearSelection(); 
		childrenTable.getSelectionModel().clearSelection();
	
		
	}
	
/**
Refresh the search result.
*/
	public void refreshLastSearchResults(List l, AID df){
		
		this.lastDF = df; // the last df used
		
		foundModel.clear();
		lastSearchResults.clear();
		
		Iterator it = l.iterator();
		while(it.hasNext()){
			DFAgentDescription dfd = (DFAgentDescription) it.next();
		  foundModel.add(dfd.getName());
		  lastSearchResults.put(dfd.getName(),dfd);
		}
		foundModel.fireTableDataChanged();
		foundTable.clearSelection();
		
	}
	
	/**
	* Removes an agent from the foundModel and lastSearchResult
	*/
	public void removeSearchResult(AID name)
	{
		foundModel.remove(name);
		foundModel.fireTableDataChanged();
		lastSearchResults.remove(name);
	  foundTable.clearSelection();
	}
	
	/**
	Returns the AID of the last df on which a search operation was made. 
	*/
	
	public AID getLastDF()
	{
		return this.lastDF;
	}
	/**
	* adds a new parent to parentModel
	**/
	public void addParent(AID parentName)
	{
	
		parentModel.add(parentName);
		parentModel.fireTableDataChanged();
	
	}
	
	/**
	* adds a new child to parentModel
	**/
	
	public void addChildren(AID childrenName)
	{
		childrenModel.add(childrenName);
		childrenModel.fireTableDataChanged();
	}
	/**
	* Adds a new agent to registeredModel.
	*/
	public void addAgentDesc(AID name)
	{
	
		registeredModel.add(name);
		registeredModel.fireTableDataChanged();
	
	}
	/**
	* Removes an agent descr from registeredModel and if it was found in a search operation
	* calls <code>removeSearchResult</code>.
	* @see jade.tools.dfgui#removeSearchResult(AID name)
	*/
	public void removeAgentDesc(AID name, AID df)
	{
		registeredModel.remove(name);
		registeredModel.fireTableDataChanged();
		registeredTable.clearSelection();
		//update the foundModel
		try
		{
		  	if(df.equals(lastDF))
				removeSearchResult(name);
		 }catch(Exception e){}
		
	}

	/**
	Removes an agent desc from the childrenModel.
	*/
 public void removeChildren(AID childrenName)
	{
		childrenModel.remove(childrenName);
		childrenModel.fireTableDataChanged();
		childrenTable.clearSelection();
	}
	
	/**
	Removes an agent desc from the parentModel. 
	*/
	public void removeParent(AID parentName)
	{
	
		parentModel.remove(parentName);
		parentModel.fireTableDataChanged();
	  parentTable.clearSelection();
	}
	

	
	/**
	* Shows DF GUI properly
	*/
	public void setVisible(boolean b) 
	{
		
		if(b) 
		{
			Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
			int centerX = (int)screenSize.getWidth() / 2;
			int centerY = (int)screenSize.getHeight() / 2;
			setLocation(centerX - getWidth() / 2, centerY - getHeight() / 2);
		
		}
		super.setVisible(b);
	}

	/**
	*  Performs asynchronous disposal to avoid nasty InterruptedException
  *  printout.
  */
	public void disposeAsync() 
	{

		class disposeIt implements Runnable 
		{
			private Window toDispose;

			public disposeIt(Window w) 
			{
				toDispose = w;
			}

			public void run() 
			{
				toDispose.dispose();
			}

		}

		// Make AWT Event Dispatcher thread dispose DF window for us.
		EventQueue.invokeLater(new disposeIt(this));
	}
 
	
	
	/**
	* This method returns the <code>DFAgentDescription</code> of an agent found in a search operation.
	* @param name The AID of the agent. 
	* @see jade.domain.FIPAAgentManagement.DFAgentDescription
	* @see jade.core.AID
	*/
	public DFAgentDescription getDFAgentSearchDsc(AID name)
	{	
	  return (DFAgentDescription)lastSearchResults.get(name); 	
	}

    /*
     *This method must be called after the constructor to enable the RefreshGui action.
     It's necessary for the DFapplet.
     */
    public void enableRefreshButton(){
	refreshB.setVisible(true);
	refreshItem.setVisible(true);
    }
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -