无论何时调用该方法,我都需要帮助将Object从一个类传递到另一个扩展JFrame的类。到目前为止,这就是我所拥有的。我需要将添加的循环传递给NodeTracker类,并确保它显示添加的对象。
public class Nodes
{
ArrayList<Circle> circles;
ArrayList<Squares> squares;
public Node()
{
circles = new ArrayList<Circles>();
squares = new ArrayList<Squares>();
}
public void addCircle(Circle c)
{
circles.add(c);
// Here I want to implement a method that allows me to pass "c"
// to the NodeTracker
}
}
// All I have so far that opens a blank table.
public class NodeTracker extends JFrame
{
private JPanel topPanel;
private JTable table;
private JScrollPane scrollPane;
public NodeTracker()
{
setTitle("Node Tracker");
setSize(700, 700);
topPanel = new JPanel();
topPanel.setLayout(new BorderLayout());
getContentPane().add(topPanel);
String columns[] = { "Color", "Radius" };
String data[][] =
{
//whenever added, would update
//{circle.color, circle.radius},
//{circle.color, circle.radius}
};
table = new JTable(data, columns);
scrollPane = new JScrollPane(table);
topPanel.add(scrollPane, BorderLayout.CENTER);
}
//Temporary
public static void main( String args[] )
{
NodeTracker mainFrame = new NodeTracker();
mainFrame.setVisible( true );
}
}
非常感谢你。
答案 0 :(得分:2)
//这里我想实现一个允许我将“c”传递给NodeTracker“
的方法
不,你没有。您想实现Observer Pattern。 Nodes
不应该关心谁正在倾听变化,只有在调用addCircle
时才会告诉他们。
这样NodeTracker
会在添加一个圆圈时注意对Nodes
的兴趣,然后能够以某种有意义的方式回复
这是Swing中一个非常关键的概念,并通过它的“监听器”API
实现首先定义interface
,其中描述了Nodes
类将生成的事件
public interface NodesListener {
public void nodesCircleWasAdded(Nodes source, Circle circle);
}
接下来,将对新侦听器的支持添加到Nodes
,允许其他类注册/取消注册兴趣并实际触发事件
public class Nodes {
ArrayList<Circle> circles;
ArrayList<Squares> squares;
private List<NodesListener> listeners;
public Nodes() {
circles = new ArrayList<Circles>();
squares = new ArrayList<Squares>();
listeners = new ArrayList<>(25);
}
public void addNodesListener(NodesListener listener) {
listeners.add(listener);
}
public void addCircle(Circle c) {
circles.add(c);
for (NodesListener listener : listeners) {
listener.nodesCircleWasAdded(this, c);
}
}
}
最后,创建Nodes
的实例或将预先存在的实例传递给该类,并注册您对从中获取通知的兴趣......
public class NodeTracker extends JFrame {
private JPanel topPanel;
private JTable table;
private JScrollPane scrollPane;
private Nodes nodes;
public NodeTracker() {
setTitle("Node Tracker");
setSize(700, 700);
nodes = new Nodes();
nodes.addNodesListener(new NodesListener() {
@Override
public void nodesCircleWasAdded(Nodes source, Circle circle) {
// A circle was added
}
});
topPanel = new JPanel();
topPanel.setLayout(new BorderLayout());
getContentPane().add(topPanel);
String columns[] = {"Color", "Radius"};
String data[][]
= { //whenever added, would update
//{circle.color, circle.radius},
//{circle.color, circle.radius}
};
table = new JTable(data, columns);
scrollPane = new JScrollPane(table);
topPanel.add(scrollPane, BorderLayout.CENTER);
}
//Temporary
public static void main(String args[]) {
NodeTracker mainFrame = new NodeTracker();
mainFrame.setVisible(true);
}
}