📄 dextractor.java
字号:
// The class that handles the main data extraction window, plus a// few helper classes//// Copyright (c) 2000, 2004 Markus Demleitner// This program is free software; you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation; either version 2 of the License, or// (at your option) any later version.//// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with this program; if not, write to the Free Software// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA//// tabsize=2import java.awt.*;import java.awt.event.*;import java.util.*;// The text fields (and the log box) to specify beginning and and// of one gauge -- may be either horizontal or vertical.class GaugeGauge extends Panel implements TextListener{ TextField start, end; int naturalx=0, naturaly=0; boolean vertical; GridBagLayout layout = new GridBagLayout(); Checkbox islog; DExtractor parent; static final long serialVersionUID=20060308L; private class NumOnly extends KeyAdapter { public void keyPressed(KeyEvent e) { char c=e.getKeyChar(); if (c>=' ') if (!((c>='0'&&c<='9')||c=='-'||c=='+'||c=='e'||c=='.'||c=='E')) e.consume(); } } GaugeGauge(String variable, Color bgcolor, boolean vertical, DExtractor parent) { GridBagConstraints c = new GridBagConstraints(); Label lab; String labels[] = {"0", "1"}; int labelalign; TextField nf; this.vertical = vertical; this.parent = parent; setForeground(bgcolor); setLayout(layout); start = new TextField("", 8); end = new TextField("", 8); islog = new Checkbox("log", false); if (vertical) { String tmp; tmp = labels[0]; labels[0] = labels[1]; labels[1] = tmp; c.fill = GridBagConstraints.BOTH; c.gridwidth = GridBagConstraints.REMAINDER; labelalign = Label.LEFT; } else { c.fill = GridBagConstraints.HORIZONTAL; labelalign = Label.RIGHT; } c.weighty = 0.5; c.weightx = 0; lab = new Label(variable+labels[0], labelalign); layout.setConstraints(lab, c); add(lab); c.weightx = 0.5; c.weighty = 0.5; if (vertical) nf = end; else nf = start; layout.setConstraints(nf, c); add(nf); nf.addKeyListener(new NumOnly()); nf.addTextListener(this); int oldfill = c.fill; c.fill = GridBagConstraints.NONE; layout.setConstraints(islog, c); add(islog); c.fill = oldfill; lab = new Label(variable+labels[1], labelalign); c.weightx = 0; c.weighty = 0.5; layout.setConstraints(lab, c); add(lab); c.weightx = 0.5; c.weighty = 0.5; if (vertical) nf = start; else nf = end; layout.setConstraints(nf, c); add(nf); nf.addKeyListener(new NumOnly()); nf.addTextListener(this); } public double getstart() { return new Double(this.start.getText()).doubleValue(); } public double getend() { return new Double(this.end.getText()).doubleValue(); } public int computeUsefulSignificantDigits() { try { return Math.max(4, (int)Math.round(-Math.log( Math.abs(this.getend()-this.getstart())/this.getstart())/2.3 +4)); } catch (NumberFormatException e) { return 4; } } public boolean isLogAxis() { return islog.getState(); } public Dimension getPreferredSize() { return layout.preferredLayoutSize((Container)this); } public Dimension getMinimumSize() { return getPreferredSize(); } public void textValueChanged(TextEvent ev) { try { this.parent.computeTransform(); } catch (CantComputeException e) { } }}// This handles the window in which most of the work gets done.// Clearly, this should be split into at least three subclasses.public class DExtractor extends Frame implements ActionListener, ComponentListener{ class Steeringstuff extends Panel { int numbut; Button buttons[]; static final long serialVersionUID=20060308L; // a container for some buttons, mainly here because I believe I am // too dumb for the awt layout managers Steeringstuff(Button buttons_p[], int numbut_p, ActionListener l) { int i; numbut = numbut_p; buttons = buttons_p; setLayout(new GridLayout(numbut, 1)); for (i=0; i<numbut; i++) { add(buttons[i]); buttons[i].addActionListener(l); } } } ImageWithPoints imzone; ImageGetter imageGetter; DataDeliverer dataDeliverer; GaugeGauge hgg, vgg; MainServices myparent; Color hcolor, vcolor; boolean recogniserRunning = false; boolean statusLocked = false; Vector<Component> criticalComponents = new Vector<Component>(); Vector<MenuItem> criticalMenuItems = new Vector<MenuItem>(); TextArea results; Steeringstuff apanel; MagGlass magGlass; ScrollPane scrollp = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS); Panel helppanel = new Panel(); Label rulerLabel; TextField fnamefield; MenuItem stopRecogniserItem; RecogniserSettings recSettings=new RecogniserSettings(); Rectangle bbox; String datasetName; String targetFName; int scale=3; static final long serialVersionUID = 20060308L; AffineTrafo transformation = null; // Todo: give DExtractor a seperate config class. // sourcebib, sourcepage, xAxisColor and yAxisColor should be // in there, I guess. Possibly quite a few more... DExtractor(MainServices parent, Rectangle bbox, String sourcebib, String sourcepage, ImageGetter imageGetter, DataDeliverer dataDeliverer, Color xAxisColor, Color yAxisColor, int defaultScale) { this.datasetName = "# Graph from "+sourcebib+", page "+sourcepage; this.targetFName = sourcebib+"."+sourcepage; this.imageGetter = imageGetter; this.myparent = parent; this.bbox = bbox; this.dataDeliverer = dataDeliverer; this.hcolor = xAxisColor; this.vcolor = yAxisColor; this.scale = defaultScale; this.addComponentListener(this); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent event) { closeWin(); } }); makeDialog(); makeMenu(); this.imzone.setImage(imageGetter.getImage(this.scale, bbox)); } DExtractor(MainServices parent, Rectangle bbox, String sourcebib, String sourcepage, ImageGetter imageGetter, DataDeliverer dataDeliverer, Color xAxisColor, Color yAxisColor) { this(parent, bbox, sourcebib, sourcepage, imageGetter, dataDeliverer, xAxisColor, yAxisColor, 3); } DExtractor(MainServices parent, Rectangle bbox, String sourcebib, String sourcepage, ImageGetter imageGetter, DataDeliverer dataDeliverer) { this(parent, bbox, sourcebib, sourcepage, imageGetter, dataDeliverer, new Color(255, 0, 0), new Color(0, 0, 255), 3); } protected void makeMenu() { MenuBar mb; MenuItem m; mb = new MenuBar(); setMenuBar(mb); Menu fileMenu = new Menu("File"); mb.add(fileMenu); m = new MenuItem("Show Data"); fileMenu.add(m); this.criticalMenuItems.addElement(m); m = new MenuItem("Send Data"); fileMenu.add(m); this.criticalMenuItems.addElement(m); m = new MenuItem("Save Data"); fileMenu.add(m); this.criticalMenuItems.addElement(m); fileMenu.addSeparator(); m = new MenuItem("Close"); m.setShortcut(new MenuShortcut(KeyEvent.VK_W, false)); m.setActionCommand("Close"); fileMenu.add(m); fileMenu.addActionListener(this); Menu zoomMenu = new Menu("Zoom"); mb.add(zoomMenu); m = new MenuItem("600 dpi"); zoomMenu.add(m); this.criticalMenuItems.addElement(m); m = new MenuItem("300 dpi"); zoomMenu.add(m); this.criticalMenuItems.addElement(m); m = new MenuItem("200 dpi"); zoomMenu.add(m); this.criticalMenuItems.addElement(m); m = new MenuItem("100 dpi"); zoomMenu.add(m); this.criticalMenuItems.addElement(m); m = new MenuItem("75 dpi"); zoomMenu.add(m); this.criticalMenuItems.addElement(m); zoomMenu.addActionListener(this); Menu recMenu = new Menu("Recognize"); mb.add(recMenu); m = new MenuItem("Trace a Line"); m.setShortcut(new MenuShortcut(KeyEvent.VK_T, false)); m.setActionCommand("Trace a Line"); recMenu.add(m); this.criticalMenuItems.addElement(m); m = new MenuItem("Find Points"); m.setShortcut(new MenuShortcut(KeyEvent.VK_B, false)); m.setActionCommand("Find Points"); recMenu.add(m); this.criticalMenuItems.addElement(m); m = new MenuItem("Automatic Axes"); m.setShortcut(new MenuShortcut(KeyEvent.VK_A, false)); m.setActionCommand("Automatic Axes"); recMenu.add(m); this.criticalMenuItems.addElement(m); recMenu.addSeparator(); m = new MenuItem("Recognizer Settings"); m.setShortcut(new MenuShortcut(KeyEvent.VK_S, false)); m.setActionCommand("Recognizer Settings"); recMenu.add(m); stopRecogniserItem = new MenuItem("Stop Recognizer"); recMenu.add(stopRecogniserItem); stopRecogniserItem.setEnabled(false); recMenu.addSeparator(); recMenu.add(new MenuItem("Delete all Points")); recMenu.addActionListener(this); Menu helpMenu = new Menu("Help"); mb.setHelpMenu(helpMenu); helpMenu.add(new MenuItem("About Dexter")); helpMenu.add(new MenuItem("Help")); helpMenu.addActionListener(this); } protected void makeDialog() { GridBagLayout layout = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); Button actbuts[] = { new Button("Help"), new Button("Show Data"), new Button("Send Data"), new Button("Save Data"), new Button("Close"), }; this.criticalComponents.addElement(actbuts[1]); this.criticalComponents.addElement(actbuts[2]); this.criticalComponents.addElement(actbuts[3]); Label lab; Panel zwp;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -