2016-06-28 6 views
0

12 * 16 (패널에 레이블 넣기)의 그리드 아키텍처를 만들고 각 그리드 셀에 이미지를 넣은 프레임이 있습니다. getBounds()getX()getY() 메서드를 사용하여 각 레이블의 원점 좌표를 가져 오려고 할 때. 그것은 (0,0)입니다.Java에서 구성 요소의 원점 좌표를 얻는 방법

모든 라벨에 (0,0)이 표시되는 이유가 표시되지 않습니다. 구성 요소의 원점 좌표에 액세스 할 수있는 방법이 있습니까? 여기 내 코드 조각이 있습니다.

public static void main(String[] arg){ 


    Toolkit tk = Toolkit.getDefaultToolkit(); 
    int xsize = (int)tk.getScreenSize().getWidth(); 
    int ysize =(int) tk.getScreenSize().getHeight(); 
    String str,str1; 
    Border border = LineBorder.createGrayLineBorder(); 
    BufferedReader bout; 
    BufferedImage image= null; 
    JPanel[] panel; 
    panel = new JPanel[16]; 
    button = new JLabel[16]; 
    JFrame frame = new JFrame("Image Display"); 
    GridLayout g = new GridLayout(); 
    FileInputStream file; 
    ResizeFunction a = new ResizeFunction(); 
    try { 
      file = new FileInputStream("D:\\cache1\\newtask_list.txt"); 
      bout = new BufferedReader(new InputStreamReader(file)); 
      str = bout.readLine(); 

    for(int j=0;j<16;j++){ 
     panel[j] = new JPanel(); 
     panel[j].setLayout(g); 
     g.setColumns(1); 
     g.setRows(12); 
     for(int i=0;i<12;i++){ 
      button[i] = new JLabel(); 
      button[i].setSize(xsize/16, ysize/12); 
      int x=(int) button[i].getBounds().getX(); 
      int y=(int) button[i].getBounds().getY(); 
      System.out.println("button["+i+"]["+j+"]="+x+","+y); 
      button[i].setIgnoreRepaint(true); 
      str= bout.readLine(); 
      str1 = str.substring(0,23); 
      image = ImageIO.read(new File("D:\\cache1\\newtask\\"+str1)); 

      BufferedImage b = a.resizeImage(image,image.getWidth(),image.getHeight(),button[i].getWidth(),button[i].getHeight()); 
      ImageIcon icon = new ImageIcon(b); 
      button[i].setIcon(icon); 
      button[i].setBorder(border); 

      panel[j].add(button[i]); 
     } 
     frame.add(panel[j]); 
     } 
    } catch (Exception ex) { 
     Logger.getLogger(ButtonGrid.class.getName()).log(Level.SEVERE, null, ex); 
     } 

    frame.setLayout(new GridLayout()); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setResizable(false); 
    frame.setSize(xsize, ysize); 
    frame.setVisible(false); 
    frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 
    frame.setUndecorated(true); 
    MouseCursorXYLabel xy = new MouseCursorXYLabel(); 
    xy.displayJFrame(frame); 

    ButtonGrid panel1 = new ButtonGrid(); 
} 

답변

0

그들은 모두 (0,0)는 x와 y를 요청 시간에 의해, 그들은 아직 위치가없는 점이다 좌표가 이유. 프레임은 메서드의 맨 아래에 표시됩니다. getBounds()에서

:

경계 부모

당신은 x와 레이블의 y 좌표를 얻을 수

, 라벨에이 구성 요소의 폭, 높이, 및 한 위치를 지정합니다 부모가 없거나 부모 패널이 프레임에 추가되지 않았거나 프레임이 표시되지 않습니다 (크기가 없습니다).

또한 두 번째 루프에서 새 JLabel 인스턴스 (총 192 개)를 만들지 만 모든 배열을 크기 16의 배열로 배치합니다. 따라서 각 JPanel에 대한 배열의 참조를 덮어 쓰게됩니다.

당신은 2 차원 배열에 모든 새로운 JLabels을 넣어 할 수있는 무엇 :

JLabel[][] buttons = new JLabel[16][12] 

당신의 프레임이 같은 실행 표시됩니다 후 :

for(int i=0;i<16;i++){ 
    for(int j=0;j<12;j++){ 
     System.out.println("button[" + i + "][" + j + "]=" + buttons[i][j].getBounds().x + "," + buttons[i][j].getBounds().x); 
    } 
} 
+0

덕분에, 지금은있어 그것. –

관련 문제