refactors
This commit is contained in:
@@ -1,9 +1,12 @@
|
||||
package io.swtc;
|
||||
|
||||
import com.github.sarxos.webcam.Webcam;
|
||||
import io.swtc.proccessing.ui.iframe.*;
|
||||
import io.swtc.proccessing.ui.iframe.*; // Your custom frames
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -12,14 +15,28 @@ public class SwingIFrame {
|
||||
private final DesktopPane desktopPane;
|
||||
private final Map<JInternalFrame, EffectsPanelFrame> cameraToEffects = new HashMap<>();
|
||||
|
||||
private boolean fullscreen = false;
|
||||
private Rectangle windowedBounds;
|
||||
private boolean blackbg = false;
|
||||
private final Color bgcolor = Color.decode("#336B6A");
|
||||
private final Color defDesktopBg = Color.WHITE;
|
||||
|
||||
private final JPopupMenu popupMenu = new JPopupMenu();
|
||||
|
||||
public SwingIFrame() {
|
||||
mainFrame = new JFrame("Viewer");
|
||||
mainFrame.setSize(1280, 720);
|
||||
mainFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
|
||||
|
||||
desktopPane = new DesktopPane(cameraToEffects);
|
||||
desktopPane.setBackground(Color.WHITE);
|
||||
desktopPane.setBackground(defDesktopBg);
|
||||
mainFrame.add(desktopPane, BorderLayout.CENTER);
|
||||
|
||||
setupFullscreenToggle();
|
||||
setupBlackBg();
|
||||
initPopupMenu();
|
||||
|
||||
desktopPane.addMouseListener(popupListener());
|
||||
}
|
||||
|
||||
public void addCameraInternalFrame(Webcam webcam) {
|
||||
@@ -43,11 +60,20 @@ public class SwingIFrame {
|
||||
EffectsPanelFrame ef = cameraToEffects.remove(cameraFrame);
|
||||
if (ef != null) ef.dispose();
|
||||
desktopPane.forgetFrame(cameraFrame);
|
||||
cameraFrame.dispose();
|
||||
}
|
||||
});
|
||||
|
||||
desktopPane.add(cameraFrame);
|
||||
desktopPane.add(effectsFrame);
|
||||
|
||||
// Attach popup menu to frames and content
|
||||
MouseAdapter popup = popupListener();
|
||||
cameraFrame.addMouseListener(popup);
|
||||
cameraFrame.getContentPane().addMouseListener(popup);
|
||||
effectsFrame.addMouseListener(popup);
|
||||
effectsFrame.getContentPane().addMouseListener(popup);
|
||||
|
||||
cameraFrame.setVisible(true);
|
||||
}
|
||||
|
||||
@@ -58,12 +84,92 @@ public class SwingIFrame {
|
||||
try {
|
||||
effectsFrame.setSelected(true);
|
||||
effectsFrame.toFront();
|
||||
} catch (java.beans.PropertyVetoException ex) { JOptionPane.showMessageDialog(null,"Exception" + ex.getMessage() , "Exception", JOptionPane.ERROR_MESSAGE); }
|
||||
} catch (java.beans.PropertyVetoException ex) {
|
||||
JOptionPane.showMessageDialog(null, "Focus Error: " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private MouseAdapter popupListener() {
|
||||
return new MouseAdapter() {
|
||||
private void showPopup(MouseEvent e) {
|
||||
if (e.isPopupTrigger()) { // cross-platform trigger
|
||||
popupMenu.show(e.getComponent(), e.getX(), e.getY());
|
||||
}
|
||||
}
|
||||
@Override public void mousePressed(MouseEvent e) { showPopup(e); }
|
||||
@Override public void mouseReleased(MouseEvent e) { showPopup(e); }
|
||||
};
|
||||
}
|
||||
|
||||
private void initPopupMenu() {
|
||||
popupMenu.removeAll(); // clean slate
|
||||
|
||||
JCheckBoxMenuItem fullscreenItem = new JCheckBoxMenuItem("Fullscreen");
|
||||
fullscreenItem.addActionListener(e -> toggleFullscreen());
|
||||
|
||||
popupMenu.addPopupMenuListener(new javax.swing.event.PopupMenuListener() {
|
||||
@Override
|
||||
public void popupMenuWillBecomeVisible(javax.swing.event.PopupMenuEvent e) {
|
||||
fullscreenItem.setState(fullscreen);
|
||||
}
|
||||
@Override public void popupMenuWillBecomeInvisible(javax.swing.event.PopupMenuEvent e) {}
|
||||
@Override public void popupMenuCanceled(javax.swing.event.PopupMenuEvent e) {}
|
||||
});
|
||||
|
||||
popupMenu.add(fullscreenItem);
|
||||
}
|
||||
|
||||
private void setupBlackBg() {
|
||||
JRootPane root = mainFrame.getRootPane();
|
||||
root.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
|
||||
.put(KeyStroke.getKeyStroke("B"), "toggleBlackBg");
|
||||
root.getActionMap().put("toggleBlackBg", new AbstractAction() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
toggleBackground();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void setupFullscreenToggle() {
|
||||
JRootPane root = mainFrame.getRootPane();
|
||||
root.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
|
||||
.put(KeyStroke.getKeyStroke("F11"), "toggleFullscreen");
|
||||
root.getActionMap().put("toggleFullscreen", new AbstractAction() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
toggleFullscreen();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void toggleBackground() {
|
||||
desktopPane.setBackground(blackbg ? defDesktopBg : bgcolor);
|
||||
blackbg = !blackbg;
|
||||
desktopPane.repaint();
|
||||
}
|
||||
|
||||
/** Toggle fullscreen mode */
|
||||
private void toggleFullscreen() {
|
||||
if (!fullscreen) {
|
||||
windowedBounds = mainFrame.getBounds();
|
||||
mainFrame.dispose();
|
||||
mainFrame.setUndecorated(true);
|
||||
mainFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
|
||||
mainFrame.setVisible(true);
|
||||
} else {
|
||||
mainFrame.dispose();
|
||||
mainFrame.setUndecorated(false);
|
||||
mainFrame.setExtendedState(JFrame.NORMAL);
|
||||
mainFrame.setBounds(windowedBounds);
|
||||
mainFrame.setVisible(true);
|
||||
}
|
||||
fullscreen = !fullscreen;
|
||||
}
|
||||
|
||||
public void show() {
|
||||
mainFrame.setLocationRelativeTo(null);
|
||||
mainFrame.setVisible(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user