Изображения обрезаются с помощью Swing - PullRequest
3 голосов
/ 27 августа 2011

Я пишу платформенную игру. На данный момент я пытаюсь получить 400 плиток для отображения одновременно. Это моя панель. С верхней и левой сторон все работает отлично, но справа и снизу изображения обрезаются на несколько пикселей Каждое изображение 32 * 32. Все blocks инициализированы. Ни один не является нулевым. Что здесь не так?

public class Pane extends JPanel implements ActionListener{

    private static final long serialVersionUID = 1L;
    Timer timer;
    boolean setup = false;
    Block[][] blocks;
    Level level;
    public Pane()
    {
        level = new Level();
        level.Generate();
        blocks = level.Parse();
        setBackground(Color.WHITE);
        timer = new Timer(25, this);
        timer.start();
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D)g;
        for(Block[] b : blocks)
        {
            for(Block bx : b)
            {
                // Debug code if(bx.letter.equals("D"))
                // Debug codeSystem.out.println(bx.y*32 +" = "+ bx.x*32);
                g2d.drawImage(bx.bpic, bx.x*32, bx.y*32, this);
            }
        }
        Toolkit.getDefaultToolkit().sync();
        g.dispose();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        repaint();  
    }
}

Ответы [ 2 ]

5 голосов
/ 27 августа 2011

на правой и нижней сторонах изображения обрезаются на несколько пикселей

Если вы имеете в виду правую и нижнюю стороны всей панели (не на одной плитке),чем это, вероятно, проблема, связанная с LayoutManager.Решение зависит от того, какой менеджер компоновки вы используете для компонента, к которому будет добавлен ваш JPanel.

Вы можете попытаться указать минимальный / предпочтительный размер вашей JPanel с помощью:

Pane pane = new Pane();
pane.setPreferredSize(...);
pane.setMinimumSize(...);

Чтобы указать его минимальный размер в соответствии с размером сгенерированного изображения (32 * COL,32 * ROW).К сожалению, эффективность вызова setPreferredSize зависит от менеджера компоновки родительского компонента Pane.

4 голосов
/ 27 августа 2011

JComponent может сделать это в принципе и может очень легко вернуть что-то вроде MinimumSize или PreferredSize, действительное для большинства стандартных Swing LayoutManager , примеры здесь .

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