2013-11-09 2 views
1

Прежде чем вы спросите, я поднял эту проблему на веб-сайте, и предоставленные решения, к сожалению, не сработали для меня, поэтому я должен прибегнуть к просьбе еще раз увидеть, что я могу делать неправильно.Измените размер изображения в соответствии со всем JLabel, адаптирующимся к его размеру

Ближайшие достижение я имел с кодом я получил это (я должен определенно использовать и попробовать поймать, когда я получить изображение, я спасу, что для позже):

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 означает столбец, фила означает ряд, может быть, я должен начать писать свой код полностью на английском языке)

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); 
    } 

} 

в заключение я должен сказать, что я рассмотрел добавление componentListener к плитке, так как она проходит в JLabel, но я также пытался изменить размер изображения до размеров лейбла без толку, так как он дал мне исключение, говоря, что его размеры равны 0, и ну, они не могут быть 0.

Спасибо вам за чтение!

+0

Возможно, это простой ответ, но вы все еще не приняли ответы в своих других сообщениях, поэтому я передам это. – camickr

+1

О? Это новая концепция, позвольте мне исправить это, я должен быть очень благодарен вам. Я только что принял ваш ответ, я не видел, что мне пришлось сначала, извините! – krieg

ответ

3

Вы можете попробовать Darryl's Stretch Icon для динамического изменения размера.

В противном случае вы должны расширить JComponent (вместо JLabel) и создать собственную картину изображения. См. Background Panel для примера того, как рисовать масштабированное изображение.

+0

Это помогло, оно устранило пробелы на 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 поле типа длиной. Добавьте сгенерированный идентификатор серийной версии к выбранному типу.
Смежные вопросы