Visualizzazione dei risultati da 1 a 2 su 2

Discussione: JScrollBar e Scrollbar

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    140

    JScrollBar e Scrollbar

    Ciao ragazzi ho un problema, ho una classe che è stato implementata usando 4 scrollbar, io vorrei sostituirle con le JScrollBar ma il metodo che posto non funziona correttamente. Nella versione con le scrollbar se sposto la scroll del brightness quella del contrast sta ferma mentre nella versione con le JScrollBar se sposto la brightness si sposta anche l'altra. Sapete aiutarmi? grazie

    codice:
        GridBagLayout gridbag;
        GridBagConstraints c;
        int y = 0;
      
        JPanel panel, tPanel;
        Scrollbar minSlider, maxSlider, contrastSlider, brightnessSlider;
        int sliderRange = 256;
         
        double min, max;
        double previousMin, previousMax;
        double defaultMin, defaultMax;
        int previousImageID;
        int previousType;
        int previousSlice = 1;
        Object previousSnapshot;
        int contrast, brightness;
        boolean RGBImage;
        int channels = 7; // RGB
        Choice choice;
        int autoThreshold;
        static final int MIN=5, MAX=6, BRIGHTNESS=7, CONTRAST=8;
        int minSliderValue=-1, maxSliderValue=-1, brightnessValue=-1, contrastValue=-1;
    
        Thread thread;
    
        /**
         * Creates new form ContrastBrightness
         */
        public ContrastBrightness() {
            initComponents();
                //layout
            gridbag = new GridBagLayout();
            c = new GridBagConstraints();
            setLayout(gridbag);
    		
        	// min slider	
            minSlider = new Scrollbar(Scrollbar.HORIZONTAL, sliderRange/2, 1, 0, sliderRange);
            c.gridy = y++;
      //      c.insets = new Insets(2, 10, 0, 10);
            gridbag.setConstraints(minSlider, c);
            add(minSlider);
    	minSlider.addAdjustmentListener(this);
    	minSlider.setUnitIncrement(1);
    	minSlider.setFocusable(false); // prevents blinking on Windows
           
    	// max slider
            maxSlider = new Scrollbar(Scrollbar.HORIZONTAL, sliderRange/2, 1, 0, sliderRange);
            c.gridy = y++;
        //    c.insets = new Insets(2, 10, 0, 10);
            gridbag.setConstraints(maxSlider, c);
            add(maxSlider);
    	maxSlider.addAdjustmentListener(this);	
            maxSlider.setUnitIncrement(1);
            maxSlider.setFocusable(false);
            
            // brightness slider
            brightnessSlider = new Scrollbar(Scrollbar.HORIZONTAL, sliderRange/2, 1, 0, sliderRange);
            c.gridy = y++;
    	//c.insets = new Insets(5, 10, 0, 10);
            gridbag.setConstraints(brightnessSlider, c);
            add(brightnessSlider);
    	brightnessSlider.addAdjustmentListener(this);		
            brightnessSlider.setUnitIncrement(1);
            brightnessSlider.setFocusable(false);     
            
            // contrast slider
            contrastSlider = new Scrollbar(Scrollbar.HORIZONTAL, sliderRange/2, 1, 0, sliderRange);
            c.gridy = y++;
          //  c.insets = new Insets(5, 10, 0, 10);
            gridbag.setConstraints(contrastSlider, c);
            add(contrastSlider);
    	contrastSlider.addAdjustmentListener(this);		
            contrastSlider.setUnitIncrement(1);
            contrastSlider.setFocusable(false);
    
            thread = new Thread(this, "ContrastAdjuster");
    	//thread.setPriority(thread.getPriority()-1);
    	thread.start();
    	setup();
        }
    
    
    public void run() {
                System.out.println("Contrast run");
                while(true){
    			synchronized(this) {
    				try {wait();}
    				catch(InterruptedException e) {}
    			}
    			doUpdate();
                }
    	}
    
    
    public synchronized void adjustmentValueChanged(AdjustmentEvent e) {
            //controlla ci sia finestra!!!!!!!!!!!!!!!!!
            //verifico quale slider ho spostato
          Object source = e.getSource();
            if (source==minSlider)	{
                 System.out.println("--------------------------------------Contrast minSlider");
                   minSliderValue = minSlider.getValue();}
            else if (source==maxSlider){
                 System.out.println("--------------------------------------Contrast maxSlider");
                       maxSliderValue = maxSlider.getValue();}
            else if (source==contrastSlider){
                 System.out.println("--------------------------------------Contrast contrastSlider");
                    contrastValue = contrastSlider.getValue();}
            else  if (source==brightnessSlider){
                    brightnessValue = brightnessSlider.getValue();
                    System.out.println("--------------------------------------Contrast brightnessSlider");
                     System.out.println("-*****************----"+brightnessValue);
            }
            notify();
        }   
        
        void doUpdate() {   System.out.println("Contrast DOUPDATE");
        
            MyImagePlus imp;
            ImageProcessor ip;
            int action;
            int minvalue = minSliderValue;
            int maxvalue = maxSliderValue;
            int bvalue = brightnessValue;
            int cvalue = contrastValue;
    
            if (minSliderValue>=0) action = MIN;  
            else if (maxSliderValue>=0) action = MAX;
            else if (brightnessValue>=0) action = BRIGHTNESS;
            else if (contrastValue>=0) action = CONTRAST;
            else return;
            minSliderValue = maxSliderValue = brightnessValue = contrastValue = -1;
    
            imp = WindowManagerCCD.getCurrentWindow().getCanvas().getImage();
            if (imp==null) {
                    System.out.println("No image");
                    return;
            }
            ip = setup(imp);
            System.out.println("ip"+ip);
            if (RGBImage && !imp.lock())
                    {imp=null; return;}
            switch (action) {
                    case MIN: adjustMin(imp, ip, minvalue); break;
             	case MAX: adjustMax(imp, ip, maxvalue); break;
                     case BRIGHTNESS: adjustBrightness(imp, ip, bvalue); break;
                     case CONTRAST: adjustContrast(imp, ip, cvalue); break;
             }
             updatePlot();
             updateLabels(imp);
    
             imp.updateChannelAndDraw();
             if (RGBImage)
                     imp.unlock();
        }
    void updateScrollBars(String sb, boolean newRange) {
       		if ((sb==null) || (!sb.equals("contrastSlider"))) {
    			double mid = sliderRange/2;
    			double c = ((defaultMax-defaultMin)/(max-min))*mid;
    			if (c>mid)
    				c = sliderRange - ((max-min)/(defaultMax-defaultMin))*mid;
    			contrast = (int)c;
    			if (contrastSlider!=null) {
    				if (newRange)
    					contrastSlider.setValues(contrast, 1, 0,  sliderRange);
    				else
    					contrastSlider.setValue(contrast);
    			}
    		}
    		if ((sb==null) || (!sb.equals("brightnessSlider"))) {
    			double level = min + (max-min)/2.0;
    			double normalizedLevel = 1.0 - (level - defaultMin)/(defaultMax-defaultMin);
    			brightness = (int)(normalizedLevel*sliderRange);
    			if (newRange)
    				brightnessSlider.setValues(brightness, 1, 0,  sliderRange);
    			else
    				brightnessSlider.setValue(brightness);
    		}
    		if ((!minSlider.equals(null)) && ((sb==null) ||(!sb.equals("minSlider")))){
                        if (newRange)
    				minSlider.setValues(scaleDown(min), 1, 0,  sliderRange);
    			else
    				minSlider.setValue(scaleDown(min));
    		}
    		if ((!maxSlider.equals(null)) && ((sb==null) || (!sb.equals("maxSlider")))){
    			if (newRange)
    				maxSlider.setValues(scaleDown(max), 1, 0,  sliderRange);
    			else
    				maxSlider.setValue(scaleDown(max));
    		}
    	}

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    140
    ho capito il problema. Il metodo adjustementValueChanged in AWT viene richiamato solo se sposto la posizione dello scrollbar con il mouse. Invecce in SWING viene richiamato anche se faccio setValue. Come posso evitare ciò?

    Grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.