Question

So this is our code... we´re nobs and need a bit help with getting our buttons to switch between showing hue/saturation/brigntness in height and width. Per now, our applications is only showing hue in width and saturation in height. Our buttons are not working, and we are not able to empty the view and repaint another one. Can anybody help?

package no.uib.info221.oblig1;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import java.util.List;

import javax.imageio.ImageIO;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

import com.github.imgur.ImgUr;
import com.github.imgur.api.album.AlbumRequest;
import com.github.imgur.api.album.AlbumResponse;
import com.github.imgur.api.model.ImageProperty;


public class ImgurViz extends JFrame {
    private static final long serialVersionUID = 7954882289770950884L;
    //private JProgressBar progressBar;
    private JButton HSbutton;
    private JButton BSbutton;
    private JButton BHbutton; 
    private JPanel knappepanel;
    private JPanel bildepanel; 
    public JLabel skjerm;
    int w = 0;
    int h = 1;  

    /**
     * constructor
     * klassen.
     * @throws IOException 
     */

    public ImgurViz() throws IOException {
        super(); //Calls the superclass
        setupInterface(); //        
        fetchAndDisplayImages(); //     
    }

    //Empties the panel when a new jlabel is called
    public void emptyPanel(){   
        bildepanel.revalidate(); 
        bildepanel.removeAll();
        bildepanel.repaint();       
    }

    // Creates JButtons to change the sorting of the images
    public void knapper(){
        knappepanel = new JPanel(); // Knappepanel = button panel
        bildepanel = new JPanel();      // Imagepanel = image panel
        bildepanel.setLayout(null);
        this.getContentPane().setLayout(new BorderLayout());
        this.getContentPane().add(knappepanel,BorderLayout.NORTH);
        this.getContentPane().add(bildepanel,BorderLayout.CENTER);


        //knappepanel.setOpaque(false);

        // Knapp for HUE og SATURATION KNAPP = button
        HSbutton = new JButton ("Hue og Saturation");
        knappepanel.add(HSbutton);

        //Knapp for BRIGHTNESS og SATURARION
        BSbutton = new JButton ("Brightness og Saturation");
        knappepanel.add(BSbutton);

        // Knapp for BRIGHTNESS OG HUE
        BHbutton = new JButton ("Brightness og Hue");
        knappepanel.add(BHbutton);      

        // Metode for knapp for HUE og SATURATION
        HSbutton.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e) {            
                emptyPanel();   

                w = 0; 
                h = 1;          

                System.out.println("Hue: " + w + " Saturation: " + h);
            }       
        });

        // Metode for knapp for BRIGHTNESS og SATURATION
        BSbutton.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent e) {

                w = 2; 
                h = 1;

                System.out.println("Brightness: " + w + " Saturation: " + h);
            }
        });

        // Metode for knapp for BRIGHTNESS OG HUE
        BHbutton.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e) {
                emptyPanel(); 

                w = 2; 
                h = 0;      
                System.out.println("Brightness: " + w + " Hue: " + h);
            }           
        });

        this.setContentPane(knappepanel);       
    }



    /**
     * Fetches images for an album on Imgur
     * 
     * @throws IOException
     */


    public void fetchAndDisplayImages() throws IOException {
        ImgUr imgUr = new ImgUr ("4ded93e63e96762");
        AlbumResponse response = imgUr.call(new AlbumRequest("RJBiQ"));
        List<ImageProperty> images = response.getImages();
        float[] bildedata = new float[3];
        int count = images.size();      

        for (int i = 0; i<count;i++){

            BufferedImage img = ImageIO.read(new URL(images.get(i).getLinks().getOriginal()));          
            BufferedImage thumb = ImageIO.read(new URL(images.get(i).getLinks().getSmallSquare())); 
            bildedata = pictureAnalyze (img);

            int width  = ((int)Toolkit.getDefaultToolkit().getScreenSize().getWidth())/2; // Henter ut bredden p brukerens skjerm
            int height = ((int)Toolkit.getDefaultToolkit().getScreenSize().getHeight())/2; // Henter ut høyden p brukerens skjerm
            int posW = (int)(bildedata [w] * width);
            int posH = (int)(bildedata [h] * height);

            skjerm = new JLabel(new ImageIcon(thumb));
            skjerm.setBounds(posW, posH, width, height);
            bildepanel.add(skjerm);
            this.getContentPane().add(skjerm);
            this.getContentPane().setLayout(null);          
            this.getContentPane().repaint();                
            this.setVisible(true);      

//          skjerm.addMouseListener(new MouseAdapter() {
//              @Override
//              public void mouseEntered(java.awt.event.MouseEvent evt) {
//                  //FAEN TA DEG!!
//              }
//          });
        }
    }

    // RGB to HSB Finds the RGB value of each image, transformes the values to HSB and finds the average 
    public float[] pictureAnalyze (BufferedImage img){
        float[] result = new float[3];          
        float h = 0f; 
        float s = 0f;
        float b = 0f; 
        for (int x = 0; x < img.getWidth(); x++){
            for (int y = 0; y < img.getHeight(); y++){
                int c = img.getRGB(x,y);        
                int red = (c >> 16) & 0xff;
                int green = (c >> 8) & 0xff;
                int blue = (c & 0xff);

                float[] hsb = Color.RGBtoHSB(red,green,blue, null);

                h += hsb[0];
                s += hsb[1];
                b += hsb[2];       
            }
        }

        h = h/(img.getWidth()*img.getHeight());
        s = s/(img.getWidth()*img.getHeight());
        b = b/(img.getWidth()*img.getHeight());
        result [0] = h;
        result [1] = s;
        result [2] = b;
        return result;
    }

    //      // Shannon entropi
    //      public static Double calculateShannonEntropy(List <ImageProperty> images) {         
    //            Map<String, Integer> map = new HashMap<String, Integer>();    
    //            
    //            // tel kvar instans av verdiane           
    //            for (String sequence : images) {          
    //              if (!map.containsKey(sequence)) {           
    //                map.put(sequence, 0);
    //          
    //              }           
    //              map.put(sequence, map.get(sequence) + 1);           
    //            }      
    //            
    //            //Kalkulerer entropien
    //          
    //            Double result = 0.0;          
    //            for (String sequence : map.keySet()) {            
    //              Double frequency = (double) map.get(sequence) / images.size();          
    //              result -= frequency * (Math.log(frequency) / Math.log(2));          
    //            }      
    //          
    //            return result;
    //          
    //          }


    /**

    private void setupInterface() {
        int width  = (int)Toolkit.getDefaultToolkit().getScreenSize().getWidth(); // Henter ut bredden p brukerens skjerm
        int height = (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight(); // Henter ut h¯yden p brukerens skjerm
        this.setSize(width, height); // Setter st¯rrelsen p vinduet til  vÊre lik skjermens bredde og h¯yde
        this.setExtendedState(Frame.MAXIMIZED_BOTH); // Sier fra om at vinduet skal vÊre maksimert 
        this.setUndecorated(true); // setter fullscreen
        this.getContentPane().setBackground(Color.BLACK ); // Setter bakgrunnsfargen p innholdspanelet (contentPane) til svart 
        knapper(); 
        this.setVisible(true); // Viser vinduet p skjermen

    }


    public static void main(String[] args)  throws IOException { 
        ImgurViz viz = new ImgurViz(); // Oppretter et nytt ImgurViz-objekt. Dette medf¯rer at det nye objektets konstrukt¯r kj¯res

    }



}
Was it helpful?

Solution

As shown in the HSV panel of JColorChooser, it's easier to display just two of the color space's three dimensions at a time. Whatever your goal, it will be easier to scale the palette using Color.getHSBColor(). These examples may offer some insight or help you prepare an sscce.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top