Картинки в JPanel - PullRequest
       2

Картинки в JPanel

3 голосов
/ 06 февраля 2010

Я пытаюсь написать приложение, в которое я хочу добавить разные картинки на Jpanel.Все работает отлично, за исключением формата JPG, который отображает изображения очень плохого качества.Вот как я делаю рисунок:

class draw extends Canvas 
{
    Dimension canvasSize = new Dimension(400, 400);
    String fileName;

    public void paint(Graphics g) 
    {       
        if(this.fileName!=null)
        {
            Toolkit toolkit = Toolkit.getDefaultToolkit();
            Image img = toolkit.getImage(fileName);
            g.drawImage(img, 0, 0, this);
        }                   
    }
    public void setFileName(String name)
    {
        this.fileName=name;
    }

    public Dimension getMinimumSize()
    {
        return canvasSize;  
    }

    public Dimension getPreferredSize()
    {   
        return canvasSize;
    }
}

Есть ли способ, которым покрыт формат JPG?

Ответы [ 2 ]

4 голосов
/ 06 февраля 2010

Это, вероятно, потому что вы растягиваете (или сжимаете) изображение до размера холста.Изображения JPEG не выглядят великолепно, когда вы масштабируете их, особенно если вы увеличиваете масштаб.Попробуйте изображение того же размера, что и (или близко) к вашему холсту.Вы также можете получить высоту и ширину JPEG из класса Image и отобразить его в исходных размерах.В руководстве Sun's Drawing Image показано, как это сделать.

2 голосов
/ 06 февраля 2010

Размещенный код указывает, что OP рисует изображение в его исходном размере.Итак, мои комментарии по поводу кода:

a) Вы говорите, что хотите добавить изображение в JPanel, но по какой-то причине вы расширяете Canvas.Придерживайтесь компонентов Swing.Затем, если вам нужно сделать пользовательское рисование, вы должны переопределить метод paintComponent (), а не метод рисования.

б) Когда вы используете пользовательскую живопись, вы никогда не должны читать изображение в методе рисования.Этот метод можно вызывать множество раз.Возможно, что изображение не было полностью прочитано в память.Я знаю, что Swing будет автоматически перекрашиваться при чтении большей части изображения, я не уверен, как работает AWT Canvas.

c) Кроме того, при переопределении методов рисования не забывайте вызывать super.paint (), super.paintComponent (), иначе вы можете получить неожиданные результаты.

d) Однако, основываясь наВ опубликованном коде нет необходимости даже делать заказную покраску (поскольку вы рисуете изображение в его реальном размере).Просто создайте ImageIcon из изображения и добавьте Icon в JLabel.Затем вы просто добавляете метку в графический интерфейс.

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

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