Проблема перекрашивания JInternalFrame

Ниже код мой вид, где я показываю потоковую камеру. Контроллер обрабатывает устанавливает изображение и перерисовывает JInternalFrame. У меня есть проблема с этим, потому что изображение с камеры покрывает весь JInternalFrame, даже строку заголовка. Я пытался использовать JPanel, но у меня были проблемы с получением изображения на JPanel, потому что я расширяю JInternalFrame.

public class CameraView extends JInternalFrame{

    private BufferedImage image;

    public CameraView(){
        super("Camera", false,false,false, false);

        setSize(500,500);
        setLocation(200,200);

    }

    @Override
    public void paint(Graphics g){
        g.drawImage(image, 0, 0, null);
    }


   public void setImage(BufferedImage image){
       this.image = image;
   }
}

Вот как это выглядит. Нет строки заголовка.

1 ответ

Решение

Вы переопределяете paint метод кадра. это paint Метод - это то, что рисует строку заголовка.

Вы должны создать второй класс, который расширяет JComponentпереопределить paint метод этого класса, а затем добавьте его экземпляр в свой фрейм.

Что-то вроде:

public class CameraView extends JInternalFrame{

    private BufferedImage image;

    public CameraView(){
        super("Camera", false,false,false, false);

        setLocation(200,200);

        add(new JComponent() {

            {
                setSize(500, 500); // size of the image
            }

            @Override
            public void paint(Graphics g){
                g.drawImage(image, 0, 0, null);
            }

        });

        pack();
    }

   public void setImage(BufferedImage image){
       this.image = image;
   }
}

Вы также можете иметь paint вызов метода super.paint(g); но то, как вы его настроили сейчас, ваше изображение будет перекрывать строку заголовка.


Также звоню super("Camera", false,false,false, false); так же, как звонить super("Camera"), Значения по умолчанию false,

Другие вопросы по тегам