2017-05-09 4 views
-1

여기에 코드가 있습니다. 이미지를 배경 위에 올려 놓았을 때 코드를 옮길 때 어떤 코드가 추가 되더라도 왼쪽 벽에 붙어있을뿐입니다. 나는 setLocation과 setBounds를 시도했다. 내가하고 싶은 일은 이미지를 왼쪽 하단으로 이동하는 것입니다. 프레임의 벽면으로 완전히 이동하지는 않습니다. 두 번째 문은 당신이 "배경"구성 요소에 대한 설정 어떤 레이아웃 매니저가 될 레이아웃 매니저로, 프레임의 컨텐츠 구획을 바꾸기 때문에붙어 있고 움직이지 않는 JLabel을 어떻게 이동합니까?

JFrame window = new JFrame(); 
window.setSize(800,480); 
window.setTitle("Battle"); 
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
window.setLayout(new BorderLayout()); 
JLabel background = new JLabel(); 
ImageIcon icon = new ImageIcon("background2.png");  
background.setIcon(icon); 
background.setLayout(new BorderLayout()); 
window.setContentPane(background); 
JLabel p1 = new JLabel(); 
p1 = a.getImage(); 
background.add(p1); 
p1.setLocation(500,500); 
p1.setVisible(true); 
window.setVisible(true); 
+0

의 BorderLayout이 일을하고있다. BorderLayout은 레이아웃 관리자와 마찬가지로 자식 구성 요소가 배치되는 위치를 결정하므로 setLocation에 대한 호출은 아무런 의미가 없습니다. [GridBagLayout] (http://docs.oracle.com/javase/8/docs/api/java/awt/GridBagLayout.html)을 사용하는 방법을 배워야하지만, LayoutManagers는 일반적으로 작동합니다.] (https://docs.oracle.com/javase/tutorial/uiswing/layout/). – VGR

답변

3
window.setLayout(new BorderLayout()); 
... 
window.setContentPane(background); 

첫 번째 문 아무것도하지 않습니다.

내가 원하는 모든 당신이 BorderLayout를 활용할 필요가 있으므로

그럼 당신은 BorderLayout를로의 레이아웃 매니저를 설정, 왼쪽 아래에 이미지를 이동합니다. 작동 예제는 How to Use BorderLayout에있는 스윙 튜토리얼의 섹션을 읽으십시오.

그래서 당신이해야 할 첫번째 일은 하단에 표시되는 구성 요소를 가지고 적절한 제약 조건을 지정할 수 있습니다 :

//background.add(p1); // defaults to BorderLayout.CENTER if no constraint is specified 
background.add(p1, BorderLayout.PAGE_END); 

테스트를이 이미지가 바닥에있을 것입니다,하지만 여전히 중심.

그래서 지금 당신은 왼쪽 정렬 자체를 그리는 라벨에게 라벨에 속성을 설정해야합니다

label.setHorizontalAlignment(JLabel.LEFT); 

을하지 완전히 만약 프레임

의 벽에 이미지 주위에 여유 공간이 필요하면 Border을 라벨에 추가 할 수 있습니다. 위의 링크를 사용하여 How to Use Borders에있는 자습서의 절을 읽으십시오. EmptyBorder을 사용하여 추가 공간을 확보 할 수 있습니다. 이 작업을 수행하는

1

한 가지 방법은 우리가 왼쪽에 레이블을 배치 할 수 있습니다 추가 "왼쪽 패널"컨테이너를 추가하고 바닥

public static void main(String[] args) { 
    JFrame window = new JFrame(); 
    window.setSize(800, 480); 
    window.setTitle("Battle"); 
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    JLabel background = new JLabel(); 
    background.setBackground(Color.gray); 
    background.setLayout(new BorderLayout()); 
    background.setOpaque(true); 
    window.setContentPane(background); 

    JPanel leftPanel = new JPanel(); 
    leftPanel.setLayout(new BorderLayout()); 
    background.add(leftPanel, BorderLayout.WEST); // stick our left side bard to the left side of frame 

    JLabel p1 = new JLabel(); 
    p1.setText("Im here"); 
    p1.setLocation(500, 500); 
    p1.setVisible(true); 
    p1.setBackground(Color.black); 
    p1.setOpaque(true); 
    leftPanel.add(p1, BorderLayout.SOUTH); // add our label to the bottom 
    window.setVisible(true); 
} 

결과 것 : enter image description here