Центрирование импортированного PNG - PullRequest
0 голосов
/ 02 ноября 2018

По сути, я все еще новичок в java и импортировал простой png поверх другого, для меня это подтверждение концепции, и я бы предположил, что это очень неформальное кодирование. Тем не менее я не знаю, как переместить второй png, так как он помещает себя в (0,0,0) в левом верхнем углу, как только приложение открывается.

public class DisplayImage extends JFrame {

    public DisplayImage() {
        initUI();
    }

    private ImageIcon loadImage() {
        ImageIcon ii = new ImageIcon("/Users/980057130/Desktop/pixil-frame-0.png");
        return ii;
    }

    private ImageIcon loadImage1() {
        ImageIcon iii = new ImageIcon("/Users/980057130/Desktop/Dynamic-Dungeon.png");
        return iii;
    }

    private void initUI() {                   
        ImageIcon ii = loadImage();
        ImageIcon iii = loadImage1();

        JLabel label = new JLabel(iii);
        JLabel label1 = new JLabel(ii);

        createLayout(label);
        createLayout(label1);

        label = new JLabel();

        Container contentPane = getContentPane();
        contentPane.add(new JScrollPane(label), "Center");

        setTitle("Dynamic Dungeon");
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
}

Любая помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

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

Итак, основная логика будет:

JLabel foreground = new JLabel( new ImageIcon() );
JLabel background = new JLabel( new ImageIcon(...) );
background.setLayout( new GridBagLayout() );
background.add(foreground, new GridBagConstraints() );
JScrollPane scrollPane = new JScrollPane( background );
add(scrollPane, BorderLayout.CENTER);

При использовании GridBagLayout с ограничениями по умолчанию любой добавленный компонент будет автоматически центрироваться в доступном пространстве.

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

0 голосов
/ 02 ноября 2018

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

Вы можете проверить этот вопрос Рисование холста на JFrame

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...