【发布时间】:2017-04-25 10:04:00
【问题描述】:
我创建自定义节点,左侧一个圆圈,右侧一个圆圈。
每次连接两个节点时,我都想将Boolean left 或Boolean right 设置为true。当我将两个节点连接到一个节点时,我想将 Boolean right 和 left 都设置为 true。目前我添加了多个条目而不更新我的泛型内容。
我的代码:
public static List<NodeList<Boolean,Boolean,String>> connectList = new ArrayList<NodeList<Boolean,Boolean,String>>();
private String linkedNodeID;
private Boolean right = false;
private Boolean left = false;
以及实际的代码,这里是我通过在leftTrue()/rightTrue() 中添加 always 来犯实际错误的地方:
public void leftTrue(){
left = true;
connectList.add(new NodeList<Boolean, Boolean, String>(left, right, linkedNodeID));
}
public void rightTrue(){
right = true;
connectList.add(new NodeList<Boolean, Boolean, String>(left, right, linkedNodeID));
}
我得到的是:
right connected: false ,left connected: true ,ID: 81def74e-4cb6-428c-b7ca-a57279534814
right connected: true ,left connected: false ,ID: 46514df2-da7a-41e0-bdd7-43e6f15b4220
right connected: true ,left connected: true ,ID: 46514df2-da7a-41e0-bdd7-43e6f15b4220
right connected: true ,left connected: false ,ID: 2e85f320-43cf-4d83-8670-4e917f31cd25
而我想要的是:
right connected: false ,left connected: true ,ID: 81def74e-4cb6-428c-b7ca-a57279534814
right connected: true ,left connected: true ,ID: 46514df2-da7a-41e0-bdd7-43e6f15b4220
right connected: true ,left connected: false ,ID: 2e85f320-43cf-4d83-8670-4e917f31cd25
知道如何在不向我的列表中添加另一个条目的情况下设置左/右连接吗?
编辑:
public void registerSource(String linkId, DragNode linkNode) {
linkedNodeID = linkNode.getId();
double nodeWidth1 = linkNode.getWidth()/2;
if(DragNode.linkNodeOneX <= nodeWidth1){
leftTrue();
}else{
rightTrue();
}
}
public void registerTarget(String linkId, DragNode linkNode) {
linkedNodeID = linkNode.getId();
double nodeWidth2 = linkNode.getWidth()/2;
if( DragNode.linkNodeTwoX < nodeWidth2){
leftTrue();
testprint();
}else{
rightTrue();
}
}
EDIT2:
我的问题是,每当我调用leftTrue(); 时,我都会创建一个新的connectList.add(new NodeList<Boolean, Boolean, String>(left, right, linkedNodeID)); 条目,但如果我的列表中已经有一个ID,它应该更新left 或right。有任何想法吗?比如connectList.get(i).getL();,然后如果这等于另一个Id,就设置right/false = true;
EDIT3:
public void leftTrue(){
left = true;
}
public void rightTrue(){
right = true;
}
public void registerSource(String linkId, DragNode linkNode) {
linkedNodeID = linkNode.getId();
double nodeWidth1 = linkNode.getWidth()/2;
if(DragNode.linkNodeOneX <= nodeWidth1){
leftTrue();
}else{
rightTrue();
}
if(left || right){
connectList.add(new NodeList<Boolean, Boolean, String>(left, right, linkedNodeID));
left = false;
right = false;
}
}
public void registerTarget(String linkId, DragNode linkNode) {
linkedNodeID = linkNode.getId();
double nodeWidth2 = linkNode.getWidth()/2;
if( DragNode.linkNodeTwoX < nodeWidth2){
leftTrue();
}else{
rightTrue();
}
if(left || right){
connectList.add(new NodeList<Boolean, Boolean, String>(left, right, linkedNodeID));
left = false;
right = false;
}
}
【问题讨论】:
-
没有评论,但投反对票,谢谢。
-
我没有看到使用
leftTrue或rightTrue的代码。所以很难说到底出了什么问题。 -
您需要更新列表中包含的 NodeList 元素,或者删除旧对象并添加一个新对象。我是否正确假设 List 中 NodeList 元素的顺序代表节点的顺序并且只能连接邻居?
-
@Lutz Horn 我首先有这个代码,但我的问题更多是在
leftTrue/rightTrue方法中,通过多次调用connectList.add();@Sentry 现在每个节点都可以连接到任何节点, 但我稍后会解决这个问题 -
@Sentry 我尝试添加新的并删除旧的,但我不知道如何。
标签: java list generics arraylist