2013-12-08 4 views
2

이것은 코드입니다. 창이 골드라는 두 개의 레이블 네 개의 섹션으로 오른쪽 상단 부분에 나누어 : 건강 : 두 번째 위의 간격 최초의 표시 일하도록되어 무엇항목은 JPanel에서 이동하지 않습니다

public class Main { 
    public static int Health = 100; 
    public static int ArmourPt = 0; 
    public static int Gold = 250; 
    public static JLabel Goldlbl = new JLabel("Gold:"); 
    public static JLabel Healthlbl = new JLabel("Health:"); 
    public static JLabel ArmourPtLbl = new JLabel("Armour Points"); 
    public static String GoldString = (Integer.toString(Gold)); 
    public static JLabel GoldDis = new JLabel(GoldString); 
    public static String HealthString = (Integer.toString(Health)); 
    public static JLabel HealthDis = new JLabel(HealthString); 
    public static JFrame MainWindow = new JFrame(); 

    public static int CalcDamage(int Damage, int Armour) { 
     int ReturnDamage = Damage - Armour + Damage/Damage + Armour/Damage * Damage -   Armour + Damage + 25 ; 
     if(ReturnDamage < 0){ 
      ReturnDamage = 0; 
     } 
     return ReturnDamage;  
    } 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     MainWindow.setSize(1500, 700); 
     MainWindow.setTitle("Ampventure");; 

     JPanel MPanel = (JPanel)MainWindow.getContentPane(); 
     MPanel.setLayout(null); 

     JPanel StatsPanel = new JPanel(); 
     StatsPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 4)); 
     StatsPanel.setSize(350, 450); 
     StatsPanel.setLocation(0, 0); 
     StatsPanel.setMaximumSize(new Dimension (350, 450)); 
     StatsPanel.add(Goldlbl); 
     Goldlbl.setLocation(30, 14); 
     StatsPanel.add(GoldDis); 
     GoldDis.setLocation(35, 14); 
     StatsPanel.add(Healthlbl); 
     Healthlbl.setLocation(0, 0); 
     MPanel.add(StatsPanel); 

     JPanel InvPanel = new JPanel(); 
     InvPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 4)); 
     InvPanel.setSize(350, 212); 
     InvPanel.setLocation(0, 450); 
     StatsPanel.setMaximumSize(new Dimension (350, 250)); 
     MPanel.add(InvPanel); 

     JPanel DisplayPanel = new JPanel(); 
     DisplayPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 4)); 
     DisplayPanel.setSize(1135, 450); 
     DisplayPanel.setLocation(350, 0); 
     MPanel.add(DisplayPanel); 

     JPanel ControlPanel = new JPanel(); 
     ControlPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 4)); 
     ControlPanel.setSize(1135, 212); 
     ControlPanel.setLocation(350, 450); 
     MPanel.add(ControlPanel); 

     MainWindow.setVisible(true); 
    } 
} 

. 라벨 건강 : : 실행에 어떻게됩니까

다음 레이블 골드에 수평이다 : 나는 모든 것을 변화 시도

,하지만 아무것도 작동하지 않습니다.

또한 내 프로그램이 null 레이아웃 관리자를 사용한다는 것을 알고 있지만 이것이 내 의도입니다. 실수가 아닙니다.

답변

2

MPanel에 대해서만 널 레이아웃을 설정합니다. 중첩 된 패널은 상위 레이아웃을 상속하지 않습니다. StatsPanelFlowLayout이므로 기본 레이아웃은 JPanel입니다. GoldlblHealthlblFlowLayout의 규칙에 따라 배치됩니다. 더 많은 예제는 How to Use FlowLayout을 참조하십시오.

절대 위치 지정을 사용하려는 경우 StatsPanel.setLayout(null);을 실행하십시오. 절대 레이아웃의 경우 컨테이너의 각 자식에 대해 setbounds 메서드를 호출해야합니다. 자세한 내용은 Doing Without a Layout Manager을 참조하십시오.

부수적으로 게시 된 스 니펫의 이름 지정 규칙은 다소 혼란 스럽습니다. Java Naming Conventions을 참조하십시오.

관련 문제