2017-01-29 7 views
-2

Я добавил веб-камеру к своему программному обеспечению, используя com.github.sarxos.webcam. У этого есть JPanel с именем WebcamPanel и имеет предопределенные размеры веб-камеры, в то время как мне нужен мой собственный размер изображений. Мне удалось обрезать изображения, снятые с веб-камеры, по адресу 640 x 480. Я хочу поместить красный прямоугольник над WebcamPanel, чтобы показать, что эта часть изображения будет сохранена.Как установить прозрачную JPanel над непрозрачным JPanel?

public class CardPanel { 
    Dimension panelDim = new Dimension(640, 480); 

    public Cardpanel(){ 
     //....Button Defined earlier 

     btnTakePhoto.addActionListener(new ActionListener() { 

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

    private void webcamFrame(){ 

     imageFrame = new JFrame("Photo Capture"); 
     // Did some calculations to put window at center 
     imageFrame.setBounds(screenSize.width/2 - frameWidth/2, screenSize.height/2 - frameHeight/2, frameWidth, 
      frameHeight); 
     imageFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     imageFrame.setContentPane(contentPane); 

     JPanel webcamWindow = new JPanel(); 

     RedHighlighter redHighlighter = new RedHighlighter(); 

     Webcam webcam = Webcam.getDefault(); 
     webcam.setViewSize(WebcamResolution.VGA.getSize()); 

     webcamPanel = new WebcamPanel(webcam); 
     webcamPanel.setFillArea(true); 
     webcamPanel.setMirrored(false); 
     webcamPanel.setPreferredSize(panelDim); 

     webcamWindow.add(webcamPanel); 
     webcamWindow.add(redHighlighter); 

     hBox.add(webcamWindow); 
    } 

    // Sub Class just for drawing the rectangle 
    public class RedHighlighter extends JPanel{ 

     public RedHighlighter() { 
      // If you delete the following line, nothing will appear 
      setPreferredSize(new Dimension(400, 400)); 
     } 

     @Override 
     public void paint(Graphics g) { 
      g.setColor(Color.RED); 
      g.drawRect(100, 100, 200, 200); 
     } 
    } 
} 

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

Переопределение метода paint помогло мне нарисовать прямоугольник, но он находится сбоку, а не сверху.

enter image description here Как вы можете видеть, прямоугольник нажал WebcamPanel влево. Я хочу, чтобы webcamPanel оставался в его положении, а прямоугольник над ним в центре. Предложите эффективный подход к этой проблеме. Благодаря!

+1

Заканчивать участок от свинга учебника по [Как украсить Compoents] (http://docs.oracle.com/javase/tutorial/uiswing/misc/jlayer.html) один из способов сделать это , – camickr

ответ

2

Один JPanel перебрасывается из-за того, что вы используете управляющие макетами. Если вы хотите, чтобы один JPanel был чересчур другим, вы захотите рассмотреть использование JLayeredPane с видеоизображениями на нижнем уровне, возможно, слоем JLayeredPane.DEFAULT и рисунком JPanel над ним.

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

  • Вы могли бы потенциально сделать в том же JPanel, что изображение отображается в отображая изображение в методе paintComponent, а также рисунок (в строках кода после отображается изображение.
  • Посмотрите на использование JLayer как способ добавления рисунка «украшение» над изображением.
  • Всегда переопределять paintComponent, не краска
  • Всегда вызывайте метод окраски супер в пределах вашего переопределения.
+0

'WebcamPanel' от ** github ** в двоичном формате, и я боюсь, что не могу его редактировать. Я попробовал 'JLayeredPane' с предпочтительным размером, но это изменило бы размер, чтобы охватить всю область даже после' setOpaque (false) 'Я не мог видеть веб-камеру. –

+0

@MirwiseKhan: без вашего текущего уместного кода трудно догадаться, какие проблемы у вас могут возникнуть. Пожалуйста, отредактируйте свой вопрос. –

+0

@HovercraftFulllOfEels Code Обновлено –

0

Это сработало!

public class MyWebcamPanel extends WebcamPanel { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 2808353446021354508L; 

    public MyWebcamPanel(Webcam webcam) { 
     super(webcam); 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     int x = 180; 
     int y = 87; 
     super.paintComponent(g); 
     g.setColor(Color.RED); 
     g.drawRect(x, y, 640-2*x, 480-2*y); 

    } 

}