From e7a46bcb5312b95f30b93b07fe010456d2102afb Mon Sep 17 00:00:00 2001 From: wangbing Date: Fri, 17 May 2024 00:04:02 +0800 Subject: [PATCH] init --- .../com/example/jxbrowser/AboutDialog.java | 106 ---- .../example/jxbrowser/CommandMenuItem.java | 28 - src/main/java/com/example/jxbrowser/Demo.java | 99 +++ .../java/com/example/jxbrowser/JSConsole.java | 130 ---- .../com/example/jxbrowser/JxBrowserDemo.java | 102 --- src/main/java/com/example/jxbrowser/Tab.java | 29 - .../java/com/example/jxbrowser/TabButton.java | 25 - .../com/example/jxbrowser/TabCaption.java | 155 ----- .../com/example/jxbrowser/TabCaptions.java | 68 -- .../com/example/jxbrowser/TabContent.java | 121 ---- .../com/example/jxbrowser/TabFactory.java | 52 -- .../com/example/jxbrowser/TabbedPane.java | 158 ----- .../java/com/example/jxbrowser/ToolBar.java | 582 ------------------ .../java/com/example/jxbrowser/WebClient.java | 146 ----- .../jxbrowser/resources/Resources.java | 17 - .../jxbrowser/resources/back-selected.png | Bin 1569 -> 0 bytes .../com/example/jxbrowser/resources/back.png | Bin 1578 -> 0 bytes .../jxbrowser/resources/close-pressed.png | Bin 385 -> 0 bytes .../com/example/jxbrowser/resources/close.png | Bin 410 -> 0 bytes .../jxbrowser/resources/forward-selected.png | Bin 1558 -> 0 bytes .../example/jxbrowser/resources/forward.png | Bin 1545 -> 0 bytes .../com/example/jxbrowser/resources/gear.png | Bin 3908 -> 0 bytes .../com/example/jxbrowser/resources/go.png | Bin 3146 -> 0 bytes .../jxbrowser/resources/home-selected.png | Bin 1412 -> 0 bytes .../com/example/jxbrowser/resources/home.png | Bin 1434 -> 0 bytes .../jxbrowser/resources/jxbrowser16x16.png | Bin 160 -> 0 bytes .../jxbrowser/resources/jxbrowser32x32.png | Bin 187 -> 0 bytes .../example/jxbrowser/resources/new-tab.png | Bin 197 -> 0 bytes .../jxbrowser/resources/refresh-selected.png | Bin 1560 -> 0 bytes .../example/jxbrowser/resources/refresh.png | Bin 1579 -> 0 bytes .../jxbrowser/resources/stop-selected.png | Bin 1500 -> 0 bytes .../com/example/jxbrowser/resources/stop.png | Bin 1522 -> 0 bytes 32 files changed, 99 insertions(+), 1719 deletions(-) delete mode 100644 src/main/java/com/example/jxbrowser/AboutDialog.java delete mode 100644 src/main/java/com/example/jxbrowser/CommandMenuItem.java create mode 100644 src/main/java/com/example/jxbrowser/Demo.java delete mode 100644 src/main/java/com/example/jxbrowser/JSConsole.java delete mode 100644 src/main/java/com/example/jxbrowser/JxBrowserDemo.java delete mode 100644 src/main/java/com/example/jxbrowser/Tab.java delete mode 100644 src/main/java/com/example/jxbrowser/TabButton.java delete mode 100644 src/main/java/com/example/jxbrowser/TabCaption.java delete mode 100644 src/main/java/com/example/jxbrowser/TabCaptions.java delete mode 100644 src/main/java/com/example/jxbrowser/TabContent.java delete mode 100644 src/main/java/com/example/jxbrowser/TabFactory.java delete mode 100644 src/main/java/com/example/jxbrowser/TabbedPane.java delete mode 100644 src/main/java/com/example/jxbrowser/ToolBar.java delete mode 100644 src/main/java/com/example/jxbrowser/WebClient.java delete mode 100644 src/main/java/com/example/jxbrowser/resources/Resources.java delete mode 100644 src/main/java/com/example/jxbrowser/resources/back-selected.png delete mode 100644 src/main/java/com/example/jxbrowser/resources/back.png delete mode 100644 src/main/java/com/example/jxbrowser/resources/close-pressed.png delete mode 100644 src/main/java/com/example/jxbrowser/resources/close.png delete mode 100644 src/main/java/com/example/jxbrowser/resources/forward-selected.png delete mode 100644 src/main/java/com/example/jxbrowser/resources/forward.png delete mode 100644 src/main/java/com/example/jxbrowser/resources/gear.png delete mode 100644 src/main/java/com/example/jxbrowser/resources/go.png delete mode 100644 src/main/java/com/example/jxbrowser/resources/home-selected.png delete mode 100644 src/main/java/com/example/jxbrowser/resources/home.png delete mode 100644 src/main/java/com/example/jxbrowser/resources/jxbrowser16x16.png delete mode 100644 src/main/java/com/example/jxbrowser/resources/jxbrowser32x32.png delete mode 100644 src/main/java/com/example/jxbrowser/resources/new-tab.png delete mode 100644 src/main/java/com/example/jxbrowser/resources/refresh-selected.png delete mode 100644 src/main/java/com/example/jxbrowser/resources/refresh.png delete mode 100644 src/main/java/com/example/jxbrowser/resources/stop-selected.png delete mode 100644 src/main/java/com/example/jxbrowser/resources/stop.png diff --git a/src/main/java/com/example/jxbrowser/AboutDialog.java b/src/main/java/com/example/jxbrowser/AboutDialog.java deleted file mode 100644 index ca015f8..0000000 --- a/src/main/java/com/example/jxbrowser/AboutDialog.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (c) 2000-2018 TeamDev Ltd. All rights reserved. - * TeamDev PROPRIETARY and CONFIDENTIAL. - * Use is subject to license terms. - */ - -package com.example.jxbrowser; - -import com.teamdev.jxbrowser.chromium.ProductInfo; - -import javax.swing.*; -import javax.swing.event.HyperlinkEvent; -import javax.swing.event.HyperlinkListener; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.KeyAdapter; -import java.awt.event.KeyEvent; -import java.util.Calendar; - -/** - * @author TeamDev Ltd. - */ -public class AboutDialog extends JDialog { - public AboutDialog(Frame owner) { - super(owner, "About JxBrowser Demo", true); - initContent(); - initKeyStroke(); - setResizable(false); - pack(); - setLocationRelativeTo(owner); - setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); - } - - private void initContent() { - JTextPane aboutText = new JTextPane(); - aboutText.setContentType("text/html"); - aboutText.setText("" + - "JxBrowser Demo

" + - "Version " + ProductInfo.getVersion() + "

" + - - "This application is created for demonstration purposes only.
" + - "© " + Calendar.getInstance().get(Calendar.YEAR) + - " TeamDev Ltd. All rights reserved.

" + - - "Powered by JxBrowser. See " + - "terms of use.
" + - - "Based on Chromium project. " + - "See full list of Chromium
components, " + - "used in the current JxBrowser version.

" + - - "This demo uses WebKit and FFMpeg projects under LGPL.
" + - - "See licence text " + - "LGPL v.2 and " + - "LGPL v.2.1
"); - aboutText.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20)); - aboutText.setEditable(false); - aboutText.addHyperlinkListener(new HyperlinkListener() { - @SuppressWarnings("ParameterNameDiffersFromOverriddenParameter") - @Override - public void hyperlinkUpdate(HyperlinkEvent event) { - if (event.getEventType().equals(HyperlinkEvent.EventType.ACTIVATED)) { - try { - Desktop desktop = Desktop.getDesktop(); - desktop.browse(event.getURL().toURI()); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - } - }); - add(aboutText, BorderLayout.CENTER); - } - - private void initKeyStroke() { - addKeyListener(new KeyAdapter() { - @Override - public void keyPressed(KeyEvent e) { - if (e.getKeyCode() == KeyEvent.VK_ESCAPE) { - dispose(); - } - } - }); - JRootPane rootPane = getRootPane(); - KeyStroke keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, false); - rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(keyStroke, "ESCAPE"); - rootPane.getActionMap().put("ESCAPE", new AbstractAction() { - private static final long serialVersionUID = 6693635607417495802L; - - public void actionPerformed(ActionEvent e) { - dispose(); - } - }); - } -} diff --git a/src/main/java/com/example/jxbrowser/CommandMenuItem.java b/src/main/java/com/example/jxbrowser/CommandMenuItem.java deleted file mode 100644 index ca8807b..0000000 --- a/src/main/java/com/example/jxbrowser/CommandMenuItem.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * 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.teamdev.jxbrowser.chromium.EditorCommand; - -import javax.swing.*; - -/** - * @author Artem Trofimov - */ -public class CommandMenuItem extends JMenuItem { - - private final EditorCommand command; - - public CommandMenuItem(String commandName, EditorCommand command) { - super(commandName); - this.command = command; - } - - public EditorCommand getCommand() { - return command; - } -} diff --git a/src/main/java/com/example/jxbrowser/Demo.java b/src/main/java/com/example/jxbrowser/Demo.java new file mode 100644 index 0000000..e0a220e --- /dev/null +++ b/src/main/java/com/example/jxbrowser/Demo.java @@ -0,0 +1,99 @@ +package com.example.jxbrowser; + +import com.teamdev.jxbrowser.chromium.Browser; +import com.teamdev.jxbrowser.chromium.DataReceivedParams; +import com.teamdev.jxbrowser.chromium.ba; +import com.teamdev.jxbrowser.chromium.swing.BrowserView; +import com.teamdev.jxbrowser.chromium.swing.DefaultDialogHandler; +import com.teamdev.jxbrowser.chromium.swing.DefaultDownloadHandler; +import com.teamdev.jxbrowser.chromium.swing.DefaultNetworkDelegate; +import com.teamdev.jxbrowser.chromium.swing.DefaultPopupHandler; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.math.BigInteger; +import java.util.concurrent.TimeUnit; + +public class Demo { + + static { + // 破解jxbrowser的代码块 导入下面的包是关键 + // import com.teamdev.jxbrowser.chromium.ba; + try { + Field e = ba.class.getDeclaredField("e"); + e.setAccessible(true); + Field f = ba.class.getDeclaredField("f"); + f.setAccessible(true); + Field modifersField = Field.class.getDeclaredField("modifiers"); + modifersField.setAccessible(true); + modifersField.setInt(e, e.getModifiers() & ~Modifier.FINAL); + modifersField.setInt(f, f.getModifiers() & ~Modifier.FINAL); + e.set(null, new BigInteger("1")); + f.set(null, new BigInteger("1")); + modifersField.setAccessible(false); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + + public static void main(String[] args) { + JFrame jFrame = new JFrame(); + jFrame.setTitle("WebClient"); + + Browser browser = new Browser(); + BrowserView browserView = new BrowserView(browser); + browser.setDownloadHandler(new DefaultDownloadHandler(browserView)); + browser.setDialogHandler(new DefaultDialogHandler(browserView)); + browser.setPopupHandler(new DefaultPopupHandler()); + + + jFrame.getContentPane().add(browserView, BorderLayout.CENTER); + jFrame.setSize(800, 600);//初始大小 + jFrame.setLocation(0, 0);//位置 + // 设置为全屏模式 + // jFrame.setExtendedState(JFrame.MAXIMIZED_BOTH); + // 去掉边框 + // setUndecorated(true); + // 置顶 + // setAlwaysOnTop(true); + jFrame.addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + // 关闭应用时要释放资源 + jFrame.dispose(); + System.exit(0);//0正常退出,1非正常退出 + } + }); + + // 显示 + jFrame.setVisible(true); + + // 先加载空白页 + browser.loadURL("about:blank"); + + // 休眠3秒 + sleep(3); + + browser.getContext().getNetworkService().setNetworkDelegate(new DefaultNetworkDelegate() { + @Override + public void onDataReceived(DataReceivedParams params) { + String string = new String(params.getData()); + super.onDataReceived(params); + } + }); + browser.loadURL("http://test.wbsite.xyz:8027/login.htm"); + } + + + private static void sleep(int seconds) { + try { + TimeUnit.SECONDS.sleep(seconds); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/java/com/example/jxbrowser/JSConsole.java b/src/main/java/com/example/jxbrowser/JSConsole.java deleted file mode 100644 index d418a00..0000000 --- a/src/main/java/com/example/jxbrowser/JSConsole.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * 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); - } -} diff --git a/src/main/java/com/example/jxbrowser/JxBrowserDemo.java b/src/main/java/com/example/jxbrowser/JxBrowserDemo.java deleted file mode 100644 index e73a94a..0000000 --- a/src/main/java/com/example/jxbrowser/JxBrowserDemo.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * 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.ba; -import com.teamdev.jxbrowser.chromium.internal.Environment; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; -import java.math.BigInteger; - -/** - * @author TeamDev Ltd. - */ -public class JxBrowserDemo { - - static { - // 破解jxbrowser的代码块 导入下面的包是关键 - // import com.teamdev.jxbrowser.chromium.ba; - try { - Field e = ba.class.getDeclaredField("e"); - e.setAccessible(true); - Field f = ba.class.getDeclaredField("f"); - f.setAccessible(true); - Field modifersField = Field.class.getDeclaredField("modifiers"); - modifersField.setAccessible(true); - modifersField.setInt(e, e.getModifiers() & ~Modifier.FINAL); - modifersField.setInt(f, f.getModifiers() & ~Modifier.FINAL); - e.set(null, new BigInteger("1")); - f.set(null, new BigInteger("1")); - modifersField.setAccessible(false); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - - private static void initEnvironment() throws Exception { - System.setProperty("apple.laf.useScreenMenuBar", "true"); - System.setProperty("com.apple.mrj.application.apple.menu.about.name", "JxBrowser Demo"); - UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); - JPopupMenu.setDefaultLightWeightPopupEnabled(false); - ToolTipManager.sharedInstance().setLightWeightPopupEnabled(false); - } - - public static void main(String[] args) throws Exception { - initEnvironment(); - SwingUtilities.invokeLater(new Runnable() { - public void run() { - initAndDisplayUI(); - } - }); - } - - private static void initAndDisplayUI() { - final TabbedPane tabbedPane = new TabbedPane(); - insertTab(tabbedPane, TabFactory.createFirstTab()); - insertNewTabButton(tabbedPane); - - JFrame frame = new JFrame("JxBrowser Demo"); - frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); - frame.addWindowListener(new WindowAdapter() { - @SuppressWarnings("CallToSystemExit") - @Override - public void windowClosing(WindowEvent e) { - tabbedPane.disposeAllTabs(); - if (Environment.isMac()) { - System.exit(0); - } - } - }); - frame.add(tabbedPane, BorderLayout.CENTER); - frame.setSize(1024, 700); - frame.setLocationRelativeTo(null); - frame.setVisible(true); - } - - private static void insertNewTabButton(final TabbedPane tabbedPane) { - TabButton button = new TabButton(Resources.getIcon("new-tab.png"), "New tab"); - button.addActionListener(new ActionListener() { - public void actionPerformed(final ActionEvent e) { - insertTab(tabbedPane, TabFactory.createTab()); - } - }); - tabbedPane.addTabButton(button); - } - - private static void insertTab(TabbedPane tabbedPane, Tab tab) { - tabbedPane.addTab(tab); - tabbedPane.selectTab(tab); - } -} diff --git a/src/main/java/com/example/jxbrowser/Tab.java b/src/main/java/com/example/jxbrowser/Tab.java deleted file mode 100644 index 16c5304..0000000 --- a/src/main/java/com/example/jxbrowser/Tab.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2000-2017 TeamDev Ltd. All rights reserved. - * TeamDev PROPRIETARY and CONFIDENTIAL. - * Use is subject to license terms. - */ - -package com.example.jxbrowser; - -/** - * @author TeamDev Ltd. - */ -public class Tab { - - private final TabCaption caption; - private final TabContent content; - - public Tab(TabCaption caption, TabContent content) { - this.caption = caption; - this.content = content; - } - - public TabCaption getCaption() { - return caption; - } - - public TabContent getContent() { - return content; - } -} diff --git a/src/main/java/com/example/jxbrowser/TabButton.java b/src/main/java/com/example/jxbrowser/TabButton.java deleted file mode 100644 index 223fad1..0000000 --- a/src/main/java/com/example/jxbrowser/TabButton.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (c) 2000-2017 TeamDev Ltd. All rights reserved. - * TeamDev PROPRIETARY and CONFIDENTIAL. - * Use is subject to license terms. - */ - -package com.example.jxbrowser; - -import javax.swing.*; - -/** - * @author TeamDev Ltd. - */ -public class TabButton extends JButton { - - public TabButton(Icon icon, String toolTipText) { - setIcon(icon); - setToolTipText(toolTipText); - setOpaque(false); - setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4)); - setContentAreaFilled(false); - setFocusable(false); - } - -} diff --git a/src/main/java/com/example/jxbrowser/TabCaption.java b/src/main/java/com/example/jxbrowser/TabCaption.java deleted file mode 100644 index c3dd9b5..0000000 --- a/src/main/java/com/example/jxbrowser/TabCaption.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * 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 javax.swing.*; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -/** - * @author TeamDev Ltd. - */ -public class TabCaption extends JPanel { - - private boolean selected; - private TabCaptionComponent component; - - public TabCaption() { - setLayout(new BorderLayout()); - setOpaque(false); - add(createComponent(), BorderLayout.CENTER); - add(Box.createHorizontalStrut(1), BorderLayout.EAST); - } - - private JComponent createComponent() { - component = new TabCaptionComponent(); - component.addPropertyChangeListener("CloseButtonPressed", new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent evt) { - firePropertyChange("CloseButtonPressed", evt.getOldValue(), evt.getNewValue()); - } - }); - component.addPropertyChangeListener("TabClicked", new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent evt) { - setSelected(true); - } - }); - return component; - } - - @Override - public Dimension getPreferredSize() { - return new Dimension(155, 26); - } - - @Override - public Dimension getMinimumSize() { - return new Dimension(50, 26); - } - - @Override - public Dimension getMaximumSize() { - return getPreferredSize(); - } - - public void setTitle(String title) { - component.setTitle(title); - } - - public boolean isSelected() { - return selected; - } - - public void setSelected(boolean selected) { - boolean oldValue = this.selected; - this.selected = selected; - component.setSelected(selected); - firePropertyChange("TabSelected", oldValue, selected); - } - - private static class TabCaptionComponent extends JPanel { - - private final Color defaultBackground; - private JLabel label; - - private TabCaptionComponent() { - defaultBackground = getBackground(); - setLayout(new BorderLayout()); - setOpaque(false); - add(createLabel(), BorderLayout.CENTER); - add(createCloseButton(), BorderLayout.EAST); - } - - private JComponent createLabel() { - label = new JLabel(); - label.setOpaque(false); - label.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0)); - label.addMouseListener(new MouseAdapter() { - @Override - public void mousePressed(MouseEvent e) { - if (e.getButton() == MouseEvent.BUTTON1) { - firePropertyChange("TabClicked", false, true); - } - if (e.getButton() == MouseEvent.BUTTON2) { - firePropertyChange("CloseButtonPressed", false, true); - } - } - }); - return label; - } - - private JComponent createCloseButton() { - JButton closeButton = new JButton(); - closeButton.setOpaque(false); - closeButton.setToolTipText("Close"); - closeButton.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); - 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("CloseButtonPressed", false, true); - } - }); - return closeButton; - } - - public void setTitle(final String title) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - label.setText(title); - label.setToolTipText(title); - } - }); - } - - public void setSelected(boolean selected) { - setBackground(selected ? defaultBackground : new Color(150, 150, 150)); - repaint(); - } - - @Override - public void paint(Graphics g) { - Graphics2D g2d = (Graphics2D) g.create(); - g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); - g2d.setPaint( - new GradientPaint(0, 0, Color.LIGHT_GRAY, 0, getHeight(), getBackground())); - g2d.fillRect(0, 0, getWidth(), getHeight()); - g2d.dispose(); - super.paint(g); - } - } -} diff --git a/src/main/java/com/example/jxbrowser/TabCaptions.java b/src/main/java/com/example/jxbrowser/TabCaptions.java deleted file mode 100644 index 3ff61f5..0000000 --- a/src/main/java/com/example/jxbrowser/TabCaptions.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2000-2017 TeamDev Ltd. All rights reserved. - * TeamDev PROPRIETARY and CONFIDENTIAL. - * Use is subject to license terms. - */ - -package com.example.jxbrowser; - -import javax.swing.*; -import java.awt.*; - -/** - * @author TeamDev Ltd. - */ -public class TabCaptions extends JPanel { - - private TabCaption selectedTab; - - private JPanel tabsPane; - private JPanel buttonsPane; - - public TabCaptions() { - createUI(); - } - - private void createUI() { - setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); - setBackground(Color.DARK_GRAY); - add(createItemsPane()); - add(createButtonsPane()); - add(Box.createHorizontalGlue()); - } - - private JComponent createItemsPane() { - tabsPane = new JPanel(); - tabsPane.setOpaque(false); - tabsPane.setLayout(new BoxLayout(tabsPane, BoxLayout.X_AXIS)); - return tabsPane; - } - - private JComponent createButtonsPane() { - buttonsPane = new JPanel(); - buttonsPane.setOpaque(false); - buttonsPane.setLayout(new BoxLayout(buttonsPane, BoxLayout.X_AXIS)); - return buttonsPane; - } - - public void addTab(TabCaption item) { - tabsPane.add(item); - } - - public void removeTab(TabCaption item) { - tabsPane.remove(item); - } - - public void addTabButton(TabButton button) { - buttonsPane.add(button); - } - - public TabCaption getSelectedTab() { - return selectedTab; - } - - public void setSelectedTab(TabCaption selectedTab) { - this.selectedTab = selectedTab; - this.selectedTab.setSelected(true); - } -} diff --git a/src/main/java/com/example/jxbrowser/TabContent.java b/src/main/java/com/example/jxbrowser/TabContent.java deleted file mode 100644 index f0d3bda..0000000 --- a/src/main/java/com/example/jxbrowser/TabContent.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * 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.teamdev.jxbrowser.chromium.events.FinishLoadingEvent; -import com.teamdev.jxbrowser.chromium.events.LoadAdapter; -import com.teamdev.jxbrowser.chromium.events.TitleEvent; -import com.teamdev.jxbrowser.chromium.events.TitleListener; -import com.teamdev.jxbrowser.chromium.swing.BrowserView; - -import javax.swing.*; -import java.awt.*; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -/** - * @author TeamDev Ltd. - */ -public class TabContent extends JPanel { - - private final BrowserView browserView; - private final ToolBar toolBar; - private final JComponent jsConsole; - private final JComponent container; - private final JComponent browserContainer; - - public TabContent(final BrowserView browserView) { - this.browserView = browserView; - this.browserView.getBrowser().addLoadListener(new LoadAdapter() { - @Override - public void onFinishLoadingFrame(FinishLoadingEvent event) { - if (event.isMainFrame()) { - firePropertyChange("PageTitleChanged", null, - TabContent.this.browserView.getBrowser().getTitle()); - } - } - }); - - this.browserView.getBrowser().addTitleListener(new TitleListener() { - @Override - public void onTitleChange(TitleEvent event) { - firePropertyChange("PageTitleChanged", null, event.getTitle()); - } - }); - - browserContainer = createBrowserContainer(); - jsConsole = createConsole(); - toolBar = createToolBar(browserView); - - container = new JPanel(new BorderLayout()); - container.add(browserContainer, BorderLayout.CENTER); - - setLayout(new BorderLayout()); - add(toolBar, BorderLayout.NORTH); - add(container, BorderLayout.CENTER); - } - - private ToolBar createToolBar(BrowserView browserView) { - ToolBar toolBar = new ToolBar(browserView); - toolBar.addPropertyChangeListener("TabClosed", new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent evt) { - firePropertyChange("TabClosed", false, true); - } - }); - toolBar.addPropertyChangeListener("JSConsoleDisplayed", new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent evt) { - showConsole(); - } - }); - toolBar.addPropertyChangeListener("JSConsoleClosed", new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent evt) { - hideConsole(); - } - }); - return toolBar; - } - - private void hideConsole() { - showComponent(browserContainer); - } - - private void showComponent(JComponent component) { - container.removeAll(); - container.add(component, BorderLayout.CENTER); - validate(); - } - - private void showConsole() { - JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT); - splitPane.add(browserContainer, JSplitPane.TOP); - splitPane.add(jsConsole, JSplitPane.BOTTOM); - splitPane.setResizeWeight(0.8); - splitPane.setBorder(BorderFactory.createEmptyBorder()); - showComponent(splitPane); - } - - private JComponent createConsole() { - JSConsole result = new JSConsole(browserView.getBrowser()); - result.addPropertyChangeListener("JSConsoleClosed", new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent evt) { - hideConsole(); - toolBar.didJSConsoleClose(); - } - }); - return result; - } - - private JComponent createBrowserContainer() { - JPanel container = new JPanel(new BorderLayout()); - container.add(browserView, BorderLayout.CENTER); - return container; - } - - public void dispose() { - browserView.getBrowser().dispose(); - } -} diff --git a/src/main/java/com/example/jxbrowser/TabFactory.java b/src/main/java/com/example/jxbrowser/TabFactory.java deleted file mode 100644 index 43f6cd0..0000000 --- a/src/main/java/com/example/jxbrowser/TabFactory.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * 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.teamdev.jxbrowser.chromium.Browser; -import com.teamdev.jxbrowser.chromium.swing.BrowserView; -import com.teamdev.jxbrowser.chromium.swing.DefaultDialogHandler; -import com.teamdev.jxbrowser.chromium.swing.DefaultDownloadHandler; -import com.teamdev.jxbrowser.chromium.swing.DefaultPopupHandler; - -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -/** - * @author TeamDev Ltd. - */ -public final class TabFactory { - - public static Tab createFirstTab() { - return createTab("http://192.168.88.103"); - } - - public static Tab createTab() { - return createTab("about:blank"); - } - - public static Tab createTab(String url) { - Browser browser = new Browser(); - BrowserView browserView = new BrowserView(browser); - TabContent tabContent = new TabContent(browserView); - - browser.setDownloadHandler(new DefaultDownloadHandler(browserView)); - browser.setDialogHandler(new DefaultDialogHandler(browserView)); - browser.setPopupHandler(new DefaultPopupHandler()); - - final TabCaption tabCaption = new TabCaption(); - tabCaption.setTitle("about:blank"); - - tabContent.addPropertyChangeListener("PageTitleChanged", new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent evt) { - tabCaption.setTitle((String) evt.getNewValue()); - } - }); - - browser.loadURL(url); - return new Tab(tabCaption, tabContent); - } -} diff --git a/src/main/java/com/example/jxbrowser/TabbedPane.java b/src/main/java/com/example/jxbrowser/TabbedPane.java deleted file mode 100644 index 6a70172..0000000 --- a/src/main/java/com/example/jxbrowser/TabbedPane.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright (c) 2000-2017 TeamDev Ltd. All rights reserved. - * TeamDev PROPRIETARY and CONFIDENTIAL. - * Use is subject to license terms. - */ - -package com.example.jxbrowser; - -import javax.swing.*; -import java.awt.*; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.util.ArrayList; -import java.util.List; - -/** - * @author TeamDev Ltd. - */ -public class TabbedPane extends JPanel { - - private final List tabs; - private final TabCaptions captions; - private final JComponent contentContainer; - - public TabbedPane() { - this.captions = new TabCaptions(); - this.tabs = new ArrayList(); - this.contentContainer = new JPanel(new BorderLayout()); - - setLayout(new BorderLayout()); - add(captions, BorderLayout.NORTH); - add(contentContainer, BorderLayout.CENTER); - } - - public void disposeAllTabs() { - for (Tab tab : getTabs()) { - disposeTab(tab); - } - } - - private void disposeTab(Tab tab) { - tab.getCaption().setSelected(false); - tab.getContent().dispose(); - removeTab(tab); - if (hasTabs()) { - Tab firstTab = getFirstTab(); - firstTab.getCaption().setSelected(true); - } else { - Window window = SwingUtilities.getWindowAncestor(this); - if (window != null) { - window.setVisible(false); - window.dispose(); - } - } - } - - private Tab findTab(TabCaption item) { - for (Tab tab : getTabs()) { - if (tab.getCaption().equals(item)) { - return tab; - } - } - return null; - } - - public void addTab(final Tab tab) { - TabCaption caption = tab.getCaption(); - caption.addPropertyChangeListener("CloseButtonPressed", new TabCaptionCloseTabListener()); - caption.addPropertyChangeListener("TabSelected", new SelectTabListener()); - - TabContent content = tab.getContent(); - content.addPropertyChangeListener("TabClosed", new TabContentCloseTabListener()); - - captions.addTab(caption); - tabs.add(tab); - validate(); - repaint(); - } - - private boolean hasTabs() { - return !tabs.isEmpty(); - } - - private Tab getFirstTab() { - return tabs.get(0); - } - - private List getTabs() { - return new ArrayList(tabs); - } - - public void removeTab(Tab tab) { - TabCaption tabCaption = tab.getCaption(); - captions.removeTab(tabCaption); - tabs.remove(tab); - validate(); - repaint(); - } - - public void addTabButton(TabButton button) { - captions.addTabButton(button); - } - - public void selectTab(Tab tab) { - TabCaption tabCaption = tab.getCaption(); - TabCaption selectedTab = captions.getSelectedTab(); - if (selectedTab != null && !selectedTab.equals(tabCaption)) { - selectedTab.setSelected(false); - } - captions.setSelectedTab(tabCaption); - } - - private class TabCaptionCloseTabListener implements PropertyChangeListener { - public void propertyChange(PropertyChangeEvent evt) { - TabCaption caption = (TabCaption) evt.getSource(); - Tab tab = findTab(caption); - disposeTab(tab); - } - } - - private class SelectTabListener implements PropertyChangeListener { - public void propertyChange(PropertyChangeEvent evt) { - TabCaption caption = (TabCaption) evt.getSource(); - Tab tab = findTab(caption); - if (caption.isSelected()) { - selectTab(tab); - } - if (!caption.isSelected()) { - TabContent content = tab.getContent(); - contentContainer.remove(content); - contentContainer.validate(); - contentContainer.repaint(); - } else { - final TabContent content = tab.getContent(); - contentContainer.add(content, BorderLayout.CENTER); - contentContainer.validate(); - contentContainer.repaint(); - } - } - } - - private class TabContentCloseTabListener implements PropertyChangeListener { - public void propertyChange(PropertyChangeEvent evt) { - TabContent content = (TabContent) evt.getSource(); - Tab tab = findTab(content); - disposeTab(tab); - } - - private Tab findTab(TabContent content) { - for (Tab tab : getTabs()) { - if (tab.getContent().equals(content)) { - return tab; - } - } - return null; - } - } -} diff --git a/src/main/java/com/example/jxbrowser/ToolBar.java b/src/main/java/com/example/jxbrowser/ToolBar.java deleted file mode 100644 index db03a8a..0000000 --- a/src/main/java/com/example/jxbrowser/ToolBar.java +++ /dev/null @@ -1,582 +0,0 @@ -/* - * 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.BrowserPreferences; -import com.teamdev.jxbrowser.chromium.EditorCommand; -import com.teamdev.jxbrowser.chromium.SavePageType; -import com.teamdev.jxbrowser.chromium.events.Callback; -import com.teamdev.jxbrowser.chromium.events.FinishLoadingEvent; -import com.teamdev.jxbrowser.chromium.events.LoadAdapter; -import com.teamdev.jxbrowser.chromium.events.ProvisionalLoadingEvent; -import com.teamdev.jxbrowser.chromium.events.StartLoadingEvent; -import com.teamdev.jxbrowser.chromium.swing.BrowserView; - -import javax.swing.*; -import javax.swing.event.MenuEvent; -import javax.swing.event.MenuListener; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.InputEvent; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.io.File; - -/** - * @author TeamDev Ltd. - */ -public class ToolBar extends JPanel { - private static final String RUN_JAVASCRIPT = "Run JavaScript..."; - private static final String CLOSE_JAVASCRIPT = "Close JavaScript Console"; - private static final String DEFAULT_URL = "about:blank"; - private final JTextField addressBar; - private final BrowserView browserView; - private JButton backwardButton; - private JButton forwardButton; - private JButton refreshButton; - private JButton stopButton; - private JMenuItem consoleMenuItem; - - public ToolBar(BrowserView browserView) { - this.browserView = browserView; - addressBar = createAddressBar(); - setLayout(new GridBagLayout()); - add(createActionsPane(), - new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, - GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0)); - add(addressBar, new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0, - GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(4, 0, 4, 5), 0, 0)); - add(createMenuButton(), new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0, - GridBagConstraints.LINE_END, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 5), - 0, 0)); - } - - private static JButton createBackwardButton(final Browser browser) { - return createButton("Back", new AbstractAction() { - public void actionPerformed(ActionEvent e) { - browser.goBack(); - } - }); - } - - private static JButton createForwardButton(final Browser browser) { - return createButton("Forward", new AbstractAction() { - public void actionPerformed(ActionEvent e) { - browser.goForward(); - } - }); - } - - private static JButton createRefreshButton(final Browser browser) { - return createButton("Refresh", new AbstractAction() { - public void actionPerformed(ActionEvent e) { - browser.reload(); - } - }); - } - - private static JButton createStopButton(final Browser browser) { - return createButton("Stop", new AbstractAction() { - public void actionPerformed(ActionEvent e) { - browser.stop(); - } - }); - } - - private static JButton createButton(String caption, Action action) { - ActionButton button = new ActionButton(caption, action); - String imageName = caption.toLowerCase(); - button.setIcon(Resources.getIcon(imageName + ".png")); - button.setRolloverIcon(Resources.getIcon(imageName + "-selected.png")); - return button; - } - - private static JCheckBoxMenuItem createCheckBoxMenuItem(String title, boolean selected, - final CheckBoxMenuItemCallback action) { - final JCheckBoxMenuItem menuItem = new JCheckBoxMenuItem(title, selected); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - action.call(menuItem.isSelected()); - } - }); - return menuItem; - } - - public void didJSConsoleClose() { - consoleMenuItem.setText(RUN_JAVASCRIPT); - } - - private JPanel createActionsPane() { - backwardButton = createBackwardButton(browserView.getBrowser()); - forwardButton = createForwardButton(browserView.getBrowser()); - refreshButton = createRefreshButton(browserView.getBrowser()); - stopButton = createStopButton(browserView.getBrowser()); - - JPanel actionsPanel = new JPanel(); - actionsPanel.add(backwardButton); - actionsPanel.add(forwardButton); - actionsPanel.add(refreshButton); - actionsPanel.add(stopButton); - return actionsPanel; - } - - private JTextField createAddressBar() { - final JTextField result = new JTextField(DEFAULT_URL); - result.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - browserView.getBrowser().loadURL(result.getText()); - } - }); - - browserView.getBrowser().addLoadListener(new LoadAdapter() { - @Override - public void onStartLoadingFrame(StartLoadingEvent event) { - if (event.isMainFrame()) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - refreshButton.setEnabled(false); - stopButton.setEnabled(true); - } - }); - } - } - - @Override - public void onProvisionalLoadingFrame(final ProvisionalLoadingEvent event) { - if (event.isMainFrame()) { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - result.setText(event.getURL()); - result.setCaretPosition(result.getText().length()); - - Browser browser = event.getBrowser(); - forwardButton.setEnabled(browser.canGoForward()); - backwardButton.setEnabled(browser.canGoBack()); - } - }); - } - } - - @Override - public void onFinishLoadingFrame(final FinishLoadingEvent event) { - if (event.isMainFrame()) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - refreshButton.setEnabled(true); - stopButton.setEnabled(false); - } - }); - } - } - }); - return result; - } - - private JComponent createMenuButton() { - final JPopupMenu popupMenu = new JPopupMenu(); - popupMenu.add(createConsoleMenuItem()); - popupMenu.add(createGetHTMLMenuItem()); - popupMenu.add(createPopupsMenuItem()); - popupMenu.add(createUploadFileMenuItem()); - popupMenu.add(createDownloadFileMenuItem()); - popupMenu.add(createJavaScriptDialogsMenuItem()); - popupMenu.add(createPDFViewerMenuItem()); - popupMenu.add(createFlashMenuItem()); - popupMenu.add(createGoogleMapsMenuItem()); - popupMenu.add(createHTML5VideoMenuItem()); - popupMenu.add(createZoomInMenuItem()); - popupMenu.add(createZoomOutMenuItem()); - popupMenu.add(createActualSizeMenuItem()); - popupMenu.add(createSaveWebPageMenuItem()); - popupMenu.add(createClearCacheMenuItem()); - popupMenu.add(createPreferencesSubMenu()); - popupMenu.add(createExecuteCommandSubMenu()); - popupMenu.add(createPrintMenuItem()); - popupMenu.addSeparator(); - popupMenu.add(createMoreMenuItem()); - popupMenu.addSeparator(); - popupMenu.add(createAboutMenuItem()); - - final ActionButton button = new ActionButton("Preferences", null); - button.setIcon(Resources.getIcon("gear.png")); - button.addMouseListener(new MouseAdapter() { - public void mousePressed(MouseEvent e) { - if ((e.getModifiers() & InputEvent.BUTTON1_MASK) != 0) { - popupMenu.show(e.getComponent(), 0, button.getHeight()); - } else { - popupMenu.setVisible(false); - } - } - }); - return button; - } - - private Component createPrintMenuItem() { - JMenuItem menuItem = new JMenuItem("Print..."); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - browserView.getBrowser().print(); - } - }); - return menuItem; - } - - private Component createPreferencesSubMenu() { - JMenu menu = new JMenu("Preferences"); - BrowserPreferences preferences = browserView.getBrowser().getPreferences(); - menu.add(createCheckBoxMenuItem("JavaScript Enabled", preferences.isJavaScriptEnabled(), - new CheckBoxMenuItemCallback() { - public void call(boolean selected) { - BrowserPreferences preferences = browserView.getBrowser().getPreferences(); - preferences.setJavaScriptEnabled(selected); - browserView.getBrowser().setPreferences(preferences); - browserView.getBrowser().reloadIgnoringCache(); - } - })); - menu.add(createCheckBoxMenuItem("Images Enabled", preferences.isImagesEnabled(), - new CheckBoxMenuItemCallback() { - public void call(boolean selected) { - BrowserPreferences preferences = browserView.getBrowser().getPreferences(); - preferences.setImagesEnabled(selected); - browserView.getBrowser().setPreferences(preferences); - browserView.getBrowser().reloadIgnoringCache(); - } - })); - menu.add(createCheckBoxMenuItem("Plugins Enabled", preferences.isPluginsEnabled(), - new CheckBoxMenuItemCallback() { - public void call(boolean selected) { - BrowserPreferences preferences = browserView.getBrowser().getPreferences(); - preferences.setPluginsEnabled(selected); - browserView.getBrowser().setPreferences(preferences); - browserView.getBrowser().reloadIgnoringCache(); - } - })); - menu.add(createCheckBoxMenuItem("JavaScript Can Access Clipboard", - preferences.isJavaScriptCanAccessClipboard(), new CheckBoxMenuItemCallback() { - public void call(boolean selected) { - BrowserPreferences preferences = browserView.getBrowser().getPreferences(); - preferences.setJavaScriptCanAccessClipboard(selected); - browserView.getBrowser().setPreferences(preferences); - browserView.getBrowser().reloadIgnoringCache(); - } - })); - menu.add(createCheckBoxMenuItem("JavaScript Can Open Windows", - preferences.isJavaScriptCanOpenWindowsAutomatically(), - new CheckBoxMenuItemCallback() { - public void call(boolean selected) { - BrowserPreferences preferences = browserView.getBrowser().getPreferences(); - preferences.setJavaScriptCanOpenWindowsAutomatically(selected); - browserView.getBrowser().setPreferences(preferences); - browserView.getBrowser().reloadIgnoringCache(); - } - })); - return menu; - } - - private Component createClearCacheMenuItem() { - JMenuItem menuItem = new JMenuItem("Clear Cache"); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - browserView.getBrowser().getCacheStorage().clearCache(new Callback() { - public void invoke() { - JOptionPane.showMessageDialog(browserView, "Cache is cleared successfully.", - "Clear Cache", JOptionPane.INFORMATION_MESSAGE); - } - }); - } - }); - return menuItem; - } - - private Component createExecuteCommandSubMenu() { - final JMenu menu = new JMenu("Execute Command"); - menu.addMenuListener(new MenuListener() { - public void menuSelected(MenuEvent e) { - Component[] menuItems = menu.getMenuComponents(); - for (Component menuItem : menuItems) { - menuItem.setEnabled(browserView.getBrowser() - .isCommandEnabled(((CommandMenuItem) menuItem).getCommand())); - } - } - - public void menuDeselected(MenuEvent e) { - - } - - public void menuCanceled(MenuEvent e) { - - } - }); - - menu.add(createExecuteCommandSubMenuItem("Cut", EditorCommand.CUT)); - menu.add(createExecuteCommandSubMenuItem("Copy", EditorCommand.COPY)); - menu.add(createExecuteCommandSubMenuItem("Paste", EditorCommand.PASTE)); - menu.add(createExecuteCommandSubMenuItem("Select All", EditorCommand.SELECT_ALL)); - menu.add(createExecuteCommandSubMenuItem("Unselect", EditorCommand.UNSELECT)); - menu.add(createExecuteCommandSubMenuItem("Undo", EditorCommand.UNDO)); - menu.add(createExecuteCommandSubMenuItem("Redo", EditorCommand.REDO)); - menu.add(createExecuteCommandSubMenuItem("Insert Text...", "Insert Text", - EditorCommand.INSERT_TEXT)); - menu.add(createExecuteCommandSubMenuItem("Find Text...", "Find Text", - EditorCommand.FIND_STRING)); - return menu; - } - - private Component createExecuteCommandSubMenuItem(final String commandName, - final EditorCommand command) { - final CommandMenuItem menuItem = new CommandMenuItem(commandName, command); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - browserView.getBrowser().executeCommand(command); - } - }); - return menuItem; - } - - private Component createExecuteCommandSubMenuItem(final String commandName, - final String dialogTitle, final EditorCommand command) { - final CommandMenuItem menuItem = new CommandMenuItem(commandName, command); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - String value = JOptionPane - .showInputDialog(browserView, "Command value:", dialogTitle, - JOptionPane.PLAIN_MESSAGE); - browserView.getBrowser().executeCommand(command, value); - } - }); - return menuItem; - } - - private Component createMoreMenuItem() { - JMenuItem menuItem = new JMenuItem("More Features..."); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - browserView.getBrowser().loadURL( - "https://jxbrowser.support.teamdev.com/support/solutions/9000049010"); - } - }); - return menuItem; - } - - private Component createSaveWebPageMenuItem() { - JMenuItem menuItem = new JMenuItem("Save Web Page..."); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - JFileChooser fileChooser = new JFileChooser(); - fileChooser.setSelectedFile(new File("my-web-page.html")); - int result = fileChooser.showSaveDialog(browserView); - if (result == JFileChooser.APPROVE_OPTION) { - File selectedFile = fileChooser.getSelectedFile(); - String dirPath = new File(selectedFile.getParent(), "resources") - .getAbsolutePath(); - browserView.getBrowser().saveWebPage(selectedFile.getAbsolutePath(), dirPath, - SavePageType.COMPLETE_HTML); - } - } - }); - return menuItem; - } - - private Component createActualSizeMenuItem() { - JMenuItem menuItem = new JMenuItem("Actual Size"); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - browserView.getBrowser().zoomReset(); - } - }); - return menuItem; - } - - private Component createZoomOutMenuItem() { - JMenuItem menuItem = new JMenuItem("Zoom Out"); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - browserView.getBrowser().zoomOut(); - } - }); - return menuItem; - } - - private Component createZoomInMenuItem() { - JMenuItem menuItem = new JMenuItem("Zoom In"); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - browserView.getBrowser().zoomIn(); - } - }); - return menuItem; - } - - private Component createHTML5VideoMenuItem() { - JMenuItem menuItem = new JMenuItem("HTML5 Video"); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - browserView.getBrowser() - .loadURL("http://www.w3.org/2010/05/video/mediaevents.html"); - } - }); - return menuItem; - } - - private Component createGoogleMapsMenuItem() { - JMenuItem menuItem = new JMenuItem("Google Maps"); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - browserView.getBrowser().loadURL("https://maps.google.com/"); - } - }); - return menuItem; - } - - private Component createJavaScriptDialogsMenuItem() { - JMenuItem menuItem = new JMenuItem("JavaScript Dialogs"); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - browserView.getBrowser().loadURL("http://www.javascripter.net/faq/alert.htm"); - } - }); - return menuItem; - } - - private Component createDownloadFileMenuItem() { - JMenuItem menuItem = new JMenuItem("Download File"); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - browserView.getBrowser().loadURL( - "https://s3.amazonaws.com/cloud.teamdev.com/downloads/demo/jxbrowserdemo.jnlp"); - } - }); - return menuItem; - } - - private Component createGetHTMLMenuItem() { - JMenuItem menuItem = new JMenuItem("Get HTML"); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - String html = browserView.getBrowser().getHTML(); - Window window = SwingUtilities.getWindowAncestor(browserView); - JDialog dialog = new JDialog(window); - dialog.setModal(true); - dialog.setContentPane(new JScrollPane(new JTextArea(html))); - dialog.setSize(700, 500); - dialog.setLocationRelativeTo(null); - dialog.setVisible(true); - - } - }); - return menuItem; - } - - private JMenuItem createConsoleMenuItem() { - consoleMenuItem = new JMenuItem(RUN_JAVASCRIPT); - consoleMenuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - if (RUN_JAVASCRIPT.equals(consoleMenuItem.getText())) { - consoleMenuItem.setText(CLOSE_JAVASCRIPT); - firePropertyChange("JSConsoleDisplayed", false, true); - } else { - consoleMenuItem.setText(RUN_JAVASCRIPT); - firePropertyChange("JSConsoleClosed", false, true); - } - } - }); - return consoleMenuItem; - } - - private JMenuItem createUploadFileMenuItem() { - JMenuItem menuItem = new JMenuItem("Upload File"); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - browserView.getBrowser() - .loadURL("http://www.cs.tut.fi/~jkorpela/forms/file.html#example"); - } - }); - return menuItem; - } - - private JMenuItem createPopupsMenuItem() { - JMenuItem menuItem = new JMenuItem("Popup Windows"); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - browserView.getBrowser().loadURL("http://www.popuptest.com"); - } - }); - return menuItem; - } - - private JMenuItem createPDFViewerMenuItem() { - JMenuItem menuItem = new JMenuItem("PDF Viewer"); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - browserView.getBrowser().loadURL("http://www.orimi.com/pdf-test.pdf"); - } - }); - return menuItem; - } - - private JMenuItem createFlashMenuItem() { - JMenuItem menuItem = new JMenuItem("Adobe Flash"); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - browserView.getBrowser().loadURL("http://helpx.adobe.com/flash-player.html"); - } - }); - return menuItem; - } - - private JMenuItem createAboutMenuItem() { - JMenuItem menuItem = new JMenuItem("About JxBrowser Demo"); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - Frame parentFrame = (Frame) SwingUtilities.getWindowAncestor(ToolBar.this); - AboutDialog aboutDialog = new AboutDialog(parentFrame); - aboutDialog.setVisible(true); - } - }); - return menuItem; - } - - private boolean isFocusRequired() { - String url = addressBar.getText(); - return url.isEmpty() || url.equals(DEFAULT_URL); - } - - @Override - public void addNotify() { - super.addNotify(); - SwingUtilities.invokeLater(new Runnable() { - public void run() { - if (isFocusRequired()) { - addressBar.requestFocus(); - addressBar.selectAll(); - } - } - }); - } - - private interface CheckBoxMenuItemCallback { - void call(boolean selected); - } - - private static class ActionButton extends JButton { - private ActionButton(String hint, Action action) { - super(action); - setContentAreaFilled(false); - setBorder(BorderFactory.createEmptyBorder()); - setBorderPainted(false); - setRolloverEnabled(true); - setToolTipText(hint); - setText(null); - setFocusable(false); - setDefaultCapable(false); - } - } -} diff --git a/src/main/java/com/example/jxbrowser/WebClient.java b/src/main/java/com/example/jxbrowser/WebClient.java deleted file mode 100644 index ae36683..0000000 --- a/src/main/java/com/example/jxbrowser/WebClient.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.example.jxbrowser; - -import com.teamdev.jxbrowser.chromium.Browser; -import com.teamdev.jxbrowser.chromium.ba; -import com.teamdev.jxbrowser.chromium.swing.BrowserView; -import com.teamdev.jxbrowser.chromium.swing.DefaultDialogHandler; -import com.teamdev.jxbrowser.chromium.swing.DefaultDownloadHandler; -import com.teamdev.jxbrowser.chromium.swing.DefaultPopupHandler; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.FocusListener; -import java.awt.event.KeyListener; -import java.awt.event.MouseListener; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; -import java.math.BigInteger; -import java.util.concurrent.TimeUnit; - -public class WebClient extends JFrame { - - static { - // 破解jxbrowser的代码块 导入下面的包是关键 - // import com.teamdev.jxbrowser.chromium.ba; - try { - Field e = ba.class.getDeclaredField("e"); - e.setAccessible(true); - Field f = ba.class.getDeclaredField("f"); - f.setAccessible(true); - Field modifersField = Field.class.getDeclaredField("modifiers"); - modifersField.setAccessible(true); - modifersField.setInt(e, e.getModifiers() & ~Modifier.FINAL); - modifersField.setInt(f, f.getModifiers() & ~Modifier.FINAL); - e.set(null, new BigInteger("1")); - f.set(null, new BigInteger("1")); - modifersField.setAccessible(false); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - - private Browser browser; - - public static void main(String[] args) throws InterruptedException { - WebClient webClient = new WebClient(); - webClient.loadUrl("http://www.baidu.com"); - TimeUnit.SECONDS.sleep(3); - - String html = webClient.getBrowser().getHTML(); - System.out.println(html); - } - - public Browser getBrowser() { - return browser; - } - - public WebClient() { - super(); - initClient(new String[]{}); - } - - private void initClient(String[] args) { - setTitle("WebClient"); - - browser = new Browser(); - BrowserView browserView = new BrowserView(browser); - browser.setDownloadHandler(new DefaultDownloadHandler(browserView)); - browser.setDialogHandler(new DefaultDialogHandler(browserView)); - browser.setPopupHandler(new DefaultPopupHandler()); - - - getContentPane().add(browserView, BorderLayout.CENTER); - setSize(800, 600);//初始大小 - setLocation(0, 0);//位置 - //setUndecorated(true); - //setAlwaysOnTop(true); - addWindowListener(new WindowAdapter() { - @Override - public void windowClosing(WindowEvent e) { - // 关闭应用时要释放资源 - dispose(); - System.exit(0);//0正常退出,1非正常退出 - } - }); - - // 显示 - setVisible(true); - - loadUrl("about:blank"); - } - - /** - * 加载地址 - * - * @param url 地址 - */ - public void loadUrl(String url) { - browser.loadURL(url); - } - - /** - * 全屏模式 - */ - public void setMaximized() { - // 设置为全屏模式 - setExtendedState(JFrame.MAXIMIZED_BOTH); - } - - /** - * 刷新 - */ - public void reload() { - - } - - /** - * 强制刷新 - */ - public void reloadForce() { - - } - - public void addFocusListener(FocusListener listener) { - //cefBrowser.getUIComponent().addFocusListener(listener); - } - - public void addMouseListener(MouseListener listener) { - //cefBrowser.getUIComponent().addMouseListener(listener); - } - - public void addKeyListener(KeyListener listener) { - //cefBrowser.getUIComponent().addKeyListener(listener); - } - - public void executeJavaScript(String javascript) { - //cefBrowser.executeJavaScript(javascript, null, 1); - } - - public void close() { - - dispose(); - System.exit(0); - } -} diff --git a/src/main/java/com/example/jxbrowser/resources/Resources.java b/src/main/java/com/example/jxbrowser/resources/Resources.java deleted file mode 100644 index 35453a6..0000000 --- a/src/main/java/com/example/jxbrowser/resources/Resources.java +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright (c) 2000-2017 TeamDev Ltd. All rights reserved. - * TeamDev PROPRIETARY and CONFIDENTIAL. - * Use is subject to license terms. - */ - -package com.example.jxbrowser.resources; - -import javax.swing.*; - -public class Resources { - - public static ImageIcon getIcon(String fileName) { -// return new ImageIcon(Resources.class.getResource(fileName)); - return null; - } -} diff --git a/src/main/java/com/example/jxbrowser/resources/back-selected.png b/src/main/java/com/example/jxbrowser/resources/back-selected.png deleted file mode 100644 index 84e6d6e9c4c95ae6c9066e832b6711c155f16549..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1569 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 Ef-x7Ni~s-t diff --git a/src/main/java/com/example/jxbrowser/resources/forward-selected.png b/src/main/java/com/example/jxbrowser/resources/forward-selected.png deleted file mode 100644 index 3cb3bc8ee384f28e1350741df3008e32938dccb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1558 zcmV+x2I={UP)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ>j7da6RCwBAWWWN_($ZMd z-+%uZ{`~&;?DyaQr+@$XxBkhKhwEp}n)Mr9FF*h>q6^HK*%QFZ#L_P;BB~%JF3!Nm z$H&0J!piXb&tHZwU%oNCe*2!`$Mk`d-?eU z3pBN~8HEG|8JJm^7#M-@&)>fczkdB;`0?{M!?*9h7{34b$?*Ek2Zqbn?*4!K_G5o% zdtC`o|9_An00G1dGYx21pQN~Cp^2#}qlkzg12+#R0|yre13L#B!;4=p7|y@F#30Qp z!NA7E%J3hkm4$_cK~z+P@$;7-mOA<-yvL6o*ab2NAb`LwoIRr>NL)m0jisd}BfkJI z0}BTS10xd$P=0L@PZ^X2 z zXJQo#1_&S~1}3IJaWM%<1TZs$y$Lf61d3IQ8T5IK8P;9h!N3RjpW)-1Ck%_u zFJmZisAu5j;seG$qZB{@4#_A7Ko|z0IBVSfFRF?2qwR{K|3Csft9pKDKhDw%bmH(+ z%Mg9tQK~cY#^pmC>eUEDraTjzMB7wjF*K7_S+4+M0cN9TU%q}<-~dKQmUBKE|1j=TwLr7te_YNM$(^ue;A@SW-uIhc7#D!NuA-_kM9gm z@4sMRe9po!$$KJ$D6b3y3mXr^<7Y1z{{H!U1|WcdF8saz$TpFxaQ4(MBM1~v`>hRatD z0E6StdVm08xqSKZ8U_Z|4w*L}Wrc~XTaO}<*24P-cBL4b? z;pM|OV3&am69pQ^z{118#wpD3_QMB;E0?c6x^?NnT7UpzzIN@}UrS57N1wlZ4;2#? zW&8&;5EMxu{1Y5ee;78M-Nx|o)fWcNciaqnzFT>)+Oa8xq z`!@O5p*dFo0tlXh%PX5EN=S(38R%;RUG@*017MO@UR`H+`tdn~rMxWz4~HXoY#cdhR!0I3BCAe7>(xU9ZkKu|c(z`%f!ADCD{IRI29F)}iNlLja@ zK@k87vv)vmu3oeD|HB6lC+=L=TLde<00Ic3fX&IT31VSo>z9<0m6KOcVh|IPWZ(kE zJ`)QYI0&9Uf5C9&%4LSjm#;kf`QvBdwza+Mko5xu5F@rKAT%_TO-NiV`2T;Vpuhha zjTwMB;1940`2G9Ov%i1-pZWFs@4A~8@2|UdZS^m7y#N6Q00Sx^szYd6EC2ui07*qo IM6N<$f;|?@asU7T diff --git a/src/main/java/com/example/jxbrowser/resources/forward.png b/src/main/java/com/example/jxbrowser/resources/forward.png deleted file mode 100644 index 9d7d1e0117e8de02fe22fa2fb3c82b5bb6fbb294..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1545 zcmV+k2KM=hP)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ>e@R3^RCwBAWWWN_($ZKZL^*?)7?=b8{`+tG_aCFw z-@pGDe*O9X?9ZQnr+@wayZ+3Xlk3l(J^LG7FF*h>q6@Uv7X`4gu=I;dN-0Q7OEU-x z3NWy+urd7l{fFV>r!Nf8U%p{@@bDSK)2A;VeE$v(K&?PuFi1#toN6F<-zJ|N~|n15p#gPwspgT12(1B)yZ zL-2}JhIhZ-F>r9OF|e_+Ft9NHV=yx_XJlq(>o+zwW(5c!CQUV|Ui#U>~Mn1JB|3>}oXD%CG#FcYw1IC$n10~1iSw2~MDgVaBUq~&=G zFFw71sQmwzK}kge$Y2Qs2p|?vIujHW1Z#f&0nGvkAeMi?M9ad$3QiiG z2c|N-`u~g})g_ccl1q$%kByh%_rE_3Z+^UEc>eVj!@G|k7(RUX%xm%!l{=@50gf-KBFC- zsWe=iy_{Hgk{pw{-sEy2&r2P71NSo?hL+$K24Q|#239tHh6hidGW-Ra1rR_izkdB$|KQ=%5J?G9aO{E# z0g!DR>}=qe@7zC?VaLsV3{qNR4Bx(fXLxt#69eaCE{0bBCSYX9F)*?6F|c!sFkCpd z4On>mT@MgIEbrgHUBk%4+M)RJovfIsAkf)=7`_9�E@bEX+&{N3Wh^;Ns_C`1<)f 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 SIRyRy00001L2_kP?9l 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 diff --git a/src/main/java/com/example/jxbrowser/resources/home-selected.png b/src/main/java/com/example/jxbrowser/resources/home-selected.png deleted file mode 100644 index 874785d387f061a7177009474c4616a8d2545ae3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1412 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 diff --git a/src/main/java/com/example/jxbrowser/resources/jxbrowser16x16.png b/src/main/java/com/example/jxbrowser/resources/jxbrowser16x16.png deleted file mode 100644 index 20b1fef14e806d03bbe1aabcb76378ce39431b19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XoIG6|Ln>}1{rUgjo>{el)#Xq88JB6AJsbZ^L{6|=lF=4< z>WG74f}{Dw7-k90QpTNu2R#ZUdZY|=coLSFSTnOoFi1oQ9(Q7YcMfP8gQu&X%Q~lo FCIDpXG0Ok| diff --git a/src/main/java/com/example/jxbrowser/resources/jxbrowser32x32.png b/src/main/java/com/example/jxbrowser/resources/jxbrowser32x32.png deleted file mode 100644 index 9013da240837abd5f063b06ca07fcf4cd10bc28a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1Gv7RoDAr-gYTtCQpz<|g3;)#m0e%EbZPsrBz5+X9`J?ozd ze8*O;dM3l`a5pjVMU}`|n=*%eM?XD3v@=iZ#QKhH{s}X=N^+P^hdkKjafbi3|9?FP zGjlV`l;3R=Cl<1Ls{IFoAN4F2{ob;|p3C^Wm?b179x#UWs4YKy;J^Xq)cWLvgdHtv z_A`OXCAp_4A3Sg%q4Btqp3bLiNr@E?SZ8qGGcYiSahM$3eCrHQ$A{*|#)oXP{%G$} r>t9fEpvgVYh}mS71P7~xDg(nYS7VzAhtKE&-NoSP>gTe~DWM4fF;__e diff --git a/src/main/java/com/example/jxbrowser/resources/refresh-selected.png b/src/main/java/com/example/jxbrowser/resources/refresh-selected.png deleted file mode 100644 index e0773cc2a6e5bd88c0a0ba3c849985c3dfa7a25f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1560 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 Z{Natutoq|?e2*Pc|Czq&+6G10{{Y^u?VkVu diff --git a/src/main/java/com/example/jxbrowser/resources/stop-selected.png b/src/main/java/com/example/jxbrowser/resources/stop-selected.png deleted file mode 100644 index c04fe8833dfb5f852daa4a2c74011f1b5969a360..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1500 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 Y0Nlc9uje{C)c^nh07*qoM6N<$f^b#izyJUM