You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
4.7 KiB
131 lines
4.7 KiB
/*
|
|
* Copyright (c) 2000-2017 TeamDev Ltd. All rights reserved.
|
|
* TeamDev PROPRIETARY and CONFIDENTIAL.
|
|
* Use is subject to license terms.
|
|
*/
|
|
|
|
package com.example.jxbrowser;
|
|
|
|
import com.example.jxbrowser.resources.Resources;
|
|
import com.teamdev.jxbrowser.chromium.Browser;
|
|
import com.teamdev.jxbrowser.chromium.JSValue;
|
|
|
|
import javax.swing.*;
|
|
import java.awt.*;
|
|
import java.awt.event.ActionEvent;
|
|
import java.awt.event.ActionListener;
|
|
import java.util.concurrent.ExecutorService;
|
|
import java.util.concurrent.Executors;
|
|
|
|
/**
|
|
* @author TeamDev Ltd.
|
|
*/
|
|
public class JSConsole extends JPanel {
|
|
|
|
private static final String NEW_LINE = "\n";
|
|
private static final String QUERY_LINE_START = ">> ";
|
|
private final Browser browser;
|
|
private final ExecutorService executor;
|
|
private JTextArea console;
|
|
|
|
public JSConsole(Browser browser) {
|
|
this.browser = browser;
|
|
this.executor = Executors.newCachedThreadPool();
|
|
setLayout(new BorderLayout());
|
|
add(createTitle(), BorderLayout.NORTH);
|
|
add(createConsoleOutput(), BorderLayout.CENTER);
|
|
add(createConsoleInput(), BorderLayout.SOUTH);
|
|
}
|
|
|
|
private static JComponent createTitleLabel() {
|
|
return new JLabel("JavaScript Console");
|
|
}
|
|
|
|
private JComponent createConsoleInput() {
|
|
JPanel result = new JPanel(new BorderLayout());
|
|
result.setBackground(Color.WHITE);
|
|
|
|
JLabel label = new JLabel(QUERY_LINE_START);
|
|
label.setBorder(BorderFactory.createEmptyBorder(2, 4, 2, 0));
|
|
|
|
final JTextField consoleInput = new JTextField();
|
|
consoleInput.setBorder(BorderFactory.createEmptyBorder(2, 4, 2, 4));
|
|
consoleInput.addActionListener(new ActionListener() {
|
|
public void actionPerformed(ActionEvent e) {
|
|
executor.submit(new Runnable() {
|
|
public void run() {
|
|
final String script = consoleInput.getText();
|
|
JSValue jsValue = browser.executeJavaScriptAndReturnValue(script);
|
|
final String executionResult = jsValue.toString();
|
|
SwingUtilities.invokeLater(new Runnable() {
|
|
public void run() {
|
|
updateConsoleOutput(script, executionResult);
|
|
consoleInput.setText("");
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
});
|
|
result.add(label, BorderLayout.WEST);
|
|
result.add(consoleInput, BorderLayout.CENTER);
|
|
return result;
|
|
}
|
|
|
|
private JComponent createConsoleOutput() {
|
|
console = new JTextArea();
|
|
console.setFont(new Font("Consolas", Font.PLAIN, 12));
|
|
console.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
|
|
console.setEditable(false);
|
|
console.setWrapStyleWord(true);
|
|
console.setLineWrap(true);
|
|
console.setText("");
|
|
JScrollPane scrollPane = new JScrollPane(console);
|
|
scrollPane.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.GRAY));
|
|
return scrollPane;
|
|
}
|
|
|
|
private JComponent createTitle() {
|
|
JPanel panel = new JPanel(new BorderLayout());
|
|
// panel.setBackground(new Color(182, 191, 207));
|
|
panel.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
|
|
panel.add(createTitleLabel(), BorderLayout.WEST);
|
|
panel.add(createCloseButton(), BorderLayout.EAST);
|
|
return panel;
|
|
}
|
|
|
|
private JComponent createCloseButton() {
|
|
JButton closeButton = new JButton();
|
|
closeButton.setOpaque(false);
|
|
closeButton.setToolTipText("Close JavaScript Console");
|
|
closeButton.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
|
|
closeButton.setPressedIcon(Resources.getIcon("close-pressed.png"));
|
|
closeButton.setIcon(Resources.getIcon("close.png"));
|
|
closeButton.setContentAreaFilled(false);
|
|
closeButton.setFocusable(false);
|
|
closeButton.addActionListener(new ActionListener() {
|
|
public void actionPerformed(ActionEvent e) {
|
|
firePropertyChange("JSConsoleClosed", false, true);
|
|
}
|
|
});
|
|
return closeButton;
|
|
}
|
|
|
|
private void updateConsoleOutput(String script, String executionResult) {
|
|
displayScript(script);
|
|
displayExecutionResult(executionResult);
|
|
console.setCaretPosition(console.getText().length());
|
|
}
|
|
|
|
private void displayExecutionResult(String result) {
|
|
console.append(result);
|
|
console.append(NEW_LINE);
|
|
}
|
|
|
|
private void displayScript(String script) {
|
|
console.append(QUERY_LINE_START);
|
|
console.append(script);
|
|
console.append(NEW_LINE);
|
|
}
|
|
}
|