2013-11-09 4 views
1

에 맞도록 조정하십시오. 웹 사이트에서이 문제를 찾았습니다. 제공된 솔루션은 불행히도 저에게 효과적이지 않으므로 요청해야합니다. 다시 한 번 내가 잘못하고있는 것을 볼 수 있습니다.이미지 크기를 변경하기 전에 크기가

내가있어 코드로 했어

가장 가까운 성과는이 (내가 가장 확실히 나는 이미지를 검색 할 때, 나중에에 대한 것을 절약 할 시도를 사용하고 캐치 할 필요)입니다 :

private void asignarTile(Tile tile, JPanel panel){ 

    if(tile.getTipo() == 0){ 

     ImageIcon ii = new ImageIcon("pasto.png"); 
     Image image = ii.getImage(); 
     Image newimg = image.getScaledInstance(32, 32, java.awt.Image.SCALE_SMOOTH); 
     ii = new ImageIcon(newimg); 
     tile.setIcon(ii); 
     panel.add(tile); 
    } 
} 

자, 지금까지 말한 것처럼, 코드가 특정 크기에서 작동한다는 것을 언급해야하지만 나중에 이미지의 크기를 JLabel에 적용하지 않을 것입니다. 즉, 먼저 다음을 갖습니다.

enter image description here

그러나 크기를 조정하면 이 :

enter image description here

내가 그것을 그 타일의 JLabel을 확장하고 이러한 변경 사항입니다주의하는 것이 유용 할 것이라고 생각

(COLUMNA 열을 의미 휠라는 행, 어쩌면 내가 영어로 완전히 내 코드 작성을 시작한다는 뜻) 나는 내가이 JLabel의 확장 이후 타일에 componentListener를 추가 고려했다고 말을해야 결론적으로
package gui; 

import javax.swing.JLabel; 

public class Tile extends JLabel{ 

    private int fila, columna, tipo; 

    public int getFila() { 
     return fila; 
    } 

    public void setFila(int x) { 
     this.fila = x; 
    } 

    public int getColumna() { 
     return columna; 
    } 

    public void setColumna(int y) { 
     this.columna = y; 
    } 

    public int getTipo(){ 
     return tipo; 
    } 

    public void setTipo(int tipo){ 
     if(tipo >= 0 || tipo <= 6) 
      this.tipo = tipo; 
    } 

    public Tile(int x, int y, int tipo) { 
     this.setFila(x); 
     this.setColumna(y); 
     this.setTipo(tipo); 
    } 

} 

하지만 나을 내 주면서 또한, 아무 소용이 라벨의 크기에 이미지 크기를 조정하는 것을 시도했다 예외는 그 차원이 0이고, 잘 0이 될 수 없다는 것을 말합니다.

읽어 주셔서 감사합니다.

+0

아마도 쉽게 대답 할 수 있지만 다른 게시물에서는 아직 답을 수락하지 않았으므로이 항목을 전달하겠습니다. – camickr

+1

오? 그건 새로운 개념입니다. 제가 고칠 수 있도록, 정말 감사해야합니다. 방금 ​​답변을 수락했는데, 처음에는해야한다는 것을 알지 못했습니다. 죄송합니다. – krieg

답변

3

동적 크기 조정을 위해 Darryl의 Stretch Icon을 사용해보세요.

그렇지 않으면 JLabel 대신 JComponent를 확장하고 사용자 정의 이미지 페인팅을 소유하고 있습니까? 크기 조정 된 이미지를 페인트하는 방법의 예는 Background Panel을 참조하십시오.

+0

그것이 certianly 도움이되었습니다, 그것은 Y에 간격을 고정했지만 X처럼, 그것을 떠나 : http://puu.sh/5dGUh.png – krieg

+0

@ krieg, 당신은 적절한 매개 변수를 사용 했습니까? 당신이 원하지 않는 것은 비례로 기본 설정되어 있습니다. – camickr

+0

어떤 매개 변수? StretchIcon의 생성자에있는 것들? 간격 문제는 프레임을 늘리는 방법에 따라 다릅니다. http://puu.sh/5dIjJ.png 가로로 늘리면 다음과 같습니다. http://puu.sh/5dIlK.png 스트레치 할 때 수직으로. 현재 StretchIcon에 대한 매개 변수 만 원하는 StretchIcon 개체를 만들어서 타일로 설정하고 패널에 추가했습니다. – krieg

1

더 큰 타일 이미지를 만들거나 찾으려고합니다. 이미지를 늘리려고하면 품질이 떨어지지 만 축소하는 것은 아닙니다.

+0

나는 @camickr이 나에게 말한 매개 변수로 방금 고쳤지만, 아직 나오지 않은 문제를 생각 나게했다. 고맙습니다. – krieg

+0

@krieg : 기꺼이 도와 주었고, 환영합니다. –

0

이 코드는 좋아 보인다.

  • 직렬화 클래스 Tile.java 긴 형태의 정적 최종 serialVersionUID의 필드를 선언하지 않습니다 여기에 코드 리뷰를 제안합니다. 솔루션 : 생성 된 일련 번호 ID를 선택한 유형에 추가하십시오.
관련 문제