MigLayout JLabels и исправление их размера

Итак, моя программа создает графический интерфейс MigLayout и имеет кучу JLabels, которым при создании даются изображения. Здесь вы можете увидеть, каков конечный результат прямо сейчас:

http://i.imgur.com/evI0sYT.jpg

Изображения слишком большие и превышают размер JPanel, в котором они содержатся. Он просто создает его таким же, как исходное изображение, а затем отображает это, однако, это, очевидно, проблема. Есть ли способ исправить размер, чтобы он поместил каждый компонент в графический интерфейс?

Для начала я хочу убедиться, что синяя часть не смещается таким образом, я хочу, чтобы она сохраняла размер, который был установлен (половина высоты). Я также хочу, чтобы изображения занимали максимально возможный размер с сохранением соотношения сторон исходного изображения.

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

Мой JPanel настроен следующим образом:

JPanel jpCards = new JPanel(new MigLayout("insets 0, gapx 0, gapy 0, wrap 7", "grow"));

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

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


person Michael Yousef    schedule 18.03.2013    source источник


Ответы (1)


Я решил это, вместо этого изменив размер значка перед созданием JLabel.

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

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

person Michael Yousef    schedule 26.03.2013