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

/*
* 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);
}
}

Powered by TurnKey Linux.