2016-08-03 6 views
2

나는 한동안 프로젝트를 진행 해왔다. 나는 내 카드 점 게임을 만들 때 사용할 카드 덱 클래스를 만들고 있습니다. 나는 카드를 그리는 대신 카드의 색인을 위해 이미지를 사용하기로 결정했다. Illustrator에서 내 자신의 양복을 그려서 투명 배경이있는 PNG로 저장했습니다. 나는 럼 (rum) 할 때 프로그램에서 보여줄 이미지를 얻을 수 있지만 JFrame에 이미지를 추가하면 배경색이 사라져서 어떤 이유로 투명도가 유지되지 않는다고 생각하게됩니다. GUI에 이미지를 추가하는 두 가지 방법을 시도해 보았고 같은 결과를 얻었습니다. 내가 시도한 한 가지 방법은 여기에 제안 된 방법입니다 How to add an image to a JPanel? 그리고 내가 시도한 다른 방법은 여기에 제안 된 것입니다 How can I display a BufferedImage in a JFrame? 이 두 방법 모두 내가 찾고있는 것이 아닙니다. 내 소송을 화면에 표시하고 배경을 계속 볼 수 있기를 바랍니다.png 이미지에 투명 배경을 유지하는 방법

여기 내가 제대로 작동하고 싶습니다. 현재 컴파일하고 잘 실행된다는 것을 알고 있지만 여전히 배경을 볼 수 있기를 바랍니다.

import java.io.File; 
import java.io.IOException; 

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Image; 
import java.awt.image.BufferedImage; 

import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

import javax.imageio.ImageIO; 



public class ImageReadTest extends JPanel{ 
    public static void main(String[] args){ 
     //Just a simple test on reading pictures into a java file and drawing them 
     //onto a JFrame 
     System.out.println("Java Image Read Test"); 
     JFrame frame = new JFrame("Image Reader"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setBackground(Color.green); 

     frame.add(new ImageReadTest()); 
     frame.pack(); 
     frame.setSize(250,250); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    private BufferedImage image; 
    public ImageReadTest(){ 
     try{ 
     image = ImageIO.read(new File("Club.png")); 
     } catch(IOException e){ 
     System.out.println("Error"); 
     } 
    } 
    @Override 
    protected void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     g.drawImage(image, 90, 90, null); 
    } 
}//end class ImageReadTest 

여기 내 코드를 테스트하기위한 내 이미지입니다. 시간을내어 읽고 도움을 주셔서 감사합니다. Club

+1

나는 이미지 전문가는 아니지만 당신이 알파 채널을 볼 수 있도록'BufferedImage.TYPE_INT_ARGB'에 이미지 유형을 설정해야합니다 생각한다. 'ImageIO.read (File)'에 의해 제공되는 디폴트를 사용할 수없는 경우가 있습니다. 그게 문제가된다면 문제는 http://stackoverflow.com/q/4694153/18157입니다. "java jgrame png transparency"에 대한 간단한 Google 검색에서 알 수 있습니다. –

+0

@ 짐 게리슨 레이블에 저장된 이미지 아이콘으로 이미지가있는 JLabel을 만드는 것이 문제였습니다. 나는 그 방법을 사용하는 것을 피하고 싶다. 나는이 질문을 게시하기 전에 그것을 시도했지만 이미지는 표시하지만 투명성은 표시하지 않습니다. 당신이 제공 한 질문에서 OP는 투명 부분이 검은 색으로 나타나는데 이는 나에게 해당하지 않는다고 말합니다. 또한 BufferedImage.TYPE_INT_ARGB와 함께 일한 적이 없으며 제공된 질문은 enum을 사용하는 방법에 대한 많은 예제를 제공하지 않으며 열거 형이라고 가정합니다. –

답변

1

문제는 이미지를 가져 오는 것이 아닙니다. 프로그램에서 올바른 결과를 제공합니다. 즉 이미지의 배경이 투명합니다. 그러나 의 ImageReadTest JPanel과 ContentPane의 색상은 동일합니다. 그 때문에 당신은 그 차이를 발견 할 수 없습니다.

그냥 ContentPane으로 당신의 JPanel의와 JFrame의 사이에 또 ​​하나의 층은 있다는 것을 여기에 이해하려면이

frame.getContentPane.setBackground(Color.green); 

것으로, 라인

frame.setBackground(Color.green); 

다음 대체합니다.

편집 : 당신이 당신의 자신의 창을 투명하게 싶기 때문에, 당신은 불투명도가 거짓으로해야 할 것이다. 이렇게하려면 생성자에서 다음 줄을 추가하십시오.

setOpaque(false); 
+0

그게 작동하지 않았다. frame.setBackground (Color.green); 대신 해당 줄을 추가하려고했습니다. 당신이 제안한대로, 그러나 아직도 회색 배경을 얻고있다. 나는 행운을 빌어 화면에 이미지를 추가 한 후에 배치를 시도했다. 그러나 귀하의 대답은 나에게 컨텐츠 영역이 무엇인지 더 잘 이해합니다. 어쩌면 나는 명백한 다른 것을 놓친 것일까? –

+0

setOpaque (false); 필요한 코드입니다. 도와 주셔서 감사합니다! –

+0

'frame.getContentPane을 의미합니까?setBackground (Color.green)'은 필요하지 않습니까? 좋은 지적 인 @Randy_E – afzalex

관련 문제