⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 swinggui.java

📁 javascript语言的解释器源码
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
    public void mouseExited(MouseEvent e) {    }    public void mouseReleased(MouseEvent e) {        if (e.getComponent() == this &&          (e.getModifiers() & MouseEvent.BUTTON1_MASK) != 0)        {            int x = e.getX();            int y = e.getY();            Font font = fileWindow.textArea.getFont();            FontMetrics metrics = getFontMetrics(font);            int h = metrics.getHeight();            int line = y/h;            if (line == pressLine) {                fileWindow.toggleBreakPoint(line + 1);            }            else {                pressLine = -1;            }        }    }    FileHeader(FileWindow fileWindow) {        this.fileWindow = fileWindow;        addMouseListener(this);        update();    }    void update() {        FileTextArea textArea = fileWindow.textArea;        Font font = textArea.getFont();        setFont(font);        FontMetrics metrics = getFontMetrics(font);        int h = metrics.getHeight();        int lineCount = textArea.getLineCount() + 1;        String dummy = Integer.toString(lineCount);        if (dummy.length() < 2) {            dummy = "99";        }        Dimension d = new Dimension();        d.width = metrics.stringWidth(dummy) + 16;        d.height = lineCount * h + 100;        setPreferredSize(d);        setSize(d);    }    public void paint(Graphics g) {        super.paint(g);        FileTextArea textArea = fileWindow.textArea;        Font font = textArea.getFont();        g.setFont(font);        FontMetrics metrics = getFontMetrics(font);        Rectangle clip = g.getClipBounds();        g.setColor(getBackground());        g.fillRect(clip.x, clip.y, clip.width, clip.height);        int left = getX();        int ascent = metrics.getMaxAscent();        int h = metrics.getHeight();        int lineCount = textArea.getLineCount() + 1;        String dummy = Integer.toString(lineCount);        if (dummy.length() < 2) {            dummy = "99";        }        int maxWidth = metrics.stringWidth(dummy);        int startLine = clip.y / h;        int endLine = (clip.y + clip.height) / h + 1;        int width = getWidth();        if (endLine > lineCount) endLine = lineCount;        for (int i = startLine; i < endLine; i++) {            String text;            int pos = -2;            try {                pos = textArea.getLineStartOffset(i);            } catch (BadLocationException ignored) {            }            boolean isBreakPoint = fileWindow.isBreakPoint(i + 1);            text = Integer.toString(i + 1) + " ";            int w = metrics.stringWidth(text);            int y = i * h;            g.setColor(Color.blue);            g.drawString(text, 0, y + ascent);            int x = width - ascent;            if (isBreakPoint) {                g.setColor(new Color(0x80, 0x00, 0x00));                int dy = y + ascent - 9;                g.fillOval(x, dy, 9, 9);                g.drawOval(x, dy, 8, 8);                g.drawOval(x, dy, 9, 9);            }            if (pos == fileWindow.currentPos) {                Polygon arrow = new Polygon();                int dx = x;                y += ascent - 10;                int dy = y;                arrow.addPoint(dx, dy + 3);                arrow.addPoint(dx + 5, dy + 3);                for (x = dx + 5; x <= dx + 10; x++, y++) {                    arrow.addPoint(x, y);                }                for (x = dx + 9; x >= dx + 5; x--, y++) {                    arrow.addPoint(x, y);                }                arrow.addPoint(dx + 5, dy + 7);                arrow.addPoint(dx, dy + 7);                g.setColor(Color.yellow);                g.fillPolygon(arrow);                g.setColor(Color.black);                g.drawPolygon(arrow);            }        }    }};class FileWindow extends JInternalFrame implements ActionListener{    static final long serialVersionUID = -6212382604952082370L;    SwingGui debugGui;    Dim.SourceInfo sourceInfo;    FileTextArea textArea;    FileHeader fileHeader;    JScrollPane p;    int currentPos;    JLabel statusBar;    public void actionPerformed(ActionEvent e) {        String cmd = e.getActionCommand();        if (cmd.equals("Cut")) {            // textArea.cut();        } else if (cmd.equals("Copy")) {            textArea.copy();        } else if (cmd.equals("Paste")) {            // textArea.paste();        }    }    void load() {        String url = getUrl();        if (url != null) {            RunProxy proxy = new RunProxy(debugGui, RunProxy.LOAD_FILE);            proxy.fileName = url;            proxy.text = sourceInfo.source();            new Thread(proxy).start();        }    }   public int getPosition(int line) {        int result = -1;        try {            result = textArea.getLineStartOffset(line);        } catch (javax.swing.text.BadLocationException exc) {        }        return result;    }    boolean isBreakPoint(int line) {        return sourceInfo.breakableLine(line) && sourceInfo.breakpoint(line);    }    void toggleBreakPoint(int line) {        if (!isBreakPoint(line)) {            setBreakPoint(line);        } else {            clearBreakPoint(line);        }    }    void setBreakPoint(int line) {        if (sourceInfo.breakableLine(line)) {            boolean changed = sourceInfo.breakpoint(line, true);            if (changed) {                fileHeader.repaint();            }        }    }    void clearBreakPoint(int line) {        if (sourceInfo.breakableLine(line)) {            boolean changed = sourceInfo.breakpoint(line, false);            if (changed) {                fileHeader.repaint();            }        }    }    FileWindow(SwingGui debugGui, Dim.SourceInfo sourceInfo) {        super(SwingGui.getShortName(sourceInfo.url()),              true, true, true, true);        this.debugGui = debugGui;        this.sourceInfo = sourceInfo;        updateToolTip();        currentPos = -1;        textArea = new FileTextArea(this);        textArea.setRows(24);        textArea.setColumns(80);        p = new JScrollPane();        fileHeader = new FileHeader(this);        p.setViewportView(textArea);        p.setRowHeaderView(fileHeader);        setContentPane(p);        pack();        updateText(sourceInfo);        textArea.select(0);    }    private void updateToolTip() {        // in case fileName is very long, try to set tool tip on frame        Component c = getComponent(1);        // this will work at least for Metal L&F        if (c != null && c instanceof JComponent) {            ((JComponent)c).setToolTipText(getUrl());        }    }    public String getUrl() {        return sourceInfo.url();    }    void updateText(Dim.SourceInfo sourceInfo) {        this.sourceInfo = sourceInfo;        String newText = sourceInfo.source();        if (!textArea.getText().equals(newText)) {            textArea.setText(newText);            int pos = 0;            if (currentPos != -1) {                pos = currentPos;            }            textArea.select(pos);        }        fileHeader.update();        fileHeader.repaint();    }    void setPosition(int pos) {        textArea.select(pos);        currentPos = pos;        fileHeader.repaint();    }    void select(int start, int end) {        int docEnd = textArea.getDocument().getLength();        textArea.select(docEnd, docEnd);        textArea.select(start, end);    }    public void dispose() {        debugGui.removeWindow(this);        super.dispose();    }};class MyTableModel extends AbstractTableModel{    static final long serialVersionUID = 2971618907207577000L;    SwingGui debugGui;    Vector expressions;    Vector values;    MyTableModel(SwingGui debugGui) {        this.debugGui = debugGui;        expressions = new Vector();        values = new Vector();        expressions.addElement("");        values.addElement("");    }    public int getColumnCount() {        return 2;    }    public int getRowCount() {        return expressions.size();    }    public String getColumnName(int column) {        switch (column) {        case 0:            return "Expression";        case 1:            return "Value";        }        return null;    }    public boolean isCellEditable(int row, int column) {        return true;    }    public Object getValueAt(int row, int column) {        switch (column) {        case 0:            return expressions.elementAt(row);        case 1:            return values.elementAt(row);        }        return "";    }    public void setValueAt(Object value, int row, int column) {        switch (column) {        case 0:            String expr = value.toString();            expressions.setElementAt(expr, row);            String result = "";            if (expr.length() > 0) {                result = debugGui.dim.eval(expr);                if (result == null) result = "";            }            values.setElementAt(result, row);            updateModel();            if (row + 1 == expressions.size()) {                expressions.addElement("");                values.addElement("");                fireTableRowsInserted(row + 1, row + 1);            }            break;        case 1:            // just reset column 2; ignore edits            fireTableDataChanged();        }    }    void updateModel() {        for (int i = 0; i < expressions.size(); ++i) {            Object value = expressions.elementAt(i);            String expr = value.toString();            String result = "";            if (expr.length() > 0) {                result = debugGui.dim.eval(expr);                if (result == null) result = "";            } else {                result = "";            }            result = result.replace('\n', ' ');            values.setElementAt(result, i);        }        fireTableDataChanged();    }};class Evaluator extends JTable{    static final long serialVersionUID = 8133672432982594256L;    MyTableModel tableModel;    Evaluator(SwingGui debugGui) {        super(new MyTableModel(debugGui));        tableModel = (MyTableModel)getModel();    }}class VariableModel implements TreeTableModel{    static class VariableNode    {        Object object;        Object id;        VariableNode[] children;        VariableNode(Object object, Object id) {            this.object = object;            this.id = id;        }        public String toString()        {            return (id instanceof String)                ? (String)id : "[" + ((Integer)id).intValue() + "]";        }    }    // Names of the columns.    private static final String[]  cNames = { " Name", " Value"};    // Types of the columns.    private static final Class[]  cTypes = {TreeTableModel.class, String.class};    private static final VariableNode[] CHILDLESS = new VariableNode[0];    private Dim debugger;    private VariableNode root;    VariableModel()    {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -