Convert a RGB Color Value to a Hexadecimal String

前端 未结 4 1945
南旧
南旧 2020-11-30 01:06

In my Java application, I was able to get the Color of a JButton in terms of red, green and blue; I have stored these values in three int

4条回答
  •  南笙
    南笙 (楼主)
    2020-11-30 01:22

    This is an adapted version of the answer given by Vivien Barousse with the update from Vulcan applied. In this example I use sliders to dynamically retreive the RGB values from three sliders and display that color in a rectangle. Then in method toHex() I use the values to create a color and display the respective Hex color code.

    This example does not include the proper constraints for the GridBagLayout. Though the code will work, the display will look strange.

    public class HexColor
    {
    
      public static void main (String[] args)
      {
       JSlider sRed = new JSlider(0,255,1);
       JSlider sGreen = new JSlider(0,255,1);
       JSlider sBlue = new JSlider(0,255,1);
       JLabel hexCode = new JLabel();
       JPanel myPanel = new JPanel();
       GridBagLayout layout = new GridBagLayout();
       JFrame frame = new JFrame();
    
       //set frame to organize components using GridBagLayout 
       frame.setLayout(layout);
    
       //create gray filled rectangle 
       myPanel.paintComponent();
       myPanel.setBackground(Color.GRAY);
    
       //In practice this code is replicated and applied to sGreen and sBlue. 
       //For the sake of brevity I only show sRed in this post.
       sRed.addChangeListener(
             new ChangeListener()
             {
                 @Override
                 public void stateChanged(ChangeEvent e){
                     myPanel.setBackground(changeColor());
                     myPanel.repaint();
                     hexCode.setText(toHex());
             }
             }
         );
       //add each component to JFrame
       frame.add(myPanel);
       frame.add(sRed);
       frame.add(sGreen);
       frame.add(sBlue);
       frame.add(hexCode);
    } //end of main
    
      //creates JPanel filled rectangle
      protected void paintComponent(Graphics g)
      {
          super.paintComponent(g);
          g.drawRect(360, 300, 10, 10);
          g.fillRect(360, 300, 10, 10);
      }
    
      //changes the display color in JPanel
      private Color changeColor()
      {
        int r = sRed.getValue();
        int b = sBlue.getValue();
        int g = sGreen.getValue();
        Color c;
        return  c = new Color(r,g,b);
      }
    
      //Displays hex representation of displayed color
      private String toHex()
      {
          Integer r = sRed.getValue();
          Integer g = sGreen.getValue();
          Integer b = sBlue.getValue();
          Color hC;
          hC = new Color(r,g,b);
          String hex = Integer.toHexString(hC.getRGB() & 0xffffff);
          while(hex.length() < 6){
              hex = "0" + hex;
          }
          hex = "Hex Code: #" + hex;
          return hex;
      }
    }
    

    A huge thank you to both Vivien and Vulcan. This solution works perfectly and was super simple to implement.

提交回复
热议问题