2013-02-20 2 views
2

Итак, это наш код ... мы - знатные люди и нуждаемся в помощи, чтобы наши кнопки переключались между отображением оттенка/насыщенности/яркости по высоте и ширине. В настоящее время наши приложения показывают только высоту и насыщенность по высоте. Наши кнопки не работают, и мы не можем очистить представление и перекрасить его. Может ли кто-нибудь помочь?Проблемы с перерисовкой JLabel, приложение для изображений

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 

    } 



} 
+1

Не знаю немецкий. может кто-то перевести комментарии. – Arpit

+1

не german :-), но согласен – mKorbel

+1

Я не могу запустить пример без 'AlbumRequest/AlbumResponse',' ImageProperty' и 'ImgUr' – oliholz

ответ

1

Как показано на панели HSV из JColorChooser, это проще отобразить только два из цветового пространства-х three dimensions в то время. Независимо от вашей цели, будет легче масштабировать палитру, используя Color.getHSBColor(). Эти examples могут предложить некоторое представление или помочь вам подготовить sscce.

Смежные вопросы