📄 capturedeviceframe.java
字号:
import javax.media.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
import java.io.IOException;
import javax.media.format.*;
import javax.swing.*;
import javax.swing.border.*;
public class CaptureDeviceFrame extends JFrame
{
protected JLabel adLabel;
protected JLabel afLabel;
protected JLabel vdLabel;
protected JLabel vfLabel;
protected JComboBox adCbb;
protected JComboBox afCbb;
protected JComboBox vdCbb;
protected JComboBox vfCbb;
protected JButton okButton;
protected JButton cancelButton;
protected Vector devices = null;
protected Vector audioDevices = null;
protected Vector videoDevices = null;
protected CaptureDeviceInfo cdi = null;
protected ClientFrame p = null;
public CaptureDeviceFrame(ClientFrame parent)
{
p = parent;
adLabel = new JLabel("音频设备:");
afLabel = new JLabel("音频格式:");
vdLabel = new JLabel("视频设备:");
vfLabel = new JLabel("视频格式:");
adCbb = new JComboBox();
afCbb = new JComboBox();
vdCbb = new JComboBox();
vfCbb = new JComboBox();
okButton = new JButton("确定");
cancelButton = new JButton("取消");
devices = CaptureDeviceManager.getDeviceList ( null );
Format[] formats;
if (devices != null && devices.size() > 0)
{
int deviceCount = devices.size();
audioDevices = new Vector();
videoDevices = new Vector();
for ( int i = 0; i < deviceCount; i++ )
{
cdi = (CaptureDeviceInfo) devices.elementAt ( i );
formats = cdi.getFormats();
for ( int j = 0; j < formats.length; j++ )
{
if ( formats[j] instanceof AudioFormat )
{
audioDevices.addElement(cdi);
break;
}
else if (formats[j] instanceof VideoFormat )
{
videoDevices.addElement(cdi);
break;
}
}
}
}
// 将音频设备显示在下拉列表中
for (int i = 0; i < audioDevices.size(); i++)
{
cdi = (CaptureDeviceInfo)audioDevices.elementAt(i);
if(cdi != null) adCbb.insertItemAt(cdi, i);
}
if(adCbb.getItemCount() > 0)
{
adCbb.setSelectedIndex(0);
cdi = (CaptureDeviceInfo)audioDevices.elementAt(0);
formats = cdi.getFormats();
for ( int i = 0; i < formats.length; i++ )
{
afCbb.addItem(formats[i]);
}
}
else
{
String s = "没有音频设备";
adCbb.addItem(s);
adCbb.setSelectedIndex(0);
afCbb.addItem(s);
afCbb.setSelectedIndex(0);
adCbb.setEnabled(false);
afCbb.setEnabled(false);
//okButton.setEnabled(false);
}
// 将视频设备显示在下拉列表中
for (int i = 0; i < videoDevices.size(); i++)
{
cdi = (CaptureDeviceInfo)videoDevices.elementAt(i);
if(cdi != null) vdCbb.insertItemAt(cdi, i);
}
if(vdCbb.getItemCount() > 0)
{
vdCbb.setSelectedIndex(0);
cdi = (CaptureDeviceInfo)videoDevices.elementAt(0);
formats = cdi.getFormats();
for ( int i = 0; i < formats.length; i++ )
{
vfCbb.addItem(formats[i]);
}
}
else
{
String s = "没有视频设备";
vdCbb.addItem(s);
vdCbb.setSelectedIndex(0);
vfCbb.addItem(s);
vfCbb.setSelectedIndex(0);
vdCbb.setEnabled(false);
vfCbb.setEnabled(false);
//okButton.setEnabled(false);
}
adCbb.addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent e)
{
choiceAD_itemStateChanged();
}
});
vdCbb.addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent e)
{
choiceVD_itemStateChanged();
}
});
adLabel.setBounds(new Rectangle(20, 20, 60, 20));
afLabel.setBounds(new Rectangle(20, 50, 60, 20));
vdLabel.setBounds(new Rectangle(20, 80, 60, 20));
vfLabel.setBounds(new Rectangle(20, 110, 60, 20));
adCbb.setBounds(new Rectangle(90, 20, 200, 20));
afCbb.setBounds(new Rectangle(90, 50, 200, 20));
vdCbb.setBounds(new Rectangle(90, 80, 200, 20));
vfCbb.setBounds(new Rectangle(90, 110, 200, 20));
okButton.setBounds(new Rectangle(40, 150, 100, 20));
okButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
ok_ActionPerformed();
}
});
cancelButton.setBounds(new Rectangle(180, 150, 100, 20));
cancelButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
cancel_ActionPerformed();
}
});
Container cp = getContentPane();
cp.setLayout(null);
cp.add(adLabel, null);
cp.add(afLabel, null);
cp.add(vdLabel, null);
cp.add(vfLabel, null);
cp.add(adCbb, null);
cp.add(afCbb, null);
cp.add(vdCbb, null);
cp.add(vfCbb, null);
cp.add(okButton, null);
cp.add(cancelButton, null);
setTitle("Capture Device");
setSize(310, 220);
setResizable(false);
setLocationRelativeTo(p);
setVisible(true);
}
private void choiceAD_itemStateChanged()
{
CaptureDeviceInfo cdi = (CaptureDeviceInfo)adCbb.getSelectedItem();
if(cdi != null)
{
Format[] formats = cdi.getFormats();
afCbb.removeAllItems();
for ( int i = 0; i < formats.length; i++ )
{
afCbb.addItem(formats[i]);
}
}
}
private void choiceVD_itemStateChanged()
{
CaptureDeviceInfo cdi = (CaptureDeviceInfo)vdCbb.getSelectedItem();
if(cdi != null)
{
Format[] formats = cdi.getFormats();
vfCbb.removeAllItems();
for ( int i = 0; i < formats.length; i++ )
{
vfCbb.addItem(formats[i]);
}
}
}
public AudioFormat getAudioFormat()
{
return (AudioFormat)afCbb.getSelectedItem();
}
public VideoFormat getVideoFormat()
{
return (VideoFormat)vfCbb.getSelectedItem();
}
public CaptureDeviceInfo getAudioDevice()
{
return (CaptureDeviceInfo)adCbb.getSelectedItem();
}
public CaptureDeviceInfo getVideoDevice()
{
return (CaptureDeviceInfo)vdCbb.getSelectedItem();
}
public void ok_ActionPerformed()
{
if(!adCbb.isEnabled())
{
JOptionPane.showMessageDialog(p, "没有音频设备", "系统消息", JOptionPane.INFORMATION_MESSAGE);
}
else if(!vdCbb.isEnabled())
{
JOptionPane.showMessageDialog(p, "没有视频设备", "系统消息", JOptionPane.INFORMATION_MESSAGE);
}
else
{
MultiSelectFrame msf = new MultiSelectFrame(this.p, this);
this.setVisible(false);
}
}
public void cancel_ActionPerformed()
{
this.setVisible(false);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -