List of usage examples for javax.swing JSlider JSlider
public JSlider(int orientation, int min, int max, int value)
From source file:econtroller.gui.ControllerGUI.java
private void createSenseSlider() { Box hbox = Box.createHorizontalBox(); senseLabel = new JLabel("Sense every ", JLabel.CENTER); senseValueLabel = new JLabel(String.valueOf(SENSE_INIT), JLabel.CENTER); senseSecondLabel = new JLabel(" (s)", JLabel.CENTER); senseSlider = new JSlider(JSlider.HORIZONTAL, SENSE_MIN, SENSE_MAX, SENSE_INIT); senseSlider.setMajorTickSpacing(20); senseSlider.setMinorTickSpacing(5);/*from ww w .j a v a 2 s . c o m*/ senseSlider.setPaintLabels(true); senseSlider.setPaintTicks(true); senseSlider.setPaintTrack(true); senseSlider.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent changeEvent) { JSlider source = (JSlider) changeEvent.getSource(); int value = source.getValue(); senseValueLabel.setText(String.valueOf(value)); } }); hbox.add(senseLabel); hbox.add(senseValueLabel); hbox.add(senseSecondLabel); controllerDesignPanel.add(hbox); controllerDesignPanel.add(senseSlider); }
From source file:net.pms.encoders.VLCVideo.java
@Override public JComponent config() { // Apply the orientation for the locale Locale locale = new Locale(configuration.getLanguage()); ComponentOrientation orientation = ComponentOrientation.getOrientation(locale); String colSpec = FormLayoutUtil.getColSpec("right:pref, 3dlu, pref:grow, 7dlu, right:pref, 3dlu, pref:grow", orientation);// w ww. j a v a 2 s . c o m FormLayout layout = new FormLayout(colSpec, ""); // Here goes my 3rd try to learn JGoodies Form layout.setColumnGroups(new int[][] { { 1, 5 }, { 3, 7 } }); DefaultFormBuilder mainPanel = new DefaultFormBuilder(layout); mainPanel.appendSeparator(Messages.getString("VlcTrans.1")); mainPanel.append(experimentalCodecs = new JCheckBox(Messages.getString("VlcTrans.3"), configuration.isVlcExperimentalCodecs()), 3); experimentalCodecs.setContentAreaFilled(false); experimentalCodecs.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { configuration.setVlcExperimentalCodecs(e.getStateChange() == ItemEvent.SELECTED); } }); mainPanel.append(audioSyncEnabled = new JCheckBox(Messages.getString("VlcTrans.4"), configuration.isVlcAudioSyncEnabled()), 3); audioSyncEnabled.setContentAreaFilled(false); audioSyncEnabled.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { configuration.setVlcAudioSyncEnabled(e.getStateChange() == ItemEvent.SELECTED); } }); mainPanel.nextLine(); // Developer stuff. Theoretically is temporary mainPanel.appendSeparator(Messages.getString("VlcTrans.10")); // Add scale as a subpanel because it has an awkward layout mainPanel.append(Messages.getString("VlcTrans.11")); FormLayout scaleLayout = new FormLayout("pref,3dlu,pref", ""); DefaultFormBuilder scalePanel = new DefaultFormBuilder(scaleLayout); double startingScale = Double.valueOf(configuration.getVlcScale()); scalePanel.append(scale = new JTextField(String.valueOf(startingScale))); final JSlider scaleSlider = new JSlider(JSlider.HORIZONTAL, 0, 10, (int) (startingScale * 10)); scalePanel.append(scaleSlider); scaleSlider.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent ce) { String value = String.valueOf((double) scaleSlider.getValue() / 10); scale.setText(value); configuration.setVlcScale(value); } }); scale.addKeyListener(new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { String typed = scale.getText(); if (!typed.matches("\\d\\.\\d")) { return; } double value = Double.parseDouble(typed); scaleSlider.setValue((int) (value * 10)); configuration.setVlcScale(String.valueOf(value)); } }); mainPanel.append(scalePanel.getPanel(), 3); // Audio sample rate FormLayout sampleRateLayout = new FormLayout( "right:pref, 3dlu, right:pref, 3dlu, right:pref, 3dlu, left:pref", ""); DefaultFormBuilder sampleRatePanel = new DefaultFormBuilder(sampleRateLayout); sampleRateOverride = new JCheckBox(Messages.getString("VlcTrans.17"), configuration.getVlcSampleRateOverride()); sampleRatePanel.append(Messages.getString("VlcTrans.18"), sampleRateOverride); sampleRate = new JTextField(configuration.getVlcSampleRate(), 8); sampleRate.setEnabled(configuration.getVlcSampleRateOverride()); sampleRate.addKeyListener(new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { configuration.setVlcSampleRate(sampleRate.getText()); } }); sampleRatePanel.append(Messages.getString("VlcTrans.19"), sampleRate); sampleRateOverride.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { boolean checked = e.getStateChange() == ItemEvent.SELECTED; configuration.setVlcSampleRateOverride(checked); sampleRate.setEnabled(checked); } }); mainPanel.nextLine(); mainPanel.append(sampleRatePanel.getPanel(), 7); // Extra options mainPanel.nextLine(); mainPanel.append(Messages.getString("VlcTrans.20"), extraParams = new JTextField(), 5); return mainPanel.getPanel(); }
From source file:PolygonOffset.java
FloatLabelJSlider(String name, float resolution, float min, float max, float current) { this.resolution = resolution; this.min = min; this.max = max; this.current = current; if (resolution < minResolution) { resolution = minResolution;/*from ww w . j a v a 2s . com*/ } // round scale to nearest integer fraction. i.e. 0.3 => 1/3 = 0.33 scale = (float) Math.round(1.0f / resolution); resolution = 1.0f / scale; // get the integer versions of max, min, current minInt = Math.round(min * scale); maxInt = Math.round(max * scale); curInt = Math.round(current * scale); // sliders use integers, so scale our floating point value by "scale" // to make each slider "notch" be "resolution". We will scale the // value down by "scale" when we get the event. slider = new JSlider(JSlider.HORIZONTAL, minInt, maxInt, curInt); slider.addChangeListener(this); valueLabel = new JLabel(" "); // set the initial value label setLabelString(); // add min and max labels to the slider Hashtable labelTable = new Hashtable(); labelTable.put(new Integer(minInt), new JLabel(nf.format(min))); labelTable.put(new Integer(maxInt), new JLabel(nf.format(max))); slider.setLabelTable(labelTable); slider.setPaintLabels(true); /* layout to align left */ setLayout(new BorderLayout()); Box box = new Box(BoxLayout.X_AXIS); add(box, BorderLayout.WEST); box.add(new JLabel(name)); box.add(slider); box.add(valueLabel); }
From source file:Human1.java
JPanel guiPanel() { JPanel panel = new JPanel(); panel.setLayout(new GridLayout(0, 1)); // Human_r_shoulder rotation panel.add(new JLabel("Right Shoulder rotation")); rShoulderSlider = new JSlider(JSlider.HORIZONTAL, 0, 180, rShoulderRot); rShoulderSlider.addChangeListener(this); rShoulderSliderLabel = new JLabel(Integer.toString(rShoulderRot)); panel.add(rShoulderSlider);//from w w w. j a va 2 s . c om panel.add(rShoulderSliderLabel); // Human_r_elbow rotation panel.add(new JLabel("Right Elbow rotation")); rElbowSlider = new JSlider(JSlider.HORIZONTAL, 0, 180, rElbowRot); rElbowSlider.addChangeListener(this); rElbowSliderLabel = new JLabel(Integer.toString(rElbowRot)); panel.add(rElbowSlider); panel.add(rElbowSliderLabel); // Human_l_shoulder rotation panel.add(new JLabel("Left Shoulder rotation")); lShoulderSlider = new JSlider(JSlider.HORIZONTAL, 0, 180, lShoulderRot); lShoulderSlider.addChangeListener(this); lShoulderSliderLabel = new JLabel(Integer.toString(lShoulderRot)); panel.add(lShoulderSlider); panel.add(lShoulderSliderLabel); // Human_l_elbow rotation panel.add(new JLabel("Left Elbow rotation")); lElbowSlider = new JSlider(JSlider.HORIZONTAL, 0, 180, lElbowRot); lElbowSlider.addChangeListener(this); lElbowSliderLabel = new JLabel(Integer.toString(lElbowRot)); panel.add(lElbowSlider); panel.add(rElbowSliderLabel); if (isApplication) { JButton snapButton = new JButton(snapImageString); snapButton.setActionCommand(snapImageString); snapButton.addActionListener(this); panel.add(snapButton); } return panel; }
From source file:com.imag.nespros.gui.plugin.GraphEditor.java
/** * create an instance of a simple graph with popup controls to create a * graph./* w w w.j ava 2 s . c om*/ * */ private GraphEditor(Simulation s) { simu = s; try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception ex) { Logger.getLogger(GraphEditor.class.getName()).log(Level.SEVERE, null, ex); } // create a simple graph for the demo graph = Topology.getInstance().getGraph(); this.layout = new StaticLayout<Device, ComLink>(graph, new Transformer<Device, Point2D>() { @Override public Point2D transform(Device v) { Point2D p = new Point2D.Double(v.getX(), v.getY()); return p; } }, new Dimension(600, 600)); vv = new VisualizationViewer<Device, ComLink>(layout); vv.setBackground(Color.white); final Transformer<Device, String> vertexLabelTransformer = new Transformer<Device, String>() { @Override public String transform(Device d) { return d.getDeviceName(); } }; //vv.getRenderContext().setVertexLabelTransformer(MapTransformer.<Device, String>getInstance( // LazyMap.<Device, String>decorate(new HashMap<Device, String>(), new ToStringLabeller<Device>()))); vv.getRenderContext().setVertexLabelTransformer(vertexLabelTransformer); vv.getRenderContext().setEdgeLabelTransformer(new Transformer<ComLink, String>() { @Override public String transform(ComLink link) { return (link.getID() + ", " + link.getLatency()); } }); //float dash[] = {0.1f}; //final Stroke edgeStroke = new BasicStroke(3.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f, dash, 1.0f); final Stroke edgeStroke = new BasicStroke(3.0f); final Transformer<ComLink, Stroke> edgeStrokeTransformer = new Transformer<ComLink, Stroke>() { @Override public Stroke transform(ComLink l) { return edgeStroke; } }; Transformer<ComLink, Paint> edgePaint = new Transformer<ComLink, Paint>() { public Paint transform(ComLink l) { if (l.isDown()) { return Color.RED; } else { return Color.BLACK; } } }; vv.getRenderContext().setEdgeDrawPaintTransformer(edgePaint); vv.getRenderContext().setEdgeStrokeTransformer(edgeStrokeTransformer); vv.setVertexToolTipTransformer(vv.getRenderContext().getVertexLabelTransformer()); vv.getRenderContext().setVertexIconTransformer(new CustomVertexIconTransformer()); vv.getRenderContext().setVertexShapeTransformer(new CustomVertexShapeTransformer()); vv.addPreRenderPaintable(new VisualizationViewer.Paintable() { @Override public void paint(Graphics grphcs) { for (Device d : Topology.getInstance().getGraph().getVertices()) { int size = d.getOperators().size(); MyLayeredIcon icon = d.getIcon(); //if(icon == null) continue; icon.removeAll(); if (size > 0) { // the vertex icon // Let's create the annotation image to be added to icon.. BufferedImage image = new BufferedImage(20, 20, BufferedImage.TYPE_INT_ARGB); Graphics2D g = image.createGraphics(); g.setColor(Color.ORANGE); g.fillOval(0, 0, 20, 20); g.setColor(Color.BLACK); g.drawString(size + "", 5, 13); g.dispose(); ImageIcon img = new ImageIcon(image); //Dimension id = new Dimension(icon.getIconWidth(), icon.getIconHeight()); //double x = vv.getModel().getGraphLayout().transform(d).getX(); //x -= (icon.getIconWidth() / 2); //double y = vv.getModel().getGraphLayout().transform(d).getY(); //y -= (icon.getIconHeight() / 2); //grphcs.drawImage(image, (int) Math.round(x), (int) Math.round(y), null); icon.add(img); } } } @Override public boolean useTransform() { return false; } }); Container content = getContentPane(); final GraphZoomScrollPane panel = new GraphZoomScrollPane(vv); content.add(panel); Factory<Device> vertexFactory = DeviceFactory.getInstance(); Factory<ComLink> edgeFactory = ComLinkFactory.getInstance(); final EditingModalGraphMouse<Device, ComLink> graphMouse = new EditingModalGraphMouse<>( vv.getRenderContext(), vertexFactory, edgeFactory); // Trying out our new popup menu mouse plugin... PopupVertexEdgeMenuMousePlugin myPlugin = new PopupVertexEdgeMenuMousePlugin(); // Add some popup menus for the edges and vertices to our mouse plugin. JPopupMenu edgeMenu = new MyMouseMenus.EdgeMenu(frame); JPopupMenu vertexMenu = new MyMouseMenus.VertexMenu(frame); myPlugin.setEdgePopup(edgeMenu); myPlugin.setVertexPopup(vertexMenu); graphMouse.remove(graphMouse.getPopupEditingPlugin()); // Removes the existing popup editing plugin graphMouse.add(myPlugin); // Add our new plugin to the mouse // AnnotatingGraphMousePlugin<Device,ComLink> annotatingPlugin = // new AnnotatingGraphMousePlugin<>(vv.getRenderContext()); //graphMouse.add(annotatingPlugin); // the EditingGraphMouse will pass mouse event coordinates to the // vertexLocations function to set the locations of the vertices as // they are created // graphMouse.setVertexLocations(vertexLocations); vv.setGraphMouse(graphMouse); vv.addKeyListener(graphMouse.getModeKeyListener()); graphMouse.setMode(ModalGraphMouse.Mode.PICKING); //final ImageAtEdgePainter<String, String> imageAtEdgePainter = // new ImageAtEdgePainter<String, String>(vv, edge, image); final ScalingControl scaler = new CrossoverScalingControl(); JButton plus = new JButton("+"); plus.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { scaler.scale(vv, 1.1f, vv.getCenter()); } }); JButton minus = new JButton("-"); minus.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { scaler.scale(vv, 1 / 1.1f, vv.getCenter()); } }); JButton help = new JButton("Help"); help.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(vv, instructions); } }); JButton deploy = new JButton("Deploy"); deploy.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // OPMapping algo here if (simu == null) { return; } GraphUtil<Device, ComLink> util = new GraphUtil<>(); for (EventProducer p : simu.getProducers()) { if (!p.isMapped()) { JOptionPane.showMessageDialog(frame, "Cannot map operators. Please deploy the producer: " + p.getName()); return; } } for (EventConsumer c : simu.getConsumers()) { if (!c.isMapped()) { JOptionPane.showMessageDialog(frame, "Cannot map operators. Please deploy the consumer: " + c.getName()); return; } System.out.println("-- Operator placement algorithm Greedy: " + c.getName() + " --"); Solution init = util.initialMapping(c.getGraph()); System.out.println(c.getGraph() + "\nInitial Mapping: " + init); OperatorMapping mapper = new OperatorMapping(); long T1, T2; System.out.println("--- OpMapping Algo Greedy --- "); T1 = System.currentTimeMillis(); Solution solution = mapper.opMapping(c.getGraph(), Topology.getInstance().getGraph(), init); T2 = System.currentTimeMillis(); System.out.println(solution); System.out.println("Solution founded in: " + (T2 - T1) + " ms"); } // Solution init = util.initialMapping(EPGraph.getInstance().getGraph()); // System.out.println("Initial Mapping: " + init); // OperatorMapping mapper = new OperatorMapping(); // long T1, T2; // System.out.println("--- OpMapping Algo Greedy --- "); // T1 = System.currentTimeMillis(); // Solution solution = mapper.opMapping(EPGraph.getInstance().getGraph(), // Topology.getInstance().getGraph(), init); // T2 = System.currentTimeMillis(); // System.out.println(solution); // System.out.println("Solution founded in: " + (T2 - T1) + " ms"); vv.repaint(); } }); JButton run = new JButton("Run"); run.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // run the simulation here System.out.println("Setting the simulation..."); for (EventConsumer c : simu.getConsumers()) { for (EPUnit op : c.getGraph().getVertices()) { if (op.isMapped()) { op.openIOchannels(); } else { JOptionPane.showMessageDialog(frame, "Cannot run, undeployed operators founded."); return; } } } //ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(); System.out.println("Running the simulation..."); //scheduledExecutorService.execute(runner); for (Device device : Topology.getInstance().getGraph().getVertices()) { if (!device.isAlive()) { device.start(); } } for (ComLink link : Topology.getInstance().getGraph().getEdges()) { if (!link.isAlive()) { link.start(); } } for (EventConsumer c : simu.getConsumers()) { for (EPUnit op : c.getGraph().getVertices()) { if (op.isMapped() && op.getDevice() != null && !op.isAlive()) { op.start(); } } } } }); AnnotationControls<Device, ComLink> annotationControls = new AnnotationControls<Device, ComLink>( graphMouse.getAnnotatingPlugin()); JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 30, 0); slider.setMinorTickSpacing(5); slider.setMajorTickSpacing(30); slider.setPaintTicks(true); slider.setPaintLabels(true); slider.setLabelTable(slider.createStandardLabels(15)); slider.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { JSlider slider = (JSlider) e.getSource(); if (!slider.getValueIsAdjusting()) { speedSimulation(slider.getValue()); } } }); JPanel controls = new JPanel(); controls.add(plus); controls.add(minus); JComboBox modeBox = graphMouse.getModeComboBox(); controls.add(modeBox); controls.add(annotationControls.getAnnotationsToolBar()); controls.add(slider); controls.add(deploy); controls.add(run); controls.add(help); content.add(controls, BorderLayout.SOUTH); /* Custom JPanels can be added here */ // frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //final GraphEditor demo = new GraphEditor(); }
From source file:PolygonOffset.java
LogFloatLabelJSlider(String name, float min, float max, float current) { this.resolution = resolution; this.min = min; this.max = max; this.current = current; if (resolution < minResolution) { resolution = minResolution;/* w ww . j av a2 s.c o m*/ } minLog = log10(min); maxLog = log10(max); curLog = log10(current); // resolution is 100 steps from min to max scale = 100.0f; resolution = 1.0f / scale; // get the integer versions of max, min, current minInt = (int) Math.round(minLog * scale); maxInt = (int) Math.round(maxLog * scale); curInt = (int) Math.round(curLog * scale); slider = new JSlider(JSlider.HORIZONTAL, minInt, maxInt, curInt); slider.addChangeListener(this); valueLabel = new JLabel(" "); // Need to muck around to make sure that the width of the label // is wide enough for the largest value. Pad the initial string // be large enough to hold the largest value. int pad = 5; // fudge to make up for variable width fonts intDigits = (int) Math.ceil(maxLog) + pad; if (min < 0) { intDigits++; // add one for the '-' } if (minLog < 0) { fractDigits = (int) Math.ceil(-minLog); } else { fractDigits = 0; } nf.setMinimumFractionDigits(fractDigits); nf.setMaximumFractionDigits(fractDigits); String value = nf.format(current); while (value.length() < (intDigits + fractDigits)) { value = value + " "; } valueLabel.setText(value); // add min and max labels to the slider Hashtable labelTable = new Hashtable(); labelTable.put(new Integer(minInt), new JLabel(nf.format(min))); labelTable.put(new Integer(maxInt), new JLabel(nf.format(max))); slider.setLabelTable(labelTable); slider.setPaintLabels(true); // layout to align left setLayout(new BorderLayout()); Box box = new Box(BoxLayout.X_AXIS); add(box, BorderLayout.WEST); box.add(new JLabel(name)); box.add(slider); box.add(valueLabel); }
From source file:jatoo.app.App.java
private JPopupMenu getWindowPopup(final Point location) { ///* w w w . j a v a 2 s .c o m*/ // hide final JMenuItem hideItem = new JMenuItem(getText("popup.hide")); hideItem.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { hide(); } }); // // send to back final JMenuItem sendToBackItem = new JMenuItem(getText("popup.send_to_back")); sendToBackItem.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { sendToBack(); } }); // // always on top final JCheckBoxMenuItem alwaysOnTopItem = new JCheckBoxMenuItem(getText("popup.always_on_top"), isAlwaysOnTop()); alwaysOnTopItem.addItemListener(new ItemListener() { public void itemStateChanged(final ItemEvent e) { setAlwaysOnTop(alwaysOnTopItem.isSelected()); } }); // // transparency final JSlider transparencySlider = new JSlider(JSlider.VERTICAL, 0, 100, getTransparency()); transparencySlider.setMajorTickSpacing(25); transparencySlider.setMinorTickSpacing(5); transparencySlider.setSnapToTicks(true); transparencySlider.setPaintTicks(true); transparencySlider.setPaintLabels(true); transparencySlider.addChangeListener(new ChangeListener() { public void stateChanged(final ChangeEvent e) { setTransparency(transparencySlider.getValue()); } }); final JMenu transparencyItem = new JMenu(getText("popup.transparency")); transparencyItem.add(transparencySlider); // // close final JMenuItem closeItem = new JMenuItem(getText("popup.close"), getIcon("close-016.png")); closeItem.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { System.exit(0); } }); // // the popup JPopupMenu popup = new JPopupMenu(getTitle()); popup.add(hideItem); popup.addSeparator(); popup.add(sendToBackItem); popup.add(alwaysOnTopItem); popup.add(transparencyItem); popup.addSeparator(); popup.add(closeItem); popup.setInvoker(popup); popup.setLocation(location); return popup; }
From source file:com.nikonhacker.gui.EmulatorUI.java
private JSlider makeSlider(int chip) { intervalSlider[chip] = new JSlider(JSlider.HORIZONTAL, 0, 5, prefs.getSleepTick(chip)); intervalSlider[chip].addChangeListener(new ChangeListener() { /**//w w w . java2 s . c o m * React to slider moves * @param e */ @Override public void stateChanged(ChangeEvent e) { JSlider source = (JSlider) e.getSource(); // if (!source.getValueIsAdjusting()) for (int chip = 0; chip < 2; chip++) { if (source == intervalSlider[chip]) { setEmulatorSleepCode(chip, source.getValue()); prefs.setSleepTick(chip, source.getValue()); } } } }); intervalSlider[chip].putClientProperty("JComponent.sizeVariant", "large"); //Create the label table Hashtable<Integer, JLabel> labelTable = new Hashtable<Integer, JLabel>(); labelTable.put(0, getSmallLabel("0")); labelTable.put(1, getSmallLabel("1ms")); labelTable.put(2, getSmallLabel("10ms")); labelTable.put(3, getSmallLabel("0.1s")); labelTable.put(4, getSmallLabel("1s")); labelTable.put(5, getSmallLabel("10s")); intervalSlider[chip].setLabelTable(labelTable); //Turn on labels at major tick marks. intervalSlider[chip].setMajorTickSpacing(1); intervalSlider[chip].setPaintLabels(true); intervalSlider[chip].setPaintTicks(true); intervalSlider[chip].setSnapToTicks(true); intervalSlider[chip].setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0)); intervalSlider[chip].setMaximumSize(new Dimension(400, 50)); return intervalSlider[chip]; }
From source file:erigo.ctstream.CTstream.java
/** * Pop up the GUI/* w ww . ja va 2 s . c o m*/ * * This method should be run in the event-dispatching thread. * * The GUI is created in one of two modes depending on whether Shaped * windows are supported on the platform: * * 1. If Shaped windows are supported then guiPanel (the container to * which all other components are added) is RED and capturePanel is * inset a small amount to this panel so that the RED border is seen * around the outer edge. A componentResized() method is defined * which creates the hollowed out region that was capturePanel. * 2. If Shaped windows are not supported then guiPanel is transparent * and capturePanel is translucent. In this case, the user can't * "reach through" capturePanel to interact with GUIs on the other * side. * * @param bShapedWindowSupportedI Does the underlying GraphicsDevice support the * PERPIXEL_TRANSPARENT translucency that is * required for Shaped windows? */ private void createAndShowGUI(boolean bShapedWindowSupportedI) { // No window decorations for translucent/transparent windows // (see note below) // JFrame.setDefaultLookAndFeelDecorated(true); // // Create GUI components // GridBagLayout framegbl = new GridBagLayout(); guiFrame = new JFrame("CTstream"); // To support a translucent window, the window must be undecorated // See notes in the class header up above about this; also see // http://alvinalexander.com/source-code/java/how-create-transparenttranslucent-java-jframe-mac-os-x guiFrame.setUndecorated(true); // Use MouseMotionListener to implement our own simple "window manager" for moving and resizing the window guiFrame.addMouseMotionListener(this); guiFrame.setBackground(new Color(0, 0, 0, 0)); guiFrame.getContentPane().setBackground(new Color(0, 0, 0, 0)); GridBagLayout gbl = new GridBagLayout(); guiPanel = new JPanel(gbl); // if Shaped windows are supported, make guiPanel red; // otherwise make it transparent if (bShapedWindowSupportedI) { guiPanel.setBackground(Color.RED); } else { guiPanel.setBackground(new Color(0, 0, 0, 0)); } guiFrame.setFont(new Font("Dialog", Font.PLAIN, 12)); guiPanel.setFont(new Font("Dialog", Font.PLAIN, 12)); GridBagLayout controlsgbl = new GridBagLayout(); // *** controlsPanel contains the UI controls at the top of guiFrame controlsPanel = new JPanel(controlsgbl); controlsPanel.setBackground(new Color(211, 211, 211, 255)); startStopButton = new JButton("Start"); startStopButton.addActionListener(this); startStopButton.setBackground(Color.GREEN); continueButton = new JButton("Continue"); continueButton.addActionListener(this); continueButton.setEnabled(false); screencapCheck = new JCheckBox("screen", bScreencap); screencapCheck.setBackground(controlsPanel.getBackground()); screencapCheck.addActionListener(this); webcamCheck = new JCheckBox("camera", bWebcam); webcamCheck.setBackground(controlsPanel.getBackground()); webcamCheck.addActionListener(this); audioCheck = new JCheckBox("audio", bAudio); audioCheck.setBackground(controlsPanel.getBackground()); audioCheck.addActionListener(this); textCheck = new JCheckBox("text", bText); textCheck.setBackground(controlsPanel.getBackground()); textCheck.addActionListener(this); JLabel fpsLabel = new JLabel("images/sec", SwingConstants.LEFT); fpsCB = new JComboBox<Double>(FPS_VALUES); int tempIndex = Arrays.asList(FPS_VALUES).indexOf(new Double(framesPerSec)); fpsCB.setSelectedIndex(tempIndex); fpsCB.addActionListener(this); // The popup doesn't display over the transparent region; // therefore, just display a few rows to keep it within controlsPanel fpsCB.setMaximumRowCount(3); JLabel imgQualLabel = new JLabel("image qual", SwingConstants.LEFT); // The slider will use range 0 - 1000 imgQualSlider = new JSlider(JSlider.HORIZONTAL, 0, 1000, (int) (imageQuality * 1000.0)); // NOTE: The JSlider's initial width was too large, so I'd like to set its preferred size // to try and constrain it some; also need to set its minimum size at the same time, // or else when the user makes the GUI frame smaller, the JSlider would pop down to // a really small minimum size. imgQualSlider.setPreferredSize(new Dimension(120, 30)); imgQualSlider.setMinimumSize(new Dimension(120, 30)); imgQualSlider.setBackground(controlsPanel.getBackground()); includeMouseCursorCheck = new JCheckBox("Include mouse cursor in screen capture", bIncludeMouseCursor); includeMouseCursorCheck.setBackground(controlsPanel.getBackground()); includeMouseCursorCheck.addActionListener(this); changeDetectCheck = new JCheckBox("Change detect", bChangeDetect); changeDetectCheck.setBackground(controlsPanel.getBackground()); changeDetectCheck.addActionListener(this); fullScreenCheck = new JCheckBox("Full Screen", bFullScreen); fullScreenCheck.setBackground(controlsPanel.getBackground()); fullScreenCheck.addActionListener(this); previewCheck = new JCheckBox("Preview", bPreview); previewCheck.setBackground(controlsPanel.getBackground()); previewCheck.addActionListener(this); // Specify a small size for the text area, so that we can shrink down the UI w/o the scrollbars popping up textArea = new JTextArea(3, 10); // Add a Document listener to the JTextArea; this is how we will listen for changes to the document docChangeListener = new DocumentChangeListener(this); textArea.getDocument().addDocumentListener(docChangeListener); textScrollPane = new JScrollPane(textArea); // *** capturePanel capturePanel = new JPanel(); if (!bShapedWindowSupportedI) { // Only make capturePanel translucent (ie, semi-transparent) if we aren't doing the Shaped window option capturePanel.setBackground(new Color(0, 0, 0, 16)); } else { capturePanel.setBackground(new Color(0, 0, 0, 0)); } capturePanel.setPreferredSize(new Dimension(500, 400)); boolean bMacOS = false; String OS = System.getProperty("os.name", "generic").toLowerCase(); if ((OS.indexOf("mac") >= 0) || (OS.indexOf("darwin") >= 0)) { bMacOS = true; } // Only have the CTstream UI stay on top of all other windows // if bStayOnTop is true (set by command line flag). This is needed // for the Mac, because on that platform the user can't "reach through" // the capture frame to windows behind it. if (bStayOnTop) { guiFrame.setAlwaysOnTop(true); } // // Add components to the GUI // int row = 0; GridBagConstraints gbc = new GridBagConstraints(); gbc.anchor = GridBagConstraints.WEST; gbc.fill = GridBagConstraints.NONE; gbc.weightx = 0; gbc.weighty = 0; // // First row: the controls panel // // Add some extra horizontal padding around controlsPanel so the panel has some extra room // if we are running in web camera mode. gbc.insets = new Insets(0, 0, 0, 0); gbc.fill = GridBagConstraints.HORIZONTAL; gbc.weightx = 100; gbc.weighty = 0; Utility.add(guiPanel, controlsPanel, gbl, gbc, 0, row, 1, 1); gbc.insets = new Insets(0, 0, 0, 0); gbc.fill = GridBagConstraints.NONE; gbc.weightx = 0; gbc.weighty = 0; ++row; // Add controls to the controls panel int panelrow = 0; // (i) Start/Continue buttons GridBagLayout panelgbl = new GridBagLayout(); JPanel subPanel = new JPanel(panelgbl); GridBagConstraints panelgbc = new GridBagConstraints(); panelgbc.anchor = GridBagConstraints.WEST; panelgbc.fill = GridBagConstraints.NONE; panelgbc.weightx = 0; panelgbc.weighty = 0; subPanel.setBackground(controlsPanel.getBackground()); panelgbc.insets = new Insets(0, 0, 0, 5); Utility.add(subPanel, startStopButton, panelgbl, panelgbc, 0, 0, 1, 1); panelgbc.insets = new Insets(0, 0, 0, 0); Utility.add(subPanel, continueButton, panelgbl, panelgbc, 1, 0, 1, 1); gbc.anchor = GridBagConstraints.CENTER; gbc.fill = GridBagConstraints.NONE; gbc.insets = new Insets(5, 0, 0, 0); Utility.add(controlsPanel, subPanel, controlsgbl, gbc, 0, panelrow, 1, 1); ++panelrow; gbc.anchor = GridBagConstraints.WEST; gbc.fill = GridBagConstraints.NONE; // (ii) select DataStreams to turn on panelgbl = new GridBagLayout(); subPanel = new JPanel(panelgbl); panelgbc = new GridBagConstraints(); panelgbc.anchor = GridBagConstraints.WEST; panelgbc.fill = GridBagConstraints.NONE; panelgbc.weightx = 0; panelgbc.weighty = 0; subPanel.setBackground(controlsPanel.getBackground()); panelgbc.insets = new Insets(0, 0, 0, 0); Utility.add(subPanel, screencapCheck, panelgbl, panelgbc, 0, 0, 1, 1); Utility.add(subPanel, webcamCheck, panelgbl, panelgbc, 1, 0, 1, 1); Utility.add(subPanel, audioCheck, panelgbl, panelgbc, 2, 0, 1, 1); Utility.add(subPanel, textCheck, panelgbl, panelgbc, 3, 0, 1, 1); gbc.anchor = GridBagConstraints.CENTER; gbc.fill = GridBagConstraints.NONE; gbc.insets = new Insets(0, 0, 0, 0); Utility.add(controlsPanel, subPanel, controlsgbl, gbc, 0, panelrow, 1, 1); ++panelrow; // (iii) images/sec control panelgbl = new GridBagLayout(); subPanel = new JPanel(panelgbl); panelgbc = new GridBagConstraints(); panelgbc.anchor = GridBagConstraints.WEST; panelgbc.fill = GridBagConstraints.NONE; panelgbc.weightx = 0; panelgbc.weighty = 0; subPanel.setBackground(controlsPanel.getBackground()); panelgbc.insets = new Insets(2, 0, 0, 0); Utility.add(subPanel, fpsLabel, panelgbl, panelgbc, 0, 0, 1, 1); panelgbc.insets = new Insets(2, 10, 0, 10); Utility.add(subPanel, fpsCB, panelgbl, panelgbc, 1, 0, 1, 1); gbc.insets = new Insets(0, 0, 0, 0); gbc.anchor = GridBagConstraints.CENTER; Utility.add(controlsPanel, subPanel, controlsgbl, gbc, 0, panelrow, 1, 1); ++panelrow; // (iv) image quality slider panelgbl = new GridBagLayout(); subPanel = new JPanel(panelgbl); panelgbc = new GridBagConstraints(); panelgbc.anchor = GridBagConstraints.WEST; panelgbc.fill = GridBagConstraints.NONE; panelgbc.weightx = 0; panelgbc.weighty = 0; subPanel.setBackground(controlsPanel.getBackground()); JLabel sliderLabelLow = new JLabel("Low", SwingConstants.LEFT); JLabel sliderLabelHigh = new JLabel("High", SwingConstants.LEFT); panelgbc.insets = new Insets(-5, 0, 0, 0); Utility.add(subPanel, imgQualLabel, panelgbl, panelgbc, 0, 0, 1, 1); panelgbc.insets = new Insets(-5, 5, 0, 5); Utility.add(subPanel, sliderLabelLow, panelgbl, panelgbc, 1, 0, 1, 1); panelgbc.insets = new Insets(0, 0, 0, 0); Utility.add(subPanel, imgQualSlider, panelgbl, panelgbc, 2, 0, 1, 1); panelgbc.insets = new Insets(-5, 5, 0, 0); Utility.add(subPanel, sliderLabelHigh, panelgbl, panelgbc, 3, 0, 1, 1); gbc.insets = new Insets(0, 0, 0, 0); gbc.anchor = GridBagConstraints.CENTER; Utility.add(controlsPanel, subPanel, controlsgbl, gbc, 0, panelrow, 1, 1); ++panelrow; // (v) Include mouse cursor in screen capture image? gbc.anchor = GridBagConstraints.CENTER; gbc.fill = GridBagConstraints.NONE; gbc.weightx = 0; gbc.weighty = 0; gbc.insets = new Insets(0, 15, 5, 15); Utility.add(controlsPanel, includeMouseCursorCheck, controlsgbl, gbc, 0, panelrow, 1, 1); gbc.fill = GridBagConstraints.NONE; gbc.weightx = 0; gbc.weighty = 0; ++panelrow; // (vi) Change detect / Full screen / Preview checkboxes panelgbl = new GridBagLayout(); subPanel = new JPanel(panelgbl); panelgbc = new GridBagConstraints(); panelgbc.anchor = GridBagConstraints.WEST; panelgbc.fill = GridBagConstraints.NONE; panelgbc.weightx = 0; panelgbc.weighty = 0; subPanel.setBackground(controlsPanel.getBackground()); panelgbc.insets = new Insets(0, 0, 0, 0); Utility.add(subPanel, changeDetectCheck, panelgbl, panelgbc, 0, 0, 1, 1); Utility.add(subPanel, fullScreenCheck, panelgbl, panelgbc, 1, 0, 1, 1); Utility.add(subPanel, previewCheck, panelgbl, panelgbc, 2, 0, 1, 1); gbc.anchor = GridBagConstraints.CENTER; gbc.fill = GridBagConstraints.NONE; gbc.insets = new Insets(-5, 0, 3, 0); Utility.add(controlsPanel, subPanel, controlsgbl, gbc, 0, panelrow, 1, 1); ++panelrow; // (vii) text field for the TextStream /* panelgbl = new GridBagLayout(); subPanel = new JPanel(panelgbl); panelgbc = new GridBagConstraints(); panelgbc.anchor = GridBagConstraints.CENTER; panelgbc.fill = GridBagConstraints.HORIZONTAL; panelgbc.weightx = 100; panelgbc.weighty = 100; subPanel.setBackground(controlsPanel.getBackground()); panelgbc.insets = new Insets(0, 0, 0, 0); Utility.add(subPanel, textScrollPane, panelgbl, panelgbc, 1, 0, 1, 1); gbc.anchor = GridBagConstraints.CENTER; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.weightx = 100; gbc.weighty = 100; gbc.insets = new Insets(0, 15, 3, 15); Utility.add(controlsPanel, subPanel, controlsgbl, gbc, 0, panelrow, 2, 1); ++panelrow; */ gbc.anchor = GridBagConstraints.CENTER; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.weightx = 100; gbc.weighty = 0; gbc.insets = new Insets(0, 15, 5, 15); Utility.add(controlsPanel, textScrollPane, controlsgbl, gbc, 0, panelrow, 1, 1); gbc.fill = GridBagConstraints.NONE; gbc.weightx = 0; gbc.weighty = 0; ++panelrow; // // Second row: the translucent/transparent capture panel // if (bShapedWindowSupportedI) { // Doing the Shaped window; set capturePanel inside guiPanel // a bit so the red from guiPanel shows at the edges gbc.insets = new Insets(5, 5, 5, 5); } else { // No shaped window; have capturePanel fill the area gbc.insets = new Insets(0, 0, 0, 0); } gbc.fill = GridBagConstraints.BOTH; gbc.weightx = 100; gbc.weighty = 100; Utility.add(guiPanel, capturePanel, gbl, gbc, 0, row, 1, 1); gbc.fill = GridBagConstraints.NONE; gbc.weightx = 0; gbc.weighty = 0; ++row; // // Add guiPanel to guiFrame // gbc.anchor = GridBagConstraints.CENTER; gbc.fill = GridBagConstraints.BOTH; gbc.weightx = 100; gbc.weighty = 100; gbc.insets = new Insets(0, 0, 0, 0); Utility.add(guiFrame, guiPanel, framegbl, gbc, 0, 0, 1, 1); // // Add menu // JMenuBar menuBar = createMenu(); guiFrame.setJMenuBar(menuBar); // // If Shaped windows are supported, the region defined by capturePanel // will be "hollowed out" so that the user can reach through guiFrame // and interact with applications which are behind it. // // NOTE: This doesn't work on Mac OS (we've tried, but nothing seems // to work to allow a user to reach through guiFrame to interact // with windows behind). May be a limitation or bug on Mac OS: // https://bugs.openjdk.java.net/browse/JDK-8013450 // if (bShapedWindowSupportedI) { guiFrame.addComponentListener(new ComponentAdapter() { // As the window is resized, the shape is recalculated here. @Override public void componentResized(ComponentEvent e) { // Create a rectangle to cover the entire guiFrame Area guiShape = new Area(new Rectangle(0, 0, guiFrame.getWidth(), guiFrame.getHeight())); // Create another rectangle to define the hollowed out region of capturePanel guiShape.subtract(new Area(new Rectangle(capturePanel.getX(), capturePanel.getY() + 23, capturePanel.getWidth(), capturePanel.getHeight()))); guiFrame.setShape(guiShape); } }); } // // Final guiFrame configuration details and displaying the GUI // guiFrame.pack(); guiFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); guiFrame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { exit(false); } }); // Center on the screen guiFrame.setLocationRelativeTo(null); // // Set the taskbar/dock icon; note that Mac OS has its own way of doing it // if (bMacOS) { try { // JPW 2018/02/02: changed how to load images to work under Java 9 InputStream imageInputStreamLarge = getClass().getClassLoader() .getResourceAsStream("Icon_128x128.png"); BufferedImage bufferedImageLarge = ImageIO.read(imageInputStreamLarge); /** * * Java 9 note: running the following code under Java 9 on a Mac will produce the following warning: * * WARNING: An illegal reflective access operation has occurred * WARNING: Illegal reflective access by erigo.ctstream.CTstream (file:/Users/johnwilson/CT_versions/compiled_under_V8/CTstream.jar) to method com.apple.eawt.Application.getApplication() * WARNING: Please consider reporting this to the maintainers of erigo.ctstream.CTstream * WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations * WARNING: All illegal access operations will be denied in a future release * * This is because Java 9 has taken a step away from using reflection; see see the section titled * "Illegal Access To Internal APIs" at https://blog.codefx.org/java/java-9-migration-guide/. * * A good fix (but only available in Java 9+) is to use the following: * * java.awt.Taskbar taskbar = java.awt.Taskbar.getTaskbar(); * taskbar.setIconImage(bufferedImageLarge); * * Could use reflection to make calls in class com.apple.eawt.Application; for example, see * Bertil Chapuis' "dockicon.java" example code at https://gist.github.com/bchapuis/1562406 * * For now, we just won't do dock icons under Mac OS. * **/ } catch (Exception excepI) { System.err.println("Exception thrown trying to set icon: " + excepI); } } else { // The following has been tested under Windows 10 and Ubuntu 12.04 LTS try { // JPW 2018/02/02: changed how to load images to work under Java 9 InputStream imageInputStreamLarge = getClass().getClassLoader() .getResourceAsStream("Icon_128x128.png"); BufferedImage bufferedImageLarge = ImageIO.read(imageInputStreamLarge); InputStream imageInputStreamMed = getClass().getClassLoader().getResourceAsStream("Icon_64x64.png"); BufferedImage bufferedImageMed = ImageIO.read(imageInputStreamMed); InputStream imageInputStreamSmall = getClass().getClassLoader() .getResourceAsStream("Icon_32x32.png"); BufferedImage bufferedImageSmall = ImageIO.read(imageInputStreamSmall); List<BufferedImage> iconList = new ArrayList<BufferedImage>(); iconList.add(bufferedImageLarge); iconList.add(bufferedImageMed); iconList.add(bufferedImageSmall); guiFrame.setIconImages(iconList); } catch (Exception excepI) { System.err.println("Exception thrown trying to set icon: " + excepI); } } ctSettings = new CTsettings(this, guiFrame); guiFrame.setVisible(true); }
From source file:org.biojava.bio.view.MotifAnalyzer.java
private Box getControlBox(SequencePanel seqPanel, String seqName) { JSlider scale;/*ww w .j a v a 2 s .c om*/ Box controlBox = null; if (controlBox == null) { controlBox = Box.createHorizontalBox(); scale = new JSlider(SwingConstants.HORIZONTAL, 1, 100, INITIAL_SCALE); controlBox.add(new JLabel(seqName)); controlBox.add(Box.createHorizontalGlue()); controlBox.add(Box.createHorizontalStrut(10)); controlBox.add(Box.createHorizontalGlue()); controlBox.add(new JLabel("Scale")); controlBox.add(Box.createHorizontalStrut(5)); controlBox.add(scale); controlBox.add(Box.createHorizontalGlue()); scale.addChangeListener(new SliderListener(seqPanel)); } return controlBox; }