- 浏览: 135187 次
- 性别:
- 来自: 福建省莆田市
文章分类
最新评论
-
houruiming:
tks for your info which helps m ...
setcontent和setcontentobject用的是同一片内存 -
turingfellow:
in.tftpd -l -s /home/tmp -u ro ...
commands -
turingfellow:
LINUX下的网络设置 ifconfig ,routeLINU ...
commands -
turingfellow:
安装 linux loopbackyum install um ...
commands
<html><head><title>
jadex.examples.booktrading.common
</title></head><body>
This package contains classes used by buyer and seller agents of the
booktrading scenario.
</body></html>
package jadex.examples.booktrading.common;
import jadex.adapter.fipa.AgentDescription;
import jadex.adapter.fipa.SearchConstraints;
import jadex.runtime.IGoal;
import jadex.runtime.Plan;
/**
*/
public class FindServiceProvidersPlan extends Plan
{
/**
* The body method is called on the
* instatiated plan instance from the scheduler.
*/
public void body()
{
AgentDescription dfadesc = (AgentDescription)getParameter("description").getValue();
SearchConstraints constraints = new SearchConstraints();
constraints.setMaxResults(-1);
// Use a subgoal to search at the df.
IGoal ft = createGoal("df_search");
ft.getParameter("description").setValue(dfadesc);
ft.getParameter("constraints").setValue(constraints);
dispatchSubgoalAndWait(ft);
AgentDescription[] result = (AgentDescription[])ft.getParameterSet("result").getValues();
if(result.length > 0)
{
for(int i = 0; i < result.length; i++)
{
getParameterSet("result").addValue(result[i].getName());
}
}
else
{
fail();
}
}
}
package jadex.examples.booktrading.common;
import jadex.runtime.*;
import jadex.util.SGUI;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.*;
import java.text.*;
import java.util.*;
import java.util.List;
/**
* The gui allows to add and delete buy or sell orders and shows open and
* finished orders.
*/
public class Gui extends JFrame
{
//-------- attributes --------
private String itemlabel;
private String goalname;
private String addorderlabel;
private IExternalAccess agent;
private List orders = new ArrayList();
private JTable table;
private DefaultTableModel detailsdm;
private AbstractTableModel items = new AbstractTableModel()
{
public int getRowCount()
{
return orders.size();
}
public int getColumnCount()
{
return 7;
}
public String getColumnName(int column)
{
switch(column)
{
case 0:
return "Title";
case 1:
return "Start Price";
case 2:
return "Limit";
case 3:
return "Deadline";
case 4:
return "Execution Price";
case 5:
return "Execution Date";
case 6:
return "State";
default:
return "";
}
}
public boolean isCellEditable(int row, int column)
{
return false;
}
public Object getValueAt(int row, int column)
{
Object value = null;
Order order = (Order)orders.get(row);
if(column == 0)
{
value = order.getTitle();
}
else if(column == 1)
{
value = new Integer(order.getStartPrice());
}
else if(column == 2)
{
value = new Integer(order.getLimit());
}
else if(column == 3)
{
value = order.getDeadline();
}
else if(column == 4)
{
value = order.getExecutionPrice();
}
else if(column == 5)
{
value = order.getExecutionDate();
}
else if(column == 6)
{
value = order.getState();
}
return value;
}
};
private DateFormat dformat = new SimpleDateFormat("yyyy/MM/dd HH:mm");
//-------- constructors --------
/**
* Create a gui.
* @param agent The external access.
* @param buy The boolean indicating if buyer or seller gui.
*/
public Gui(final IExternalAccess agent, final boolean buy)
{
super((buy ? "Buyer: " : "Seller: ") + agent.getAgentIdentifier().getName());
this.agent = agent;
if(buy)
{
itemlabel = " Books to buy ";
goalname = "purchase_book";
addorderlabel = "Add new purchase order";
}
else
{
itemlabel = " Books to sell ";
goalname = "sell_book";
addorderlabel = "Add new sell order";
}
JPanel itempanel = new JPanel(new BorderLayout());
itempanel.setBorder(new TitledBorder(new EtchedBorder(), itemlabel));
this.table = new JTable(items);
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer()
{
public Component getTableCellRendererComponent(JTable table,
Object value, boolean selected, boolean focus, int row,
int column)
{
Component comp = super.getTableCellRendererComponent(table,
value, selected, focus, row, column);
setOpaque(true);
if(column == 0)
{
setHorizontalAlignment(LEFT);
}
else
{
setHorizontalAlignment(RIGHT);
}
if(!selected)
{
Object state = items.getValueAt(row, 6);
if(Order.DONE.equals(state))
{
comp.setBackground(new Color(211, 255, 156));
}
else if(Order.FAILED.equals(state))
{
comp.setBackground(new Color(255, 211, 156));
}
else
{
comp.setBackground(table.getBackground());
}
}
if(value instanceof Date)
{
setValue(dformat.format(value));
}
return comp;
}
});
table.setPreferredScrollableViewportSize(new Dimension(600, 120));
JScrollPane scroll = new JScrollPane(table);
itempanel.add(BorderLayout.CENTER, scroll);
this.detailsdm = new DefaultTableModel(new String[]{"Negotiation Details"}, 0);
JTable details = new JTable(detailsdm);
details.setPreferredScrollableViewportSize(new Dimension(600, 120));
JPanel dep = new JPanel(new BorderLayout());
dep.add(BorderLayout.CENTER, new JScrollPane(details));
JPanel south = new JPanel();
// south.setBorder(new TitledBorder(new EtchedBorder(), " Control "));
JButton add = new JButton("Add");
final JButton remove = new JButton("Remove");
final JButton edit = new JButton("Edit");
add.setMinimumSize(remove.getMinimumSize());
add.setPreferredSize(remove.getPreferredSize());
edit.setMinimumSize(remove.getMinimumSize());
edit.setPreferredSize(remove.getPreferredSize());
south.add(add);
south.add(remove);
south.add(edit);
remove.setEnabled(false);
edit.setEnabled(false);
JSplitPane splitter = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
splitter.add(itempanel);
splitter.add(dep);
splitter.setOneTouchExpandable(true);
//splitter.setDividerLocation();
this.getContentPane().add(BorderLayout.CENTER, splitter);
this.getContentPane().add(BorderLayout.SOUTH, south);
agent.getBeliefbase().getBeliefSet("orders").addBeliefSetListener(new IBeliefSetListener()
{
public void beliefSetChanged(AgentEvent ae)
{
refresh();
}
public void factAdded(AgentEvent ae)
{
refresh();
}
public void factRemoved(AgentEvent ae)
{
refresh();
}
}, false);
agent.getBeliefbase().getBeliefSet("negotiation_reports")
.addBeliefSetListener(new IBeliefSetListener()
{
public void factAdded(AgentEvent ae)
{
//System.out.println("a fact was added");
refreshDetails();
}
public void factRemoved(AgentEvent ae)
{
//System.out.println("a fact was removed");
refreshDetails();
}
public void beliefSetChanged(AgentEvent ae)
{
//System.out.println("belset changed");
}
}, false);
agent.addAgentListener(new IAgentListener()
{
public void agentTerminating(AgentEvent ae)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
Gui.this.setVisible(false);
}
});
}
}, false);
table.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
refreshDetails();
}
} );
final InputDialog dia = new InputDialog(buy);
add.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
while(dia.requestInput())
{
try
{
String title = dia.title.getText();
int limit = Integer.parseInt(dia.limit.getText());
int start = Integer.parseInt(dia.start.getText());
Date deadline = dformat.parse(dia.deadline.getText());
Order order = new Order(title, deadline, start, limit, buy);
IGoal purchase = Gui.this.agent.createGoal(goalname);
purchase.getParameter("order").setValue(order);
Gui.this.agent.dispatchTopLevelGoal(purchase);
orders.add(order);
items.fireTableDataChanged();
break;
}
catch(NumberFormatException e1)
{
JOptionPane.showMessageDialog(Gui.this, "Price limit must be integer.", "Input error", JOptionPane.ERROR_MESSAGE);
}
catch(ParseException e1)
{
JOptionPane.showMessageDialog(Gui.this, "Wrong date format, use YYYY/MM/DD hh:mm.", "Input error", JOptionPane.ERROR_MESSAGE);
}
}
}
});
table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.getSelectionModel().addListSelectionListener(new ListSelectionListener()
{
public void valueChanged(ListSelectionEvent e)
{
boolean selected = table.getSelectedRow() >= 0;
remove.setEnabled(selected);
edit.setEnabled(selected);
}
});
remove.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
int row = table.getSelectedRow();
if(row >= 0 && row < orders.size())
{
Order order = (Order)orders.remove(row);
items.fireTableRowsDeleted(row, row);
IGoal[] goals = Gui.this.agent.getGoalbase().getGoals(goalname);
for(int i = 0; i < goals.length; i++)
{
if(order.equals(goals[i].getParameter("order").getValue()))
{
goals[i].drop();
break;
}
}
}
}
});
final InputDialog edit_dialog = new InputDialog(buy);
edit.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
int row = table.getSelectedRow();
if(row >= 0 && row < orders.size())
{
Order order = (Order)orders.get(row);
edit_dialog.title.setText(order.getTitle());
edit_dialog.limit.setText(Integer.toString(order.getLimit()));
edit_dialog.start.setText(Integer.toString(order.getStartPrice()));
edit_dialog.deadline.setText(dformat.format(order.getDeadline()));
while(edit_dialog.requestInput())
{
try
{
String title = edit_dialog.title.getText();
int limit = Integer.parseInt(edit_dialog.limit.getText());
int start = Integer.parseInt(edit_dialog.start.getText());
Date deadline = dformat.parse(edit_dialog.deadline.getText());
order.setTitle(title);
order.setLimit(limit);
order.setStartPrice(start);
order.setDeadline(deadline);
items.fireTableDataChanged();
IGoal[] goals = Gui.this.agent.getGoalbase().getGoals(goalname);
for(int i = 0; i < goals.length; i++)
{
if(order.equals(goals[i].getParameter("order").getValue()))
{
goals[i].drop();
break;
}
}
IGoal goal = Gui.this.agent.createGoal(goalname);
goal.getParameter("order").setValue(order);
Gui.this.agent.dispatchTopLevelGoal(goal);
break;
}
catch(NumberFormatException e1)
{
JOptionPane.showMessageDialog(Gui.this, "Price limit must be integer.", "Input error", JOptionPane.ERROR_MESSAGE);
}
catch(ParseException e1)
{
JOptionPane.showMessageDialog(Gui.this, "Wrong date format, use YYYY/MM/DD hh:mm.", "Input error", JOptionPane.ERROR_MESSAGE);
}
}
}
}
});
refresh();
pack();
setLocation(SGUI.calculateMiddlePosition(this));
setVisible(true);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
agent.killAgent();
}
});
}
//-------- methods --------
/**
* Method to be called when goals may have changed.
*/
public void refresh()
{
// Use invoke later as refresh() is called from plan thread.
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
Order[] aorders = (Order[])agent.getBeliefbase().getBeliefSet("orders").getFacts();
for(int i = 0; i < aorders.length; i++)
{
if(!orders.contains(aorders[i]))
{
orders.add(aorders[i]);
}
}
items.fireTableDataChanged();
}
});
}
/**
* Refresh the details panel.
*/
public void refreshDetails()
{
int sel = table.getSelectedRow();
if(sel!=-1)
{
Order order = (Order)orders.get(sel);
IExpression exp = agent.getExpressionbase().getExpression("search_reports");
List res = (List)exp.execute("$order", order);
//for(int i=0; i<res.size(); i++)
// System.out.println(""+i+res.get(i));
while(detailsdm.getRowCount()>0)
detailsdm.removeRow(0);
for(int i=0; i<res.size(); i++)
detailsdm.addRow(new Object[]{res.get(i)});
//System.out.println(""+i+res.get(i));
}
}
//-------- inner classes --------
/**
* The input dialog.
*/
private class InputDialog extends JDialog
{
private JComboBox orders = new JComboBox();
private JTextField title = new JTextField(20);
private JTextField limit = new JTextField(20);
private JTextField start = new JTextField(20);
private JTextField deadline = new JTextField(dformat.format(new Date(System.currentTimeMillis() + 300000)));
private boolean aborted;
InputDialog(boolean buy)
{
super(Gui.this, addorderlabel, true);
if(buy)
{
orders.addItem(new Order("All about agents", new Date(), 100, 120, buy));
orders.addItem(new Order("All about web services", new Date(), 40, 60, buy));
orders.addItem(new Order("Harry Potter", new Date(), 5, 10, buy));
orders.addItem(new Order("Agents in the real world", new Date(), 30, 65, buy));
}
else
{
orders.addItem(new Order("All about agents", new Date(), 130, 110, buy));
orders.addItem(new Order("All about web services", new Date(), 50, 30, buy));
orders.addItem(new Order("Harry Potter", new Date(), 15, 9, buy));
orders.addItem(new Order("Agents in the real world", new Date(), 100, 60, buy));
}
JPanel center = new JPanel(new GridBagLayout());
center.setBorder(new EmptyBorder(5, 5, 5, 5));
getContentPane().add(BorderLayout.CENTER, center);
JLabel label;
Dimension labeldim = new JLabel("Preset orders ").getPreferredSize();
int row = 0;
GridBagConstraints leftcons = new GridBagConstraints(0, 0, 1, 1, 0, 0,
GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(1, 1, 1, 1), 0, 0);
GridBagConstraints rightcons = new GridBagConstraints(1, 0, GridBagConstraints.REMAINDER, 1, 1, 0,
GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(1, 1, 1, 1), 0, 0);
leftcons.gridy = rightcons.gridy = row++;
label = new JLabel("Preset orders");
label.setMinimumSize(labeldim);
label.setPreferredSize(labeldim);
center.add(label, leftcons);
center.add(orders, rightcons);
leftcons.gridy = rightcons.gridy = row++;
label = new JLabel("Title");
label.setMinimumSize(labeldim);
label.setPreferredSize(labeldim);
center.add(label, leftcons);
center.add(title, rightcons);
leftcons.gridy = rightcons.gridy = row++;
label = new JLabel("Start price");
label.setMinimumSize(labeldim);
label.setPreferredSize(labeldim);
center.add(label, leftcons);
center.add(start, rightcons);
leftcons.gridy = rightcons.gridy = row++;
label = new JLabel("Price limit");
label.setMinimumSize(labeldim);
label.setPreferredSize(labeldim);
center.add(label, leftcons);
center.add(limit, rightcons);
leftcons.gridy = rightcons.gridy = row++;
label = new JLabel("Deadline");
label.setMinimumSize(labeldim);
label.setPreferredSize(labeldim);
center.add(label, leftcons);
center.add(deadline, rightcons);
JPanel south = new JPanel();
// south.setBorder(new TitledBorder(new EtchedBorder(), " Control "));
this.getContentPane().add(BorderLayout.SOUTH, south);
JButton ok = new JButton("Ok");
JButton cancel = new JButton("Cancel");
ok.setMinimumSize(cancel.getMinimumSize());
ok.setPreferredSize(cancel.getPreferredSize());
south.add(ok);
south.add(cancel);
ok.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
aborted = false;
setVisible(false);
}
});
cancel.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
setVisible(false);
}
});
orders.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Order order = (Order)orders.getSelectedItem();
title.setText(order.getTitle());
limit.setText("" + order.getLimit());
start.setText("" + order.getStartPrice());
}
});
}
public boolean requestInput()
{
this.deadline.setText(dformat.format(new Date(System.currentTimeMillis() + 300000)));
this.aborted = true;
this.pack();
this.setLocation(SGUI.calculateMiddlePosition(Gui.this, this));
this.setVisible(true);
return !aborted;
}
}
}
/**
* The dialog for showing details about negotiations.
* /
class NegotiationDetailsDialog extends JDialog
{
/**
* Create a new dialog.
* @param owner The owner.
* /
public NegotiationDetailsDialog(Frame owner, List details)
{
super(owner);
DefaultTableModel tadata = new DefaultTableModel(new String[]{"Negotiation Details"}, 0);
JTable table = new JTable(tadata);
for(int i=0; i<details.size(); i++)
tadata.addRow(new Object[]{details.get(i)});
JButton ok = new JButton("ok");
ok.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
NegotiationDetailsDialog.this.setVisible(false);
NegotiationDetailsDialog.this.dispose();
}
});
JPanel south = new JPanel(new FlowLayout(FlowLayout.CENTER));
south.add(ok);
this.getContentPane().add("Center", table);
this.getContentPane().add("South", south);
this.setSize(400,200);
this.setLocation(SGUI.calculateMiddlePosition(this));
this.setVisible(true);
}
}*/package jadex.examples.booktrading.common;
import java.text.SimpleDateFormat;
import java.util.Date;
import jadex.runtime.IGoal;
/**
* A negotiation report contains user-relevant data about negotiations,
* i.e. the order and details about the negotiation and the time.
*/
public class NegotiationReport
{
//-------- attributes --------
/** The order. */
protected Order order;
/** The report. */
protected String details;
/** The negotiation time. */
protected long time;
//-------- constructors --------
/**
* Create a new report.
*/
public NegotiationReport(Order order, String details, long time)
{
this.order = order;
this.details = details;
this.time = time;
}
//-------- methods --------
/**
* Get the order.
* @return The order.
*/
public Order getOrder()
{
return order;
}
/**
* Set the order.
* @param order The order to set.
*/
public void setOrder(Order order)
{
this.order = order;
}
/**
* Get the details.
* @return The details.
*/
public String getDetails()
{
return details;
}
/**
* Set the details.
* @param details The details to set.
*/
public void setDetails(String details)
{
this.details = details;
}
/**
* Get the negotiation time.
* @return The time.
*/
public long getTime()
{
return time;
}
/**
* Set the negotiation time.
* @param time The time to set.
*/
public void setTime(long time)
{
this.time = time;
}
/**
* Get the string representation.
* @return The string representation.
*/
public String toString()
{
//return "NegotiationReport("+order+", "+details+")";
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy.'-'HH:mm:ss ': '");
return sdf.format(new Date(time))+order+" - "+details;
}
}
package jadex.examples.booktrading.common;
import jadex.util.SimplePropertyChangeSupport;
import java.beans.PropertyChangeListener;
import java.util.Date;
/**
* The order for purchasing or selling books.
*/
public class Order
{
//-------- constants --------
/** The state open. */
public static final String OPEN = "open";
/** The state done. */
public static final String DONE = "done";
/** The state failed. */
public static final String FAILED = "failed";
//-------- attributes --------
/** The book title. */
protected String title;
/** The deadline. */
protected Date deadline;
/** The limit price. */
protected int limit;
/** The startprice. */
protected int startprice;
/** The starttime. */
protected long starttime;
/** The execution price. */
protected Integer exeprice;
/** The execution date. */
protected Date exedate;
/** The flag indicating if it is a buy (or sell) order. */
protected boolean buyorder;
/** The helper object for bean events. */
public SimplePropertyChangeSupport pcs;
//-------- constructors --------
/**
* Create a new order.
*
* @param title The title.
* @param deadline The deadline.
* @param limit The limit.
* @param start The start price
*/
public Order(String title, Date deadline, int start, int limit, boolean buyorder)
{
this.title = title;
this.deadline = deadline;
this.startprice = start;
this.limit = limit;
this.buyorder = buyorder;
this.starttime = System.currentTimeMillis();
this.pcs = new SimplePropertyChangeSupport(this);
}
//-------- methods --------
/**
* Get the title.
*
* @return The title.
*/
public String getTitle()
{
return title;
}
/**
* Set the title.
*
* @param title The title.
*/
public void setTitle(String title)
{
String oldtitle = this.title;
this.title = title;
pcs.firePropertyChange("title", oldtitle, title);
}
/**
* Get the deadline.
*
* @return The deadline.
*/
public Date getDeadline()
{
return deadline;
}
/**
* Set the deadline.
*
* @param deadline The deadline.
*/
public void setDeadline(Date deadline)
{
Date olddeadline = this.deadline;
this.deadline = deadline;
pcs.firePropertyChange("deadline", olddeadline, deadline);
}
/**
* Get the limit.
*
* @return The limit.
*/
public int getLimit()
{
return limit;
}
/**
* Set the limit.
*
* @param limit The limit.
*/
public void setLimit(int limit)
{
int oldlimit = this.limit;
this.limit = limit;
pcs.firePropertyChange("limit", oldlimit, limit);
}
/**
* Getter for startprice
*
* @return Returns startprice.
*/
public int getStartPrice()
{
return startprice;
}
/**
* Setter for startprice.
*
* @param startprice The Order.java value to set
*/
public void setStartPrice(int startprice)
{
int oldstartprice = this.startprice;
this.startprice = startprice;
pcs.firePropertyChange("startPrice", oldstartprice, startprice);
}
/**
* Get the start time.
*
* @return The start time.
*/
public long getStartTime()
{
return starttime;
}
/**
* Set the start time.
*
* @param starttime The start time.
*/
public void setStartTime(long starttime)
{
long oldstarttime = this.starttime;
this.starttime = starttime;
pcs.firePropertyChange("startTime", new Long(oldstarttime), new Long(starttime));
}
/**
* Get the execution price.
*
* @return The execution price.
*/
public Integer getExecutionPrice()
{
return exeprice;
}
/**
* Set the execution price.
*
* @param exeprice The execution price.
*/
public void setExecutionPrice(Integer exeprice)
{
Integer oldexeprice = this.exeprice;
this.exeprice = exeprice;
pcs.firePropertyChange("executionPrice", oldexeprice, exeprice);
}
/**
* Get the execution date.
*
* @return The execution date.
*/
public Date getExecutionDate()
{
return exedate;
}
/**
* Set the execution date.
*
* @param exedate The execution date.
*/
public void setExecutionDate(Date exedate)
{
Date oldexedate = this.exedate;
this.exedate = exedate;
pcs.firePropertyChange("executionDate", oldexedate, exedate);
}
/**
* Test if it is a buyorder.
*
* @return True, if buy order.
*/
public boolean isBuyOrder()
{
return buyorder;
}
/**
* Set the order type.
*
* @param buyorder True for buyorder.
*/
public void setBuyOrder(boolean buyorder)
{
boolean oldbuyorder = this.buyorder;
this.buyorder = buyorder;
pcs.firePropertyChange("buyOrder", oldbuyorder ? Boolean.TRUE : Boolean.FALSE, buyorder ? Boolean.TRUE : Boolean.FALSE);
}
/**
* Get the order state.
*
* @return The order state.
*/
public String getState()
{
String state = FAILED;
if(exedate != null)
{
state = DONE;
}
else if(System.currentTimeMillis() < deadline.getTime())
{
state = OPEN;
}
return state;
}
/**
* Get a string representation of the order.
*/
public String toString()
{
StringBuffer sbuf = new StringBuffer();
sbuf.append(isBuyOrder() ? "Buy '" : "Sell '");
sbuf.append(getTitle());
sbuf.append("'");
return sbuf.toString();
}
//-------- property methods --------
/**
* Add a PropertyChangeListener to the listener list.
* The listener is registered for all properties.
*
* @param listener The PropertyChangeListener to be added.
*/
public void addPropertyChangeListener(PropertyChangeListener listener)
{
pcs.addPropertyChangeListener(listener);
}
/**
* Remove a PropertyChangeListener from the listener list.
* This removes a PropertyChangeListener that was registered
* for all properties.
*
* @param listener The PropertyChangeListener to be removed.
*/
public void removePropertyChangeListener(PropertyChangeListener listener)
{
pcs.removePropertyChangeListener(listener);
}
}
发表评论
-
protocols
2011-04-03 19:22 924<!-- The protocols capabilit ... -
dfcap
2011-04-03 19:15 876<!-- The df capability has a ... -
booktrading /seller
2011-03-29 23:19 928<html><head><tit ... -
booktrading / manager
2011-03-29 23:18 1089<html><head><tit ... -
booktrading / buyer
2011-03-29 23:13 846<!-- <H3>The buyer age ... -
tomcat的context说明书
2011-03-20 17:39 803http://tomcat.apache.org/tomcat ... -
msyql的select语法
2010-09-13 22:52 107613.2.7. SELECT语法 13.2.7.1. ... -
zotero与word集成
2010-09-11 08:50 1767Manually Installing the Zotero ... -
university 2/n
2010-08-24 07:54 898Chapter 1.Introduction of regis ... -
university 1/n
2010-08-24 07:53 940chapter? Introduction ?.?The st ... -
Sun Java Bugs that affect lucene
2010-08-23 08:59 735Sometimes Lucene runs amok of b ... -
Snowball分词
2010-08-22 13:07 1226using System; using Lucene.Net. ... -
penn tree bank 6/6
2010-08-20 07:09 91811 This use of 12 Contact the - ... -
penn tree bank 5/n
2010-08-19 07:40 923always errs on the side of caut ... -
penn tree bank 4/n
2010-08-19 07:39 8184. Bracketing 4.1 Basic Methodo ... -
penn tree bank 3/n
2010-08-15 23:31 8192.3.1 Automated Stage. During t ... -
penn tree bank 2/n
2010-08-15 23:30 1505Mitchell P Marcus et al. Buildi ... -
capabilities 3/3
2010-08-11 22:58 77801<capability xmlns="ht ... -
capabilities 2/3
2010-08-11 22:57 740Fig.3.Element creation cases:a) ... -
capabilities 1/3
2010-08-11 22:56 947Extending the Capability Concep ...
相关推荐
【毕业设计】基于yolov9实现目标追踪和计数源码.zip
MATLAB程序:多个无人船 协同围捕控制算法 3船围捕控制,围捕运动船只 可以仿真多个船之间的距离以及距离目标船的距离,特别适合学习、参考
基于线性模型预测控制(LMPC)的四旋翼飞行器(UAV)控制
资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档混合解析和叠加展示风格,请放心使用。 2:32页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解)。 3:34页范例参考毕业论文,万字长文,word文档,支持二次编辑。 4:27页范例参考答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关教程资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于 B/S 网络结构,在IDEA中开发。服务端用 Java 并借 ssm 框架(Spring+SpringMVC+MyBatis)搭建后台。前台采用支持 HTML5 的 VUE 框架。用 MySQL 存储数据,可靠性强。 能学到什么: 学会用ssm搭建后台,提升效率、专注业务。学习 VUE 框架构建交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。
内容概要:本文详细介绍了一种基于 Python 实现无人机自动拍摄的方法,具体涵盖无人机飞行控制系统与摄像头控制的交互流程。主要内容包括:环境搭建、所需第三方库安装、无人机初始化与控制逻辑解析、到达指定地理位置后的摄影动作实现及任务结束后的安全返程指令集发送机制。 适用人群:具有一定编程能力和硬件基础知识的技术爱好者、从事航空影像获取相关领域的工作人员以及自动化设备的研发者。 使用场景及目标:通过本指南可以帮助用户掌握如何构建基本但完整的无人机自动拍摄系统,从而适用于新闻报道、地质勘探、环境监测等多个应用场景中的快速响应数据采集任务。 其他说明:代码实例采用开源软件(如dronekit、opencv等),便于后续开发优化,同时强调了飞行安全性与法律法规遵从的重要意义,鼓励开发者先期模拟测试再逐步应用于实际项目中。
李团结业务招待费申报表20250104.pdf
含前后端源码,非线传,修复最新登录接口 梦想贩卖机升级版,变现宝吸取了资源变现类产品的很多优点,摒弃了那些无关紧要的东西,使本产品在运营和变现能力上,实现了质的超越。多领域素材资源知识变现营销裂变独立版。 实现流量互导,多渠道变现。独立部署,可绑自有独立域名不限制域名。
这是一个基于 Unofficial Airplay 协议规范的 C# 与 Apple TV 连接
【Golang设计模式】使用Golang泛型实现的设计模式(大话设计模式)
【C语言】2019年南航计算机学院操作系统课程的实验代码-实验心得-上机考试练习-笔试复习笔记_pgj
二十.核心动画 - 新年烟花:资源及源码
【毕业设计】Python 图形化麻将游戏 带蒙特卡洛AI源码.zip
离散数学是计算机科学中的一个基础且至关重要的领域,它主要研究不连续的、个体的、离散的数据结构和逻辑关系。02324离散数学自学考试试题集为考研复习提供了宝贵的参考资料,尤其对那些准备复试的学生来说,价值巨大。通过这些试题,考生可以系统地理解和掌握离散数学的基本概念、理论和方法。 离散数学的核心内容包括以下几个方面: 1. **集合论**:集合是最基本的数学概念,离散数学首先会介绍集合的定义、元素关系、集合的运算(如并集、交集、差集、笛卡尔积等)以及集合的性质。此外,还有幂集和良序原理等相关知识。 2. **逻辑与证明**:这包括命题逻辑和一阶逻辑,学习如何使用逻辑符号表达命题,并进行逻辑推理。证明技巧如归纳法、反证法和构造性证明也是重点。 3. **图论**:图是描述对象之间关系的重要工具,学习图的定义、度、路径、环、树等基本概念,以及欧拉图、哈密顿图、最短路径算法等问题。 4. **组合数学**:计数问题是离散数学中的一个重要部分,包括排列、组合、二项式定理、鸽巢原理、容斥原理等。它们。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。
【Golang设计模式】使用Golang泛型实现的设计模式(大话设计模式)_pgj
资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档混合解析和叠加展示风格,请放心使用。 2:32页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解)。 3:34页范例参考毕业论文,万字长文,word文档,支持二次编辑。 4:27页范例参考答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关教程资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于 B/S 网络结构,在 IDEA 中开发。服务端用 Java 并借 ssm 框架(Spring+SpringMVC+MyBatis)搭建后台。用 MySQL 存储数据,可靠性强。 能学到什么: 学会用ssm搭建后台,提升效率、专注业务。学习使用jsp、html构建交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。
全方位讲解三菱Q系列QD173H、QD170运动控制器, 是事频,共25个小时的事频讲解,非常详细。 需要特殊播放器播放,一机一码,必须电脑本地播放,看清楚再拿哦 Q系列运动控制器是比较高级的内容,专门用于运动控制,比如圆弧插补、电子凸轮、同步运动等。 每结课的源程序和QD713H QD170都有,已经配置好了。 如果需要用,根据自己的实际应用稍作修改,灌入PLC就可以。 内容有:QD170 QD713的参数设置、模块介绍和NN通信、指令讲解与JOG编程、opr定位程序初写、QD170M的同步控制、双凸轮控制、凸轮进给、凸轮往复、实模式、虚模式。 可以说这两个模块的所有功能都有讲有。 包括有: 1、PLC源程序 2、QD170 QD713的配置文件 3、事频讲解,专门讲的QD713 这个是Q系列中比较高级的内容,需要比较好的基础 搞定这个15K不是很大的问题,需要好的基础。
资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档混合解析和叠加展示风格,请放心使用。 2:32页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解)。 3:34页范例参考毕业论文,万字长文,word文档,支持二次编辑。 4:27页范例参考答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关教程资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于 B/S 网络结构,在IDEA中开发。服务端用 Java 并借 ssm 框架(Spring+SpringMVC+MyBatis)搭建后台。前台采用支持 HTML5 的 VUE 框架。用 MySQL 存储数据,可靠性强。 能学到什么: 学会用ssm搭建后台,提升效率、专注业务。学习 VUE 框架构建交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。
感应电机 异步电机模型预测电流控制MPCC 感应电机MPCC系统将逆变器电压矢量遍历代入到定子磁链、定子电流预测模型,可得到下一时刻的定子电流,将预测得到的定子电流代入到表征系统控制性能的成本函数,并将令成本函数最小的电压矢量作为输出。 提供对应的参考文献;
资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档混合解析和叠加展示风格,请放心使用。 2:32页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解)。 3:34页范例参考毕业论文,万字长文,word文档,支持二次编辑。 4:27页范例参考答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关教程资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于 B/S 网络结构,在 IDEA 中开发。服务端用 Java 并借 ssm 框架(Spring+SpringMVC+MyBatis)搭建后台。用 MySQL 存储数据,可靠性强。 能学到什么: 学会用ssm搭建后台,提升效率、专注业务。学习使用jsp、html构建交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。
建筑暖通空调与微电网智能控制协同设计(代码)