Как добавить кнопку в холст?

#java #user-interface #video

#java #пользовательский интерфейс #Видео

Вопрос:

У меня есть холст, а внутри холста у меня есть веб-камера. Поверх видеоизображения я хочу разместить «Кнопку» и прикрепить событие, чтобы у меня был контроль над полноэкранным режимом и свести его к минимуму. Но этот метод выдает ошибку, как это исправить?

   public static void main(String[] args) 
  { 

        JFrame frame = new JFrame("Overlay"); 
        frame.setBackground(Color.RED);

        // Canvas, to have a video and on top a button    
        final Canvas canvas = new Canvas(); 
        Button button = new Button(canvas); // ERROR
        button.setBounds(10,10, 100, 40);
        canvas.setPreferredSize(new Dimension(200, 200));     

        // Layout
        JPanel content = new JPanel(new GridLayout(2,2));
        content.add(canvas);
        content.add(new JButton("test"));  // for empty cell

        // Show
        frame.add(content);                        
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        frame.pack(); 
        frame.setVisible(true); 

        // Third party tools to capture the webcam, and plugin to our canvas
        final Video video = player.getElementByName("gl"); 
        XOverlay.wrap(video).setWindowID(canvas); 
    } 
  

Комментарии:

1. Сообщение об ошибке довольно пояснительное. Этот конструктор не существует. Сначала вы должны создать кнопку, а затем добавить ее в контейнер (кстати, canvas — это не контейнер). И вы смешиваете компоненты swing и awt. Будьте очень осторожны в том, что вы делаете.

Ответ №1:

Выдает ошибку, потому что в Button классе нет конструктора, который принимает canvas в качестве аргумента.Вы можете добавить свою кнопку в ту же JPanel, куда вы добавляете свой холст.

Комментарии:

1. Добавление в JPanel отделяет кнопку от наложения. Итак, видео отдельно, а кнопка отдельно. У меня запущено полноэкранное видео, и мне нужна кнопка в правом верхнем углу.

Ответ №2:

 canvas.add(button);
  

или

 canvas.add(button, 55, 30);