2017-02-17 6 views
0

내가 스윙을 사용하여 체스 앱을 만들고 있다고 가정 해 봅시다. 바둑판을 나타 내기 위해 JLabel 배열을 사용하고 있습니다 (각각은 적절한 아이콘이 가볍게/어두운 음영 상자로 설정되어 있습니다). 체스 조각의 아이콘을 포함하는 또 다른 배열의 JLabel을 만들었지 만 바둑판 위에 표시하도록 구현하는 방법을 알기에는 익숙하지 않습니다. 누구든지 어떤 기술을 알고 있습니까?다른 JLabel의 아이콘 위에 JLabel의 아이콘을 표시하는 방법

+0

'JLabel'을 다른 컴포넌트를 포함 할 수 있지만 레이아웃 관리자를 설정해야합니다. 아마도 BorderLayout을 사용하십시오. – MadProgrammer

+1

[예제] (http://stackoverflow.com/questions/33115320/having-a-) 이미지 위에 다른 이미지가 있습니다/33115415 # 33115 415) – MadProgrammer

+1

출발점은 [강력하고 크기 조정이 가능한 스윙 체스 GUI 만들기] (http://stackoverflow.com/q/21142686/418556)를 참조하십시오. –

답변

0

저는 창과 두 개의 JLabel을 서로 위에 쌓는 작은 예제를 작성했습니다. 이미지가 128x128 크기와 하나가 투명한 배경 (나는 회색 사각형 상자를 숨기고에서 전당포 이미지의 배경을 방지 이런 식으로)이있는 폰을 가지고있는 grey.jpgpawn.png 것을

참고. 여기

창을 구축하고 구성 요소를 추가하는 ChessFrame 클래스입니다 : 여기

import java.awt.BorderLayout; 
import java.awt.Color; 

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


public class ChessFrame extends JFrame { 

    private JPanel panel; 
    private JLabel greyBox; 
    private JLabel pawn; 


    public ChessFrame() { 
     super(); 

     /* configure the JFrame */ 
     this.setSize(300, 300); 
     this.setLocationRelativeTo(null); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 


    public void addComponents() { 
     panel = new JPanel(); 
     greyBox = new JLabel(new ImageIcon("images/grey.jpg")); 
     pawn = new JLabel(new ImageIcon("images/pawn.png")); 

     /* add the pawn inside the grey box (we have to set a layout for the grey box JLabel) */ 
     greyBox.setLayout(new BorderLayout()); 
     greyBox.add(pawn); 

     /* add grey box to main JPanel and set its background to white so we observe the result better */ 
     panel.add(greyBox); 
     panel.setBackground(Color.WHITE); 

     this.getContentPane().add(panel); 
    } 


    @Override 
    public void setVisible(boolean b) { 
     super.setVisible(b); 
    } 

} 

그리고이 인 인 창 ChessFrame 객체를 생성하고 표시하는 메인 클래스 :

public class Main { 

    public static void main(String[] args) { 
     ChessFrame chessFrame = new ChessFrame(); 

     chessFrame.addComponents(); 
     chessFrame.setVisible(true); 
    } 

} 
+0

1) 레이블에 구성 요소를 추가 할 수는 있지만 레이블이 더 이상 적합한 크기를 레이아웃 관리자에 제공 할 수 없다는 단점이 있습니다. 더 나은 방법은 아이콘을 표시하는 레이블이나 레이블이 추가되는 패널에 BG 색상을 설정하는 것입니다. 2) 예를 들어 이미지를 얻는 한 가지 방법은 [이 Q & A] (http://stackoverflow.com/q/19209650/418556)에서 볼 수있는 이미지에 핫 링크하는 것입니다. –

+0

Bryan이 JLabels에 대해 JLabels에 대해 질문했기 때문에이 구현으로 갔다. :) 그래서 나는 질문과 같은 길을 가고 싶었다. 또한 이미지 링크에 대한 제안에 감사드립니다. – Valy

+1

* "질문과 같은 길을 가고 싶었습니다."* [ "하지 마십시오"유효한 대답입니까?] (http://meta.stackexchange.com/questions/8891/is-dont -do-it-a-valid-answer). (그렇습니다. OP가 잘못된 접근법을 취하고 있고 더 나은 해결책이있는 경우 확실합니다.) 구체적인 예가이 질문에 대한 내 의견 (질문 자체에 대한 답글)과 [내 대답 ] (http://stackoverflow.com/a/42312098/418556)에서 [TimerTask를 사용하여 JPanels 이동] (http://stackoverflow.com/q/42310947/418556) - 패널을 움직이거나 " TimerTask'. –