📄 beepanel.java
字号:
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: start 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();
}
}
}
class EmbedderThread implements Runnable {
BeePanel panel;
SpringEmbedder se;
double x, y;
boolean running = true;
LinkedList<EmbedderThread> currentlyRunning = null;
public EmbedderThread(BeePanel panel, SpringEmbedder se, LinkedList<EmbedderThread> running) {
for (Iterator<EmbedderThread> iterator = running.iterator(); iterator.hasNext();) {
iterator.next().endEmbedding();
}
currentlyRunning = running;
running.add(this);
this.panel = panel;
this.se = se;
x = panel.getSize().getWidth() - (SemanticObjectRepresentation.WIDTH << 1);
y = panel.getSize().getHeight() - SemanticObjectRepresentation.HEIGHT * 3;
}
public void run() {
while (se.step() > 0 && running) {
List<Node> list = se.getNodeList();
double xMin = 1.0, xMax = 0.0, yMin = 1.0, yMax = 0.0;
for (Iterator<Node> iterator = list.iterator(); iterator.hasNext();) {
Node node = iterator.next();
if (node.getX() < xMin) xMin = node.getX();
if (node.getX() > xMax) xMax = node.getX();
if (node.getY() < yMin) yMin = node.getY();
if (node.getY() > yMax) yMax = node.getY();
}
for (Iterator<Node> it = list.iterator(); it.hasNext();) {
Node node = it.next();
double nx = (node.getX() - xMin) / (xMax - xMin);
double ny = (node.getY() - yMin) / (yMax - yMin);
SemanticObjectRepresentation sor = (SemanticObjectRepresentation) ((DefaultNode) node).getNodeObject();
// sor.getP().setLocation(x * nx , y * ny );
sor.getP().setLocation(x * nx + (SemanticObjectRepresentation.WIDTH >> 1), y * ny + (SemanticObjectRepresentation.HEIGHT >> 1));
}
panel.repaint();
try {
sleep(15);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if (currentlyRunning.contains(this)) {
currentlyRunning.remove(this);
}
}
public void endEmbedding() {
running = false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -