/* * Copyright (c) 2011-2015, Peter Abeles. All Rights Reserved. * * This file is part of BoofCV (http://boofcv.org). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package boofcv.demonstrations.binary; import boofcv.gui.binary.HistogramThresholdPanel; import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * Creates a control panel for selecting thresholds of pixel image intensities * * @author Peter Abeles */ public class SelectHistogramThresholdPanel extends JPanel implements ChangeListener , ActionListener { JSlider thresholdLevel; HistogramThresholdPanel histogramPanel; JButton toggleButton; Listener listener; int valueThreshold; boolean valueDown; public SelectHistogramThresholdPanel( int threshold , boolean directionDown ) { this.valueThreshold = threshold; this.valueDown = directionDown; histogramPanel = new HistogramThresholdPanel(256,256); histogramPanel.setPreferredSize(new Dimension(120,60)); histogramPanel.setMaximumSize(histogramPanel.getPreferredSize()); thresholdLevel = new JSlider(JSlider.HORIZONTAL,0,255,20); thresholdLevel.setMajorTickSpacing(20); thresholdLevel.setPaintTicks(true); thresholdLevel.addChangeListener(this); thresholdLevel.setValue(threshold); toggleButton = new JButton(); toggleButton.setPreferredSize(new Dimension(100,30)); toggleButton.setMaximumSize(toggleButton.getPreferredSize()); toggleButton.setMinimumSize(toggleButton.getPreferredSize()); setToggleText(); toggleButton.addActionListener(this); add(histogramPanel); add(Box.createRigidArea(new Dimension(8, 8))); add(thresholdLevel); add(toggleButton); } public HistogramThresholdPanel getHistogramPanel() { return histogramPanel; } public void setListener(Listener listener) { this.listener = listener; } public int getThreshold() { return valueThreshold; } public boolean isDown() { return valueDown; } private void setToggleText() { if(valueDown) toggleButton.setText("down"); else toggleButton.setText("Up"); } @Override public void stateChanged(ChangeEvent e) { if( e.getSource() == thresholdLevel ) { int oldValue = valueThreshold; valueThreshold = ((Number)thresholdLevel.getValue()).intValue(); if( oldValue == valueThreshold ) return; } histogramPanel.setThreshold(valueThreshold,valueDown); histogramPanel.repaint(); if( listener != null ) listener.histogramThresholdChange(); } @Override public void actionPerformed(ActionEvent e) { if( e.getSource() == toggleButton ) { valueDown = !valueDown; setToggleText(); } histogramPanel.setThreshold(valueThreshold,valueDown); histogramPanel.repaint(); if( listener != null ) listener.histogramThresholdChange(); } public void setThreshold(int threshold) { valueThreshold = threshold; thresholdLevel.setValue(threshold); histogramPanel.setThreshold(valueThreshold,valueDown); } public static interface Listener { public void histogramThresholdChange(); } }