📄 mainwindow.java
字号:
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import javax.swing.*;
import javax.swing.event.*;
/*
This object controls the way the GUI looks and handles the
menu events etc. This is also where the serial config
can be found.
*/
public class MainWindow
implements ActionListener, ItemListener, AdjustmentListener {
static volatile int commandVal;
JButton sendFrame_b;
JButton saveFrame_b;
Thread updateThread;
static CameraImage cImage;
volatile Motion myMotion;
volatile ColorTrack myColor;
volatile Histogram myHistogram;
volatile Stats myStats;
AboutWindow myAbout;
int file_cnt, msg_cnt;
JMenu images_m;
JMenuBar menuBar;
JFrame pref_f, scale_f;
static JTextField thresh_t,
nf_t,
rmin_t,
gmin_t,
bmin_t,
rmax_t,
gmax_t,
bmax_t;
static JTextArea path_crl_t;
static JTextField tol_t, time_t, size_t, port_t;
JButton setParams_b;
static JPanel cam_p, stats_p;
static JPanel configb_p;
static JPanel config_p;
static JPanel settings_p;
static JPanel servo_p;
static JTextField xpos_t, ypos_t;
static JTextField status_t;
static JLabel servo0_l, servo1_l, servo2_l, servo3_l, servo4_l;
static JScrollBar servo0_s, servo1_s, servo2_s, servo3_s, servo4_s;
static JPanel JPanel1;
static JComboBox whiteBalance;
static JComboBox autoGain;
static JComboBox fps;
static JComboBox channel_c;
static JComboBox hr_c;
static JComboBox lm_c;
static JComboBox as_c;
static JComboBox color_c;
static JComboBox bm_c;
static JComboBox sf_chan_c;
static JComboBox pd_c;
static JComboBox ti_c;
static JComboBox fs_c;
static JComboBox hd_c;
static JComboBox dc_c;
static JLabel cFPS_l,mFPS_l,sFPS_l,hFPS_l;
JButton clear_b;
static CameraSerial mySerial;
static int cameraType, cameraVersion;
static int track_color_linemode, get_mean_linemode, frame_diff_linemode;
static JTextField rmean_l, gmean_l, bmean_l;
static JTextField x1, y1, x2, y2, dsx, dsy;
static JTextField pan_range_far,
pan_range_near,
pan_step,
tilt_range_far,
tilt_range_near,
tilt_step;
volatile int res;
JButton send_command_b;
static JProgressBar frameProg;
MainWindow() {
res = 0;
file_cnt = 0;
msg_cnt = 0;
track_color_linemode = 0;
get_mean_linemode = 0;
frame_diff_linemode = 0;
CommWindow cWindow = new CommWindow(); // Serial Config Window
while (cWindow.ready() == 0) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
JPanel1 = new JPanel();
myAbout = new AboutWindow();
JFrame main_f = new JFrame("CMUcam2 GUI");
main_f.getContentPane().setLayout(new BorderLayout());
main_f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
cam_p = new JPanel();
config_p = new JPanel();
tol_t = new JTextField("25", 5);
JPanel select_p = new JPanel();
select_p.add(new JLabel("Select Tolerance"));
select_p.add(tol_t);
clear_b = new JButton("clear");
select_p.add(clear_b);
clear_b.addActionListener(this);
/**************************** Settings JPanel **********************/
JPanel settingspad_p = new JPanel();
settings_p = new JPanel();
GridLayout set_l = new GridLayout(13, 3);
set_l.setVgap(10);
set_l.setHgap(10);
settings_p.setLayout(set_l);
//settings_p.add(new JLabel(""));
//settings_p.add(new JLabel(""));
//settings_p.add(new JLabel(""));
JLabel color_l = new JLabel("Color Space");
color_c = new JComboBox();
color_c.addItem("RGB");
color_c.addItem("YCrCb");
color_c.addItemListener(this);
settings_p.add(color_l);
settings_p.add(color_c);
settings_p.add(new JLabel(""));
//JButton setcs_b = new JButton( "Set Color" );
//settings_p.add(setcs_b);
//setcs_b.addActionListener(this);
JLabel wb_l = new JLabel("White Balance");
whiteBalance = new JComboBox();
whiteBalance.addItem("Off");
whiteBalance.addItem("On");
whiteBalance.addItemListener(this);
settings_p.add(wb_l);
settings_p.add(whiteBalance);
settings_p.add(new JLabel(""));
//JButton setwb_b = new JButton( "Set WB" );
//settings_p.add(setwb_b);
//setwb_b.addActionListener(this);
JLabel ag_l = new JLabel("Auto Gain");
autoGain = new JComboBox();
autoGain.addItem("On");
autoGain.addItem("Off");
autoGain.addItemListener(this);
settings_p.add(ag_l);
settings_p.add(autoGain);
//JButton setag_b = new JButton( "Set Gain" );
//settings_p.add(setag_b);
//setag_b.addActionListener(this);
settings_p.add(new JLabel(""));
JLabel hr_l = new JLabel("Camera Resolution");
hr_c = new JComboBox();
hr_c.addItem("Low");
hr_c.addItem("High");
hr_c.addItemListener(this);
settings_p.add(hr_l);
settings_p.add(hr_c);
settings_p.add(new JLabel(""));
JLabel pd_l = new JLabel("Pixel Difference");
pd_c = new JComboBox();
pd_c.addItem("Off");
pd_c.addItem("On");
pd_c.addItemListener(this);
settings_p.add(pd_l);
settings_p.add(pd_c);
settings_p.add(new JLabel(""));
JLabel ti_l = new JLabel("Inverted Tracking");
ti_c = new JComboBox();
ti_c.addItem("Off");
ti_c.addItem("On");
ti_c.addItemListener(this);
settings_p.add(ti_l);
settings_p.add(ti_c);
settings_p.add(new JLabel(""));
JLabel fs_l = new JLabel("Frame Stream");
fs_c = new JComboBox();
fs_c.addItem("Off");
fs_c.addItem("On");
fs_c.addItemListener(this);
settings_p.add(fs_l);
settings_p.add(fs_c);
settings_p.add(new JLabel(""));
JLabel hd_l = new JLabel("HiRes Frame Diff");
hd_c = new JComboBox();
hd_c.addItem("Off");
hd_c.addItem("On");
hd_c.addItemListener(this);
settings_p.add(hd_l);
settings_p.add(hd_c);
settings_p.add(new JLabel(""));
JLabel dc_l = new JLabel("Diff Channel");
dc_c = new JComboBox();
dc_c.addItem("Red");
dc_c.addItem("Green");
dc_c.addItem("Blue");
settings_p.add(dc_l);
settings_p.add(dc_c);
settings_p.add(new JLabel(""));
dc_c.setSelectedIndex(1);
dc_c.addItemListener(this);
JLabel lm_l = new JLabel("Line Modes");
lm_c = new JComboBox();
lm_c.addItem("Off");
lm_c.addItem("Track Color-Bitmap");
lm_c.addItem("Track Color-Stats");
lm_c.addItem("Get Mean data");
lm_c.addItem("Get Mean data-stats");
lm_c.addItem("Frame Diff-Bitmap");
lm_c.addItem("Frame Diff-Deltas");
lm_c.addItem("Frame Diff-Buffer");
lm_c.addItemListener(this);
settings_p.add(lm_l);
settings_p.add(lm_c);
//JButton setlm_b = new JButton( "Set LM" );
//settings_p.add(setlm_b);
//setlm_b.addActionListener(this);
settings_p.add(new JLabel(""));
JLabel bm_l = new JLabel("Buffer Mode");
bm_c = new JComboBox();
bm_c.addItem("Stream");
bm_c.addItem("Single");
bm_c.addItemListener(this);
settings_p.add(bm_l);
settings_p.add(bm_c);
JButton setbm_b = new JButton("read frame");
settings_p.add(setbm_b);
setbm_b.addActionListener(this);
JLabel nf_l = new JLabel("Noise Filter");
nf_t = new JTextField("2", 5);
settings_p.add(nf_l);
settings_p.add(nf_t);
JButton setnf_b = new JButton("Set NF");
settings_p.add(setnf_b);
setnf_b.addActionListener(this);
JLabel rsa_l = new JLabel("Update All Parameters");
settings_p.add(rsa_l);
JButton rsa_b = new JButton( "Update ALL" );
settings_p.add(rsa_b);
rsa_b.addActionListener(this);
settings_p.add(new JLabel(""));
/*
JButton regUpdate_b=new JButton("Set Reg");
settings_p.add(regUpdate_b);
regUpdate_b.addActionListener(this);
*/
//settings_p.add(servo_b);
settingspad_p.setLayout(new BorderLayout());
settingspad_p.add("Center", settings_p);
JPanel vw_ds_p = new JPanel();
vw_ds_p.setLayout(new BorderLayout());
JPanel vw_p = new JPanel();
vw_p.add(new JLabel("Virtual Window:"));
x1 = new JTextField("100", 5);
y1 = new JTextField("100", 5);
x2 = new JTextField("100", 5);
y2 = new JTextField("100", 5);
vw_p.add(x1);
vw_p.add(y1);
vw_p.add(x2);
vw_p.add(y2);
JButton vw_b = new JButton("Set Window");
vw_p.add(vw_b);
vw_b.addActionListener(this);
JPanel ds_p = new JPanel();
ds_p.add(new JLabel("Down Sampling:"));
ds_p.add(new JLabel("X Axis:"));
dsx = new JTextField("1", 5);
ds_p.add(dsx);
ds_p.add(new JLabel("Y Axis:"));
dsy = new JTextField("1", 5);
ds_p.add(dsy);
JButton ds_b = new JButton("Down Sample");
ds_p.add(ds_b);
ds_b.addActionListener(this);
vw_ds_p.add("North", ds_p);
vw_ds_p.add("South", vw_p);
//vw_ds_p.add("East", rsa_b);
settingspad_p.add("South", vw_ds_p);
/**************************** Servo JPanel **********************/
JPanel servopad_p = new JPanel();
servo_p = new JPanel();
GridLayout set2_l = new GridLayout(12, 3);
set2_l.setVgap(10);
set2_l.setHgap(10);
servo_p.setLayout(set2_l);
JLabel as_l = new JLabel("Auto Servo");
as_c = new JComboBox();
as_c.addItem("Off");
as_c.addItem("On");
as_c.addItemListener(this);
servo_p.add(as_l);
servo_p.add(as_c);
//JButton setres_b = new JButton( "Set Res" );
//settings_p.add(setres_b);
//setres_b.addActionListener(this);
servo_p.add(new JLabel(""));
JLabel servo0 = new JLabel("Servo 0:");
servo0_s = new JScrollBar(JScrollBar.HORIZONTAL, 127, 1, 0, 255);
JLabel servo1 = new JLabel("Servo 1:");
servo1_s = new JScrollBar(JScrollBar.HORIZONTAL, 127, 1, 0, 255);
JLabel servo2 = new JLabel("Servo 2:");
servo2_s = new JScrollBar(JScrollBar.HORIZONTAL, 127, 1, 0, 255);
JLabel servo3 = new JLabel("Servo 3:");
servo3_s = new JScrollBar(JScrollBar.HORIZONTAL, 127, 1, 0, 255);
JLabel servo4 = new JLabel("Servo 4:");
servo4_s = new JScrollBar(JScrollBar.HORIZONTAL, 127, 1, 0, 255);
servo0_l = new JLabel("127");
servo1_l = new JLabel("127");
servo2_l = new JLabel("127");
servo3_l = new JLabel("127");
servo4_l = new JLabel("127");
// JButton servo_b = new JButton("Set Servos");
servo_p.add(servo0);
servo_p.add(servo0_s);
servo_p.add(servo0_l);
servo_p.add(servo1);
servo_p.add(servo1_s);
servo_p.add(servo1_l);
servo_p.add(servo2);
servo_p.add(servo2_s);
servo_p.add(servo2_l);
servo_p.add(servo3);
servo_p.add(servo3_s);
servo_p.add(servo3_l);
servo_p.add(servo4);
servo_p.add(servo4_s);
servo_p.add(servo4_l);
servo0_s.addAdjustmentListener(this);
servo1_s.addAdjustmentListener(this);
servo2_s.addAdjustmentListener(this);
servo3_s.addAdjustmentListener(this);
servo4_s.addAdjustmentListener(this);
pan_range_far = new JTextField("16", 5);
pan_range_near = new JTextField("8", 5);
pan_step = new JTextField("5", 5);
tilt_range_far = new JTextField("30", 5);
tilt_range_near = new JTextField("15", 5);
tilt_step = new JTextField("5", 5);
servo_p.add(new JLabel("pan range far:"));
servo_p.add(pan_range_far);
servo_p.add(new JLabel(""));
servo_p.add(new JLabel("pan range near:"));
servo_p.add(pan_range_near);
servo_p.add(new JLabel(""));
servo_p.add(new JLabel("pan step:"));
servo_p.add(pan_step);
servo_p.add(new JLabel(""));
servo_p.add(new JLabel("tilt range far:"));
servo_p.add(tilt_range_far);
servo_p.add(new JLabel(""));
servo_p.add(new JLabel("tilt range near:"));
servo_p.add(tilt_range_near);
servo_p.add(new JLabel(""));
servo_p.add(new JLabel("tilt step:"));
servo_p.add(tilt_step);
JButton update_servo_b = new JButton("Config Servos");
servo_p.add(update_servo_b);
update_servo_b.addActionListener(this);
/**************************** Stats JPanel **********************/
myStats = new Stats();
JPanel statistics_p = new JPanel();
statistics_p.setLayout(new BorderLayout());
JPanel stats_p = new JPanel();
stats_p.add(new JLabel("FPS"));
sFPS_l=new JLabel("0");
stats_p.add(sFPS_l);
stats_p.add(new JLabel(" "));
JLabel rgb_l = new JLabel("RGB:");
stats_p.add(rgb_l);
rmean_l = new JTextField("0", 5);
stats_p.add(rmean_l);
gmean_l = new JTextField("0", 5);
stats_p.add(gmean_l);
bmean_l = new JTextField("0", 5);
stats_p.add(bmean_l);
JButton stats_b = new JButton("Get Mean");
stats_p.add(stats_b);
stats_b.addActionListener(this);
statistics_p.add("Center", myStats);
statistics_p.add("South", stats_p);
/**************************** Histogram JPanel **********************/
myHistogram = new Histogram();
JPanel histogram_p = new JPanel();
histogram_p.setLayout(new BorderLayout());
JPanel hist_p = new JPanel();
hist_p.add(new JLabel("FPS"));
hFPS_l=new JLabel("0");
hist_p.add(hFPS_l);
hist_p.add(new JLabel(" "));
channel_c = new JComboBox();
channel_c.addItem("Red (Cr)");
channel_c.addItem("Green (Y)");
channel_c.addItem("Blue (Cb)");
channel_c.addItemListener(this);
hist_p.add(channel_c);
JButton hist_b = new JButton("Get Histogram");
hist_p.add(hist_b);
hist_b.addActionListener(this);
histogram_p.add("Center", myHistogram);
histogram_p.add("South", hist_p);
/**************************** Color Tracking JPanel ***************/
myColor = new ColorTrack();
JPanel color_p = new JPanel();
JPanel col_p = new JPanel();
color_p.setLayout(new BorderLayout());
rmin_t = new JTextField("0", 5);
gmin_t = new JTextField("0", 5);
bmin_t = new JTextField("0", 5);
rmax_t = new JTextField("0", 5);
gmax_t = new JTextField("0", 5);
bmax_t = new JTextField("0", 5);
col_p.add(new JLabel("min:"));
col_p.add(rmin_t);
col_p.add(gmin_t);
col_p.add(bmin_t);
col_p.add(new JLabel("max:"));
col_p.add(rmax_t);
col_p.add(gmax_t);
col_p.add(bmax_t);
JPanel colb_p = new JPanel();
colb_p.setLayout(new BorderLayout());
JPanel tc_p = new JPanel();
tc_p.add(new JLabel("FPS:"));
cFPS_l=new JLabel("0");
tc_p.add(cFPS_l);
tc_p.add(new JLabel(" "));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -