beepanel.java
来自「基于MPEG 7 标准,符合未来语义网架构,很值得参考」· Java 代码 · 共 750 行 · 第 1/3 页
JAVA
750 行
for (Iterator<String> iterator = l.iterator(); iterator.hasNext();) {
String s = iterator.next();
result[i] = s;
i++;
}
return result;
}
public void importNode(Element node) {
Namespace mpeg7 = Namespace.getNamespace("", "urn:mpeg:mpeg7:schema:2001");
if (node.getChild("SemanticBase", mpeg7) != null) { // are there any useable elements?
// simply add all Elements ...
objects.removeAllElements();
relations.removeAllElements();
java.util.List oList = node.getChildren("SemanticBase", mpeg7);
for (Iterator i = oList.iterator(); i.hasNext();) {
Element e = (Element) i.next();
SemanticObjectRepresentation sor = new SemanticObjectRepresentation(new Point(10, 10), e);
objects.add(sor);
}
// now create the graph ...
if (node.getChild("Graph", node.getNamespace()) != null) {
if (node.getChild("Graph", node.getNamespace()).getChild("Relation", node.getNamespace()) != null) {
oList = node.getChild("Graph", node.getNamespace()).getChildren("Relation", node.getNamespace());
for (Iterator i = oList.iterator(); i.hasNext();) {
Element e = (Element) i.next();
String src = e.getAttributeValue("source");
String tgt = e.getAttributeValue("target");
String rel = e.getAttributeValue("type");
// logger.debug("Searching for relation source=" + src + ", target=" + tgt + ", relation=" + rel);
SemanticObjectRepresentation sort = null, sors = null;
if (rel != null && rel.lastIndexOf(":") > -1) {
rel = rel.substring(rel.lastIndexOf(":") + 1);
} else {
// logger.error("Import: no relation found");
}
if (src != null && tgt != null) {
src = src.substring(1);
tgt = tgt.substring(1);
for (Iterator it = objects.iterator(); it.hasNext();) {
SemanticObjectRepresentation rep = (SemanticObjectRepresentation) it.next();
String oID = rep.getNode().getAttributeValue("id");
if (oID.equals(tgt)) {
sort = rep;
}
if (oID.equals(src)) {
sors = rep;
}
}
} else {
// logger.error("Import: no source or target found");
}
if (sort != null && sors != null && rel != null) {
SemanticRelationRepresentation srr = new SemanticRelationRepresentation(sors, sort, rel);
relations.add(srr);
} else {
// logger.error("Import: Could not import: " + e.toString());
}
}
}
}
distributeElements();
repaint();
embedElements();
} else { // no description found
// logger.error("Import: No MPEG-7 description available in given node ...");
}
}
private void addObjectFromDND(Point p, String label) {
if (label.indexOf('\n') == -1) {
Vector a = parent.getPossibleObjects();
for (Iterator i = a.iterator(); i.hasNext();) {
Element e = (Element) i.next();
if (e.getChild("Label", e.getNamespace()).getChildText("Name", e.getNamespace()).equals(label))
addObject(p, e);
}
}
TextChangesListener.getInstance().fireDataChanged();
}
private void showAbout() {
JOptionPane.showMessageDialog(this,
"<html><h1>IMBee</h1>creating semantic descriptions<hr>© 2002 by Know Center<br>author: Mathias Lux, mathias@juggle.at<br>Inffeldgasse 16c<br>8010 Graz<br>Telefon: +43 (316) 873-5669</html>",
"About", JOptionPane.PLAIN_MESSAGE, new ImageIcon(BeePanel.class.getResource("bee.png")));
}
public void distributeElements() {
int number = objects.size();
int width = this.getWidth();
int height = this.getHeight();
double max = 0.0;
if (width > height)
max = (double) ((height >> 1) - SemanticObjectRepresentation.HEIGHT) - 10.0;
else
max = (double) ((width >> 1) - SemanticObjectRepresentation.WIDTH) - 10.0;
int step = 0;
double split = 2.0 * Math.PI / (double) number;
for (Iterator i = objects.iterator(); i.hasNext();) {
SemanticObjectRepresentation r = (SemanticObjectRepresentation) i.next();
Point p = new Point((width >> 1) + ((int) (max * Math.cos(((double) step) * split))) - (SemanticObjectRepresentation.WIDTH >> 1),
(height >> 1) + ((int) (max * Math.sin(((double) step) * split))) - (SemanticObjectRepresentation.HEIGHT >> 1));
r.setP(p);
step++;
}
}
public void embedElements() {
// getting maximum for scaling to [0,1]^2:
double maxX = 1.0, minX = 0.0, maxY = 1.0, minY = 0.0;
for (Iterator itObj = objects.iterator(); itObj.hasNext();) {
SemanticObjectRepresentation sor = (SemanticObjectRepresentation) itObj.next();
double x = sor.getP().getX();
double y = sor.getP().getY();
if (x < minX) minX = x;
if (y < minY) minY = y;
if (x > maxX) maxX = x;
if (y > maxY) maxY = y;
}
// creating nodelist
List<Node> nodeList = new LinkedList<Node>();
HashMap<SemanticObjectRepresentation, DefaultNode> lookupNodes = new HashMap<SemanticObjectRepresentation, DefaultNode>(objects.size());
for (Iterator itObj = objects.iterator(); itObj.hasNext();) {
SemanticObjectRepresentation sor = (SemanticObjectRepresentation) itObj.next();
sor.getP().getX();
double x = sor.getP().getX();
double y = sor.getP().getY();
x = (x - minX) / (maxX - minX);
y = (y - minY) / (maxY - minY);
DefaultNode d = new DefaultNode(x, y, sor);
nodeList.add(d);
lookupNodes.put(sor, d);
}
List<Edge> edges = new LinkedList<Edge>();
for (Iterator itRel = relations.iterator(); itRel.hasNext();) {
SemanticRelationRepresentation rel = (SemanticRelationRepresentation) itRel.next();
DefaultEdge e = new DefaultEdge(lookupNodes.get(rel.getSource()), lookupNodes.get(rel.getTarget()));
edges.add(e);
}
SpringEmbedder se = new SpringEmbedder(nodeList, edges);
// todo: embedGraph thread
EmbedderThread embedderThread = new EmbedderThread(this, se, running);
Thread t = new Thread(embedderThread);
t.start();
}
public void importFile() {
JFileChooser jfc = new JFileChooser(".");
FileFilter std = jfc.getFileFilter();
jfc.setFileFilter(new Mpeg7FileFilter());
jfc.addChoosableFileFilter(new XMLFileFilter());
jfc.addChoosableFileFilter(std);
if (jfc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
SAXBuilder builder = new SAXBuilder();
try {
Document d = builder.build(jfc.getSelectedFile());
java.util.List l = OCToolkit.xpathQuery(d, "//SemanticBase", Namespace.getNamespace("", "urn:mpeg:mpeg7:schema:2001"));
if (l != null) {
Element node = (Element) ((Element) ((Element) l.get(0)).getParent()).detach();
importNode(node);
} else {
// logger.error("Import: No matching node found in file");
}
} catch (JDOMException e) {
// logger.error(e);
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void removeMarkedElements() {
Vector remO = new Vector();
for (Iterator iterator = objects.iterator(); iterator.hasNext();) {
SemanticObjectRepresentation sem = (SemanticObjectRepresentation) iterator.next();
if (sem.isMarked()) {
remO.add(sem);
Vector rem = new Vector();
for (Iterator i2 = relations.iterator(); i2.hasNext();) {
SemanticRelationRepresentation rel = (SemanticRelationRepresentation) i2.next();
if (rel.getSource().equals(sem) || rel.getTarget().equals(sem)) {
rem.add(rel);
}
}
// objects.remove(sem);
for (Iterator i3 = rem.iterator(); i3.hasNext();) {
relations.remove(i3.next());
}
}
}
for (Iterator iterator = remO.iterator(); iterator.hasNext();) {
SemanticObjectRepresentation sem = (SemanticObjectRepresentation) iterator.next();
objects.remove(sem);
}
TextChangesListener.getInstance().fireDataChanged();
}
private class BeePanelMouseAdapter extends MouseAdapter {
public void mousePressed(MouseEvent e) {
// int relation_mask = MouseEvent.SHIFT_DOWN_MASK | MouseEvent.BUTTON1_DOWN_MASK;
// int move_mask = MouseEvent.BUTTON1_DOWN_MASK;
if (e.getButton() == MouseEvent.BUTTON1 && !e.isAltDown()) {
pressedAt = e.getPoint();
checkIfPressedInObject(e.getPoint());
}
if (e.getButton() == MouseEvent.BUTTON2 || e.getButton() == MouseEvent.BUTTON1 && e.isAltDown()) {
startRel = e.getPoint();
}
repaint();
}
public void mouseReleased(MouseEvent e) {
checkIfIsInObject(e.getPoint());
draggingObject = null;
pressedAt = null;
offset = null;
repaint();
if (e.getButton() == MouseEvent.BUTTON2 || e.getButton() == MouseEvent.BUTTON1 && e.isAltDown()) {
endRel = e.getPoint();
checkIfNewRelation();
startRel = null;
endRel = null;
}
}
public void mouseClicked(MouseEvent e) {
clickedAt = e.getPoint();
if (e.getButton() == MouseEvent.BUTTON3) {
showMenu(e.getPoint().x, e.getPoint().y);
}
if (e.getButton() == MouseEvent.BUTTON1 && e.isControlDown()) {
for (Iterator iterator = objects.iterator(); iterator.hasNext();) {
SemanticObjectRepresentation sem = (SemanticObjectRepresentation) iterator.next();
if (sem.checkIfInside(e.getPoint())) {
// Toggle Markierung ... :)
sem.setMarked(!sem.isMarked());
}
}
}
repaint();
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?