내가 스윙을 사용하여 체스 앱을 만들고 있다고 가정 해 봅시다. 바둑판을 나타 내기 위해 JLabel 배열을 사용하고 있습니다 (각각은 적절한 아이콘이 가볍게/어두운 음영 상자로 설정되어 있습니다). 체스 조각의 아이콘을 포함하는 또 다른 배열의 JLabel을 만들었지 만 바둑판 위에 표시하도록 구현하는 방법을 알기에는 익숙하지 않습니다. 누구든지 어떤 기술을 알고 있습니까?다른 JLabel의 아이콘 위에 JLabel의 아이콘을 표시하는 방법
답변
저는 창과 두 개의 JLabel을 서로 위에 쌓는 작은 예제를 작성했습니다. 이미지가 128x128 크기와 하나가 투명한 배경 (나는 회색 사각형 상자를 숨기고에서 전당포 이미지의 배경을 방지 이런 식으로)이있는 폰을 가지고있는 grey.jpg 및 pawn.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);
}
}
1) 레이블에 구성 요소를 추가 할 수는 있지만 레이블이 더 이상 적합한 크기를 레이아웃 관리자에 제공 할 수 없다는 단점이 있습니다. 더 나은 방법은 아이콘을 표시하는 레이블이나 레이블이 추가되는 패널에 BG 색상을 설정하는 것입니다. 2) 예를 들어 이미지를 얻는 한 가지 방법은 [이 Q & A] (http://stackoverflow.com/q/19209650/418556)에서 볼 수있는 이미지에 핫 링크하는 것입니다. –
Bryan이 JLabels에 대해 JLabels에 대해 질문했기 때문에이 구현으로 갔다. :) 그래서 나는 질문과 같은 길을 가고 싶었다. 또한 이미지 링크에 대한 제안에 감사드립니다. – Valy
* "질문과 같은 길을 가고 싶었습니다."* [ "하지 마십시오"유효한 대답입니까?] (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'. –
'JLabel'을 다른 컴포넌트를 포함 할 수 있지만 레이아웃 관리자를 설정해야합니다. 아마도 BorderLayout을 사용하십시오. – MadProgrammer
[예제] (http://stackoverflow.com/questions/33115320/having-a-) 이미지 위에 다른 이미지가 있습니다/33115415 # 33115 415) – MadProgrammer
출발점은 [강력하고 크기 조정이 가능한 스윙 체스 GUI 만들기] (http://stackoverflow.com/q/21142686/418556)를 참조하십시오. –