- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
是否可以通过使用循环向图形添加边?我正在解析一个字符串以确定适当的边和标签。由于某种原因,它只会为用于遍历 String 的 while 循环的第一轮添加边缘。对于所有其他人,会出现以下消息...
警告:边被删除,因为底层 JGraphT 图拒绝创建它。当违反底层图的约束时,可能会发生这种情况,例如,试图向禁止它们的图添加平行边或自循环。为避免出现此消息,请确保使用合适的底层 JGraphT 图。
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
import org.jgraph.*;
import org.jgraph.graph.*;
import org.jgrapht.*;
import org.jgrapht.ext.*;
import org.jgrapht.graph.*;
// resolve ambiguity
import org.jgrapht.graph.DefaultEdge;
public class JGraphAdapterDemo
extends JApplet
{
private static final long serialVersionUID = 3256444702936019250L;
private static final Color DEFAULT_BG_COLOR = Color.decode("#FAFBFF");
private static final Dimension DEFAULT_SIZE = new Dimension(530, 320);
static ListenableGraph<String, String> g =
new ListenableDirectedMultigraph<String, String>(String.class);
static int [] finalStates = new int[10];
static int startState = 0;
static char tran = ' ';
static int endState = 0;
private JGraphModelAdapter<String,String> jgAdapter;
public static void main(String [] args)
{
JGraphAdapterDemo applet = new JGraphAdapterDemo();
applet.init();
JFrame frame = new JFrame();
frame.getContentPane().add(applet);
frame.setTitle("JGraphT Adapter to JGraph Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
public void init()
{
// create a JGraphT graph
ListenableGraph<String, String> g =
new ListenableDirectedMultigraph<String, String>(String.class);
// create a visualization using JGraph, via an adapter
jgAdapter = new JGraphModelAdapter<String, String>(g);
JGraph jgraph = new JGraph(jgAdapter);
adjustDisplaySettings(jgraph);
getContentPane().add(jgraph);
resize(DEFAULT_SIZE);
int numStates = 4;
int numSymbols;
int currentState;
int i = 0;
String input = "4 2 0 2 -1 0 a 1 1 b 3 2 c 2 3 c 3 -1"; //place input String here
int readInt = 0;
int j = 0;
String str = "";
int place = 0;
String fState;
//read in numStates, numSymbols, initialState
i=0;
//parse string
i = input.indexOf(" ",0);
str = input.substring(0,i); //number of states
numStates = Integer.parseInt(str); //convert to int
for(int k = 0; k< numStates; k++){
g.addVertex("q"+k);
}
i++;
j = i;
i=input.indexOf(" ",j);
str = input.substring(j,i); //number of symbols
numSymbols = Integer.parseInt(str);
i++;
j = i;
i=input.indexOf(" ",j);
str = input.substring(j,i); //initial state
currentState = Integer.parseInt(str);
i++;
j = i;
//read in finalStates
while(readInt!=-1){
i=input.indexOf(" ",j);
fState = input.substring(j,i); //a final state
readInt = Integer.parseInt(fState);
if(readInt!=-1){
finalStates[place] = readInt;
i++;
j = i;
place++;
}//end if
}//end while
i++;
j = i;
String sState;
String eState;
while(startState!=-1&& j<(input.length()-2)){ //until end of file
i=input.indexOf(" ",j);
sState = input.substring(j,i); //start state
startState = Integer.parseInt(sState); //convert to int
if(startState!=-1){
i++;
j = i;
String cStr = "";
tran = input.charAt(i); //transition
cStr = cStr + tran;
i = i+2;
j=i;
i=input.indexOf(" ",j);
eState = input.substring(j,i); //end state
endState = Integer.parseInt(eState);
i++;
j=i;
String one = "q"+startState;
String two = "q"+endState;
System.out.println(one+ two +" "+cStr);
g.addEdge(one, two, cStr);
//drawEdge(one, two, cStr);
}//end if
}//end while
}
public static void drawEdge(String v, String v1, String label){
System.out.println(v +" "+v1+ " "+label);
g.addEdge(v,v1,label);
}
private void adjustDisplaySettings(JGraph jg)
{
jg.setPreferredSize(DEFAULT_SIZE);
Color c = DEFAULT_BG_COLOR;
String colorStr = null;
try {
colorStr = getParameter("bgcolor");
} catch (Exception e) {
}
if (colorStr != null) {
c = Color.decode(colorStr);
}
jg.setBackground(c);
}
@SuppressWarnings("unchecked") // FIXME hb 28-nov-05: See FIXME below
private void positionVertexAt(Object vertex, int x, int y)
{
DefaultGraphCell cell = jgAdapter.getVertexCell(vertex);
AttributeMap attr = cell.getAttributes();
Rectangle2D bounds = GraphConstants.getBounds(attr);
Rectangle2D newBounds =
new Rectangle2D.Double(
x,
y,
bounds.getWidth(),
bounds.getHeight());
GraphConstants.setBounds(attr, newBounds);
// TODO: Clean up generics once JGraph goes generic
AttributeMap cellAttr = new AttributeMap();
cellAttr.put(cell, attr);
jgAdapter.edit(cellAttr, null, null, null);
}
//~ Inner Classes ----------------------------------------------------------
/**
* a listenable directed multigraph that allows loops and parallel edges.
// */
private static class ListenableDirectedMultigraph<V, E>
extends DefaultListenableGraph<V, E>
implements DirectedGraph<V, E>
{
private static final long serialVersionUID = 1L;
ListenableDirectedMultigraph(Class<E> edgeClass)
{
super(new DirectedMultigraph<V, E>(edgeClass));
}
}
}
最佳答案
如果你想使用一个允许循环的图,你必须创建一个抽象类“AbstractBaseGraph”。为此,您必须创建另一个类来扩展您的父类(super class)。这是一个例子。
public class MiGrafo
extends AbstractBaseGraph<String, DefaultEdge>
implements DirectedGraph<String, DefaultEdge> {
public MiGrafo() {// EdgeFactory<String, DefaultEdge> arg0, boolean arg1,boolean arg2
super(new ClassBasedEdgeFactory<String, DefaultEdge>(
DefaultEdge.class),
true,
true);
// TODO Auto-generated constructor stub
}
此外,您必须在扩展后实现有向图或无向图。
当您创建允许使用循环的新图时,您只需写下这句话:
MiGrafo h = new MiGrafo();
最后你只需要像简单的图一样使用图。
再见。
关于Java:JGraphT 使用循环添加边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5334370/
我创建了一个用户可以添加测试的字段。这一切运行顺利我只希望当用户点击(添加另一个测试)然后上一个(添加另一个测试)删除并且这个显示在新字段中。 所有运行良好的唯一问题是点击(添加另一个字段)之前添加另
String[] option = {"Adlawan", "Angeles", "Arreza", "Benenoso", "Bermas", "Brebant
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在努力将 jQuery 滚动功能添加到 nav-tab (Bootstrap 3)。我希望用户能够选择他们想要的选项卡,并在选项卡内容中有一个可以平滑滚动到 anchor 的链接。这是我的代码,可
我正在尝试在用户登录后再添加 2 个 ui 选项卡。首先,我尝试做一个之后。 $('#slideshow').tabs('remove', '4'); $("#slideshow ul li:last
我有一个包含选择元素的表单,我想通过选择添加和删除其中一些元素。这是html代码(这里也有jsfiddle http://jsfiddle.net/txhajy2w/):
正在写这个: view.backgroundColor = UIColor.white.withAlphaComponent(0.9) 等同于: view.backgroundColor = UICo
好的,如果其中有任何信息,我想将这些列添加到一起。所以说我有 账户 1 2 3 . 有 4 个帐户空间,但只有 3 个帐户。我如何创建 java 脚本来添加它。 最佳答案 Live Example H
我想知道是否有一种有效的预制算法来确定一组数字的和/差是否可以等于不同的数字。示例: 5、8、10、2,使用 + 或 - 等于 9。5 - 8 = -3 + 10 = 7 + 2 = 9 如果有一个预
我似乎有一个卡住的 git repo。它卡在所有基本的添加、提交命令上,git push 返回所有内容为最新的。 从其他帖子我已经完成了 git gc 和 git fsck/ 我认为基本的调试步骤是
我的 Oracle SQL 查询如下- Q1- select hca.account_number, hca.attribute3, SUM(rcl.extended_amou
我正在阅读 http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingG
我正在尝试添加一个“加载更多”按钮并限制下面的结果,这样投资组合页面中就不会同时加载 1000 个内容,如下所示:http://typesetdesign.com/portfolio/ 我对 PHP
我遇到这个问题,我添加了 8 个文本框,它工作正常,但是当我添加更多文本框(如 16 个文本框)时,它不会添加最后一个文本框。有人遇到过这个问题吗?提前致谢。 Live Link: JAVASCRIP
add/remove clone first row default not delete 添加/删除克隆第一行默认不删除&并获取正确的SrNo(例如:添加3行并在看到问题后删除SrNo.2)
我编码this ,但删除按钮不起作用。我在控制台中没有任何错误.. var counter = 0; var dataList = document.getElementById('materi
我有一个类似数组的对象: [1:数组[10]、2:数组[2]、3:数组[2]、4:数组[2]、5:数组[3]、6:数组[1]] 我正在尝试删除前两个元素,执行一些操作,然后将它们再次插入到同一位置。
使用的 Delphi 版本:2007 你好, 我有一个 Tecord 数组 TInfo = Record Name : String; Price : Integer; end; var Info
我使用了基本的 gridster 代码,然后我声明了通过按钮添加和删除小部件的函数它工作正常但是当我将调整大小功能添加到上面的代码中时,它都不起作用(我的意思是调整大小,添加和删除小部件) 我的js代
title 323 323 323 title 323 323 323 title 323 323 323 JS $(document).keydown(function(e){
我是一名优秀的程序员,十分优秀!