java小程序,模拟电视机和遥控
简单说说,程序的主要使用是用来模拟实现电视机和遥控之间的操作的。总所周知,电视机关闭之后频道会保存。这里会用txt来记录数组,用gui模拟电视机和遥控器。而且,每个电视台的音量是分开储存的。
分成4个部分组成。box.java是存放main的,data.java用来负责数据的输入输出的。tvbox.java和remote.java分别表示的是电视机和遥控器.
代码如下:
box.java
1 public class box { 2 3 /** 4 * @param args 5 */ 6 public static void main(String[] args) { 7 // TODO Auto-generated method stub 8 new tvbox(); 9 new remote(); 10 } 11 12 }
简单地调用remote()和tvbox()两个class.
data.java
在C盘创建data.txt和data_channel.txt用来存放电视台和各个电视台的频道的数据,开机的时候可以读取.用流对每个台的音量以及现在在看的电视台进行读写.
1 import java.io.*; 2 public class data { 3 public static BufferedReader bufread; 4 private static String path = "C:/data.txt"; 5 private static String path_channel = "C:/data_channel.txt"; 6 private static File filename = new File(path); 7 private static File filename_channel = new File(path_channel); 8 9 10 public static void creatTxtFile() throws IOException{ 11 if (!filename.exists()) { 12 filename.createNewFile(); 13 for(int i = 0; i <30; i++) 14 tvbox.volume[i] = 10; 15 data.write(); 16 System.err.println(filename + "已创建!"); 17 } 18 } 19 public static void creatTxtFile_channel() throws IOException{ 20 if (!filename_channel.exists()) { 21 filename_channel.createNewFile(); 22 tvbox.channel_now = 0; 23 data.write_channel(); 24 25 System.err.println(filename_channel + "已创建!"); 26 } 27 } 28 29 30 31 32 public static String read_test() throws IOException 33 { 34 BufferedReader in = new BufferedReader(new FileReader(filename)); 35 String line; 36 /*while((line = in.readLine()) != null){ 37 String[] temp = line.split("\t"); 38 for(int j=0;j<temp.length;j++){ 39 remoter.volume[j] = Integer.parseInt(temp[j]); 40 } 41 }*/ 42 // 43 line = in.readLine(); 44 String[] temp = line.split("\t"); 45 for(int j=0; j<temp.length; j++) 46 { 47 tvbox.volume[j] = Integer.parseInt(temp[j]); 48 } 49 // 50 in.close(); 51 System.err.println(line); 52 return line; 53 54 } 55 public static String read_channel_test() throws IOException 56 { 57 BufferedReader in = new BufferedReader(new FileReader(filename_channel)); 58 String line; 59 /*while((line = in.readLine()) != null){ 60 String[] temp = line.split("\t"); 61 for(int j=0;j<temp.length;j++){ 62 remoter.channel_now = Integer.parseInt(temp[j]); 63 } 64 } 65 */ 66 // 67 line = in.readLine(); 68 String[] temp = line.split("\t"); 69 for(int j=0; j<temp.length; j++) 70 { 71 tvbox.channel_now = Integer.parseInt(temp[j]); 72 } 73 // 74 75 in.close(); 76 System.err.println(line); 77 return line; 78 } 79 80 public static void write_channel() throws IOException{ 81 String newString=""; 82 newString += tvbox.channel_now +"\t"; 83 String filein = newString + "\r\n"; 84 String string_null = ""; 85 RandomAccessFile mm = null; 86 try { 87 mm = new RandomAccessFile(filename_channel, "rw"); 88 mm.writeBytes(string_null); 89 mm.writeBytes(filein); 90 } catch (IOException e1) { 91 // TODO 自动生成 catch 块 92 e1.printStackTrace(); 93 } finally { 94 if (mm != null) { 95 try { 96 mm.close(); 97 } catch (IOException e2) { 98 // TODO 自动生成 catch 块 99 e2.printStackTrace(); 100 } 101 } 102 } 103 } 104 105 public static void write() throws IOException{ 106 String newString=""; 107 for(int i = 0; i < 30 ; i++) 108 { 109 newString += tvbox.volume[i]+"\t"; 110 } 111 String filein = newString + "\r\n"; 112 String string_null = ""; 113 RandomAccessFile mm = null; 114 try { 115 mm = new RandomAccessFile(filename, "rw"); 116 mm.writeBytes(string_null); 117 mm.writeBytes(filein); 118 } catch (IOException e1) { 119 // TODO 自动生成 catch 块 120 e1.printStackTrace(); 121 } finally { 122 if (mm != null) { 123 try { 124 mm.close(); 125 } catch (IOException e2) { 126 // TODO 自动生成 catch 块 127 e2.printStackTrace(); 128 } 129 } 130 } 131 } 132 133 134 135 136 137 }
remote.java
创建GUI,其中例如
gl1=new GridLayout(3,1,0,15);
意思就是三行一列,水平距离为0,竖直距离为15.
p1.setBounds(170, 45, 60, 150);意思是以左上角作为起始坐标,横坐标为170,纵坐标为45,创建一个60x150的GUI区域.
Bt class用来监视GUI的状况,鼠标的反应反馈到Bt class用来作为处理的指令,类似switch函数,不过这个switch是面向整个GUI区域的而不是一个个字符的命令.
1 import java.awt.*; 2 import java.awt.event.*; 3 4 public class remote extends Frame { 5 6 /** 7 * @param args 8 */ 9 private static final long serialVersionUID = 22; 10 GridLayout gl0, gl1,gl2; 11 Panel p0,p1,p2; 12 Button b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b_cancel,b_ok,b_turn_on,b_turn_off,b_channel_up,b_channel_down,b_volume_up,b_volume_down, b_random; 13 StringBuffer str; 14 15 public remote() 16 { 17 gl0=new GridLayout(4,5,10,15); 18 gl1=new GridLayout(3,1,0,15); 19 gl2=new GridLayout(4,1,0,15); 20 21 b0 = new Button("0"); 22 b0.setForeground(Color.blue); 23 b0.addActionListener(new Bt()); 24 b1 = new Button("1"); 25 b1.setForeground(Color.blue); 26 b1.addActionListener(new Bt()); 27 b2 = new Button("2"); 28 b2.setForeground(Color.blue); 29 b2.addActionListener(new Bt()); 30 b3 = new Button("3"); 31 b3.setForeground(Color.blue); 32 b3.addActionListener(new Bt()); 33 b4 = new Button("4"); 34 b4.setForeground(Color.blue); 35 b4.addActionListener(new Bt()); 36 b5 = new Button("5"); 37 b5.setForeground(Color.blue); 38 b5.addActionListener(new Bt()); 39 b6 = new Button("6"); 40 b6.setForeground(Color.blue); 41 b6.addActionListener(new Bt()); 42 b7 = new Button("7"); 43 b7.setForeground(Color.blue); 44 b7.addActionListener(new Bt()); 45 b8 = new Button("8"); 46 b8.setForeground(Color.blue); 47 b8.addActionListener(new Bt()); 48 b9 = new Button("9"); 49 b9.setForeground(Color.blue); 50 b9.addActionListener(new Bt()); 51 b_cancel= new Button("C"); 52 b_cancel.setForeground(Color.blue); 53 b_cancel.addActionListener(new Bt()); 54 b_turn_on = new Button("Turn On"); 55 b_turn_on.setForeground(Color.blue); 56 b_turn_on.addActionListener(new Bt()); 57 b_turn_off= new Button("Turn Off"); 58 b_turn_off.setForeground(Color.blue); 59 b_turn_off.addActionListener(new Bt()); 60 b_volume_up = new Button("Volume +"); 61 b_volume_up.setForeground(Color.blue); 62 b_volume_up.addActionListener(new Bt()); 63 b_volume_down= new Button("Volume -"); 64 b_volume_down.setForeground(Color.blue); 65 b_volume_down.addActionListener(new Bt()); 66 b_channel_up= new Button("Channel +"); 67 b_channel_up.setForeground(Color.blue); 68 b_channel_up.addActionListener(new Bt()); 69 b_channel_down= new Button("Channel -"); 70 b_channel_down.setForeground(Color.blue); 71 b_channel_down.addActionListener(new Bt()); 72 b_ok= new Button("OK"); 73 b_ok.setForeground(Color.blue); 74 b_ok.addActionListener(new Bt()); 75 b_cancel= new Button("C"); 76 b_cancel.setForeground(Color.blue); 77 b_cancel.addActionListener(new Bt()); 78 b_random= new Button("搜索"); 79 b_random.setForeground(Color.blue); 80 b_random.addActionListener(new Bt()); 81 82 p0 = new Panel(); 83 p1 = new Panel(); 84 p2 = new Panel(); 85 86 str = new StringBuffer(); 87 88 p0.setLayout(gl0); 89 p0.add(b7); 90 p0.add(b8); 91 p0.add(b9); 92 p0.add(b4); 93 p0.add(b5); 94 p0.add(b6); 95 p0.add(b1); 96 p0.add(b2); 97 p0.add(b3); 98 p0.add(b_cancel); 99 p0.add(b0); 100 p0.add(b_ok); 101 p0.setBounds(10,45, 150, 150); 102 103 p1.setLayout(gl1); 104 p1.add(b_turn_on); 105 p1.add(b_turn_off); 106 p1.add(b_random); 107 p1.setBounds(170, 45, 60, 150); 108 109 p2.setLayout(gl2); 110 p2.add(b_channel_up); 111 p2.add(b_channel_down); 112 p2.add(b_volume_up); 113 p2.add(b_volume_down); 114 p2.setBounds(250, 45, 60, 150); 115 116 setLayout(null); 117 add(p0); 118 add(p1); 119 add(p2); 120 setResizable(false); 121 122 addWindowListener(new WindowAdapter(){ 123 public void windowClosing(WindowEvent e1) 124 { 125 System.exit(0); 126 } 127 }); 128 setBackground(Color.lightGray); 129 setBounds(100,350,320,250); 130 setVisible(true); 131 132 } 133 class Bt implements ActionListener 134 { 135 /* (non-Javadoc) 136 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) 137 */ 138 public void actionPerformed(ActionEvent e2) 139 { 140 try{ 141 if(tvbox.turn) 142 { 143 if(e2.getSource() == b_turn_on) 144 { 145 tvbox.turn = true; 146 data.creatTxtFile(); 147 data.creatTxtFile_channel(); 148 data.read_channel_test(); 149 data.read_test(); 150 tvbox.tf_channel.setText(Integer.toString(tvbox.channel_now)); 151 tvbox.tf_volume.setText(Integer.toString(tvbox.volume[tvbox.channel_now])); 152 153 } 154 else if(e2.getSource() == b_turn_off) 155 { 156 tvbox.turn = false; 157 tvbox.tf_channel.setText(" "); 158 tvbox.tf.setText(" "); 159 tvbox.tf_volume.setText(" "); 160 } 161 162 else if(e2.getSource() == b_channel_up) 163 { 164 tvbox.channel_now = Integer.parseInt(tvbox.tf_channel.getText()); 165 166 if(tvbox.channel_now == 29) 167 { 168 tvbox.channel_now = 0; 169 } 170 else 171 { 172 tvbox.channel_now += 1; 173 } 174 tvbox.tf_channel.setText(Integer.toString(tvbox.channel_now)); 175 tvbox.tf_volume.setText(Integer.toString(tvbox.volume[tvbox.channel_now])); 176 tvbox.tf.setText("--"); 177 str.setLength(0); 178 data.write_channel(); 179 } 180 else if(e2.getSource() == b_channel_down) 181 { 182 tvbox.channel_now = Integer.parseInt(tvbox.tf_channel.getText()); 183 184 if(tvbox.channel_now == 0) 185 { 186 tvbox.channel_now = 29; 187 } 188 else 189 { 190 tvbox.channel_now -= 1; 191 } 192 tvbox.tf_channel.setText(Integer.toString(tvbox.channel_now)); 193 tvbox.tf_volume.setText(Integer.toString(tvbox.volume[tvbox.channel_now])); 194 tvbox.tf.setText("--"); 195 str.setLength(0); 196 data.write_channel(); 197 198 } 199 else if(e2.getSource() == b_volume_up) 200 { 201 if(tvbox.volume[tvbox.channel_now]<100) 202 { 203 tvbox.volume[tvbox.channel_now] += 1; 204 } 205 tvbox.tf_volume.setText(Integer.toString(tvbox.volume[tvbox.channel_now])); 206 data.write(); 207 tvbox.tf.setText("--"); 208 str.setLength(0); 209 } 210 else if(e2.getSource() == b_volume_down) 211 { 212 if(tvbox.volume[tvbox.channel_now]>0) 213 { 214 tvbox.volume[tvbox.channel_now] -= 1; 215 } 216 tvbox.tf_volume.setText(Integer.toString(tvbox.volume[tvbox.channel_now])); 217 data.write(); 218 tvbox.tf.setText("--"); 219 str.setLength(0); 220 } 221 222 else if(e2.getSource() == b_random) 223 { 224 tvbox.channel_now = (int)(Math.random()*30); 225 tvbox.tf_channel.setText(Integer.toString(tvbox.channel_now)); 226 tvbox.tf_volume.setText(Integer.toString(tvbox.volume[tvbox.channel_now])); 227 tvbox.tf.setText("--"); 228 str.setLength(0); 229 data.write_channel(); 230 231 } 232 else if(e2.getSource() == b_cancel) 233 { 234 tvbox.tf.setText("--"); 235 str.setLength(0); 236 } 237 else if(e2.getSource() == b_ok) 238 { 239 tvbox.tf.setText("--"); 240 str.setLength(0); 241 if(0 <= tvbox.channel && tvbox.channel <= 29) 242 { 243 tvbox.channel_now = tvbox.channel; 244 tvbox.tf_channel.setText(Integer.toString(tvbox.channel_now)); 245 } 246 else 247 { 248 tvbox.tf.setText("error"); 249 } 250 tvbox.tf_volume.setText(Integer.toString(tvbox.volume[tvbox.channel_now])); 251 data.write_channel(); 252 } 253 254 else 255 { 256 tvbox.tf.setText(str.append(e2.getActionCommand()).toString()); 257 tvbox.channel = Integer.parseInt(tvbox.tf.getText().trim()); 258 } 259 } 260 else 261 { 262 263 264 if(e2.getSource() == b_turn_on) 265 { 266 tvbox.turn = true; 267 data.creatTxtFile(); 268 data.creatTxtFile_channel(); 269 data.read_channel_test(); 270 data.read_test(); 271 tvbox.tf_channel.setText(Integer.toString(tvbox.channel_now)); 272 tvbox.tf_volume.setText(Integer.toString(tvbox.volume[tvbox.channel_now])); 273 274 } 275 } 276 277 } 278 279 280 catch (NumberFormatException e) 281 { 282 tvbox.tf_channel.setText("数字格式异常"); 283 } 284 catch(StringIndexOutOfBoundsException e){ 285 tvbox.tf_channel.setText("字符串索引越界"); 286 } catch (Exception e) { 287 // TODO Auto-generated catch block 288 e.printStackTrace(); 289 } 290 291 } 292 293 } 294 295 296 297 298 299 } 300
tvbox.java
和remote类似,只是一些反馈的JTextField 用来显示当前的音量和频道情况。
1 import java.awt.*; 2 import java.awt.event.*; 3 import javax.swing.*; 4 public class tvbox extends Frame { 5 6 /** 7 * @param args 8 */ 9 private static final long serialVersionUID = 11; 10 GridLayout gl0, gl1,gl2; 11 Panel p0,p1,p2; 12 public static JTextField tf_channel, tf_volume; //频道和音频的显示区域,字符串返回 13 public static JTextField tf,tf_text_channel,tf_text_volume,tf_text_buffer; 14 Button b_turn_on,b_turn_off,b_channel_up,b_channel_down,b_volume_up,b_volume_down, b_random; 15 StringBuffer str; 16 static int channel,volume_now,channel_now; 17 static boolean turn; 18 public static int[] volume; 19 20 public tvbox() 21 { 22 gl0=new GridLayout(3,2,10,2); 23 gl1=new GridLayout(1,3,10,0); 24 gl2=new GridLayout(1,4,7,0); 25 26 volume = new int[30]; 27 28 tf_text_channel = new JTextField(7); 29 tf_text_channel.setEditable(false); 30 tf_text_channel.setText("频道:"); 31 tf_text_buffer = new JTextField(7); 32 tf_text_buffer.setEditable(false); 33 tf_text_buffer.setText("缓冲:"); 34 tf_text_volume = new JTextField(7); 35 tf_text_volume.setEditable(false); 36 tf_text_volume.setText("音量:"); 37 tf_channel = new JTextField(15); 38 tf_channel.setHorizontalAlignment(JTextField.RIGHT); 39 tf_channel.setEditable(false); 40 tf_channel.setText(""); 41 tf_volume = new JTextField(15); 42 tf_volume.setHorizontalAlignment(JTextField.RIGHT); 43 tf_volume.setEditable(false); 44 tf_volume.setText(""); 45 tf = new JTextField(3); 46 tf.setHorizontalAlignment(JTextField.RIGHT); 47 tf.setText("0"); 48 tf.setEnabled(false); 49 50 b_turn_on = new Button("Turn On"); 51 b_turn_on.setForeground(Color.blue); 52 b_turn_on.addActionListener(new Bt()); 53 b_turn_off= new Button("Turn Off"); 54 b_turn_off.setForeground(Color.blue); 55 b_turn_off.addActionListener(new Bt()); 56 b_volume_up = new Button("Volume +"); 57 b_volume_up.setForeground(Color.blue); 58 b_volume_up.addActionListener(new Bt()); 59 b_volume_down= new Button("Volume -"); 60 b_volume_down.setForeground(Color.blue); 61 b_volume_down.addActionListener(new Bt()); 62 b_channel_up= new Button("Channel +"); 63 b_channel_up.setForeground(Color.blue); 64 b_channel_up.addActionListener(new Bt()); 65 b_channel_down= new Button("Channel -"); 66 b_channel_down.setForeground(Color.blue); 67 b_channel_down.addActionListener(new Bt()); 68 b_random= new Button("搜索"); 69 b_random.setForeground(Color.blue); 70 b_random.addActionListener(new Bt()); 71 72 p0 = new Panel(); 73 p1 = new Panel(); 74 p2 = new Panel(); 75 76 str = new StringBuffer(); 77 78 p0.setLayout(gl0); 79 p0.add(tf_text_channel); 80 p0.add(tf_channel); 81 p0.add(tf_text_volume); 82 p0.add(tf_volume); 83 p0.add(tf_text_buffer); 84 p0.add(tf); 85 p0.setBounds(10, 25, 300, 90); 86 87 p1.setLayout(gl1); 88 p1.add(b_turn_on); 89 p1.add(b_turn_off); 90 p1.add(b_random); 91 p1.setBounds(10, 125, 300, 45); 92 93 p2.setLayout(gl2); 94 p2.add(b_channel_up); 95 p2.add(b_channel_down); 96 p2.add(b_volume_up); 97 p2.add(b_volume_down); 98 p2.setBounds(10, 180, 300, 45); 99 100 setLayout(null); 101 add(p0); 102 add(p1); 103 add(p2); 104 setResizable(false); 105 106 addWindowListener(new WindowAdapter(){ 107 public void windowClosing(WindowEvent e1) 108 { 109 System.exit(0); 110 } 111 }); 112 setBackground(Color.lightGray); 113 setBounds(100,100,320,240);//////////////////////////////// 114 setVisible(true); 115 116 } 117 118 class Bt implements ActionListener 119 { 120 /* (non-Javadoc) 121 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) 122 */ 123 public void actionPerformed(ActionEvent e2) 124 { 125 try{ 126 if(turn) 127 { 128 if(e2.getSource() == b_turn_on) 129 { 130 turn = true; 131 data.creatTxtFile(); 132 data.creatTxtFile_channel(); 133 data.read_channel_test(); 134 data.read_test(); 135 tf_channel.setText(Integer.toString(channel_now)); 136 tf_volume.setText(Integer.toString(volume[channel_now])); 137 138 } 139 else if(e2.getSource() == b_turn_off) 140 { 141 turn = false; 142 tf_channel.setText(" "); 143 tf.setText(" "); 144 tf_volume.setText(" "); 145 } 146 147 else if(e2.getSource() == b_channel_up) 148 { 149 channel_now = Integer.parseInt(tf_channel.getText()); 150 151 if(channel_now == 29) 152 { 153 channel_now = 0; 154 } 155 else 156 { 157 channel_now += 1; 158 } 159 tf_channel.setText(Integer.toString(channel_now)); 160 tf_volume.setText(Integer.toString(volume[channel_now])); 161 tf.setText("--"); 162 str.setLength(0); 163 data.write_channel(); 164 } 165 else if(e2.getSource() == b_channel_down) 166 { 167 channel_now = Integer.parseInt(tf_channel.getText()); 168 169 if(channel_now == 0) 170 { 171 channel_now = 29; 172 } 173 else 174 { 175 channel_now -= 1; 176 } 177 tf_channel.setText(Integer.toString(channel_now)); 178 tf_volume.setText(Integer.toString(volume[channel_now])); 179 tf.setText("--"); 180 str.setLength(0); 181 data.write_channel(); 182 183 } 184 else if(e2.getSource() == b_volume_up) 185 { 186 if(volume[channel_now]<100) 187 { 188 volume[channel_now] += 1; 189 } 190 tf_volume.setText(Integer.toString(volume[channel_now])); 191 data.write(); 192 tf.setText("--"); 193 str.setLength(0); 194 } 195 else if(e2.getSource() == b_volume_down) 196 { 197 if(volume[channel_now]>0) 198 { 199 volume[channel_now] -= 1; 200 } 201 tf_volume.setText(Integer.toString(volume[channel_now])); 202 data.write(); 203 tf.setText("--"); 204 str.setLength(0); 205 } 206 207 else if(e2.getSource() == b_random) 208 { 209 channel_now = (int)(Math.random()*30); 210 tf_channel.setText(Integer.toString(channel_now)); 211 tf_volume.setText(Integer.toString(volume[channel_now])); 212 tf.setText("--"); 213 str.setLength(0); 214 data.write_channel(); 215 216 } 217 218 219 220 else 221 { 222 tf.setText(str.append(e2.getActionCommand()).toString()); 223 channel = Integer.parseInt(tf.getText().trim()); 224 } 225 } 226 else 227 { 228 229 230 if(e2.getSource() == b_turn_on) 231 { 232 turn = true; 233 data.creatTxtFile(); 234 data.creatTxtFile_channel(); 235 data.read_channel_test(); 236 data.read_test(); 237 tf_channel.setText(Integer.toString(channel_now)); 238 tf_volume.setText(Integer.toString(volume[channel_now])); 239 240 } 241 } 242 243 } 244 245 246 catch (NumberFormatException e) 247 { 248 tf_channel.setText("数字格式异常"); 249 } 250 catch(StringIndexOutOfBoundsException e){ 251 tf_channel.setText("字符串索引越界"); 252 } catch (Exception e) { 253 // TODO Auto-generated catch block 254 e.printStackTrace(); 255 } 256 257 } 258 259 } 260 261 262 263 264 } 265
运行结果如上