1 import java.net.*;
2 import java.io.*;
3 import java.awt.*;
4 import java.awt.event.*;
5 import javax.swing.*;
6
7 public class TcpThread extends Thread{
8
9 //定义变量
10 public static InetAddress hostAddress;//主机IP地址
11 public static int MIN_port; //The minimal number of port
12 public static int MAX_port; //The maximal number of port
13 private int NUM_thread; //线程总数
14 public static int type; //查询方式,0为IP方式1为主机名查询方式
15
16 public static int ip1;//IP前三位
17 public static int ip2;//IP4~6位
18 public static int ip3;//IP7~9位
19 public static int ipstart;//起始IP地址最后四位
20 public static int ipend;//结束IP地址最后四位
21 public static String ipAll;//完整的IP地址
22
23 String nameHost = "";//扫描的主机名称或IP地址
24 String typeport = "0";//端口类别
25
26 /**
27 * 构造函数
28 */
29 public TcpThread( String name, int numthread ){
30 super(name);
31 this.NUM_thread = numthread;
32 }
33
34 /**
35 * run()运行函数
36 */
37 public void run( ) {
38
39 int h = 0;//IP address
40 int i = 0;//port number
41
42 Socket theTcpSocket;
43
44 //根据IP地址进行扫描
45 if( 0 == type ){
46 //IP地址循环扫描
47 for( h = ipstart; h <= ipend; h++){
48 ipAll = "" + ip1 + "." + ip2 + "." + ip3 + "." + h;
49 nameHost = ipAll;
50
51 try{
52 hostAddress = InetAddress.getByName( ipAll );
53 }catch( UnknownHostException e){}
54
55 //不同端口循环扫描
56 for( i = MIN_port; i < MAX_port + Integer.parseInt( ThreadScan.maxThread.getText() );
57 i += Integer.parseInt(ThreadScan.maxThread.getText() ) ){
58 try{
59 theTcpSocket = new Socket(hostAddress, i);
60 theTcpSocket.close();
61
62 ThreadScan.Result.append( nameHost +":"+i);
63
64 switch( i ){//其实这儿可以不用switch,直接用个hash表记录就可以
65 case 21:
66 typeport = "(FTP)";
67 break;
68 case 23:
69 typeport = "(TELNET)";
70 break;
71 case 25:
72 typeport = "SMTP";
73 break;
74 case 80:
75 typeport = "HTTP";
76 break;
77 case 110:
78 typeport = "POP";
79 break;
80 case 139:
81 typeport = "netBIOS";
82 break;
83 case 1433:
84 typeport = "SQL Server";
85 break;
86 case 3389:
87 typeport = "Terminal Service";
88 break;
89 case 443:
90 typeport = "HTTPS";
91 break;
92 case 1521:
93 typeport = "Oracle";
94 break;
95 }
96
97 //端口没有特定类型
98 if( typeport.equals("0")){
99 ThreadScan.Result.append("\n");
100 }else{
101 ThreadScan.Result.append(":" + typeport + "\n");
102 }
103 }catch( IOException e){}
104 }
105 }
106 if( i == MAX_port + Integer.parseInt(ThreadScan.maxThread.getText())){
107 ThreadScan.Result.append("\n" + "扫描完成...");
108 //请"确定"按钮设置为可用
109 if( !ThreadScan.Submit.setEnable( true ) );
110 }
111 }
112
113 //按主机名进行端口扫描
114 if( 1 == type ){
115 for( i = MIN_port + NUM_thread; i < MAX_port + Integer.parseInt(ThreadScan.maxThread.getText());
116 i += Integer.parseInt( ThreadScan.maxThread.getText( ) ) ) {
117 try{
118 theTcpSocket = new Socket( hostAddress, i );
119 theTcpSocket.close();
120 ThreadScan.Result.append(" " + i);
121 switch( i ){//其实这儿可以不用switch,直接用个hash表记录就可以
122 case 21:
123 typeport = "(FTP)";
124 break;
125 case 23:
126 typeport = "(TELNET)";
127 break;
128 case 25:
129 typeport = "SMTP";
130 break;
131 case 80:
132 typeport = "HTTP";
133 break;
134 case 110:
135 typeport = "POP";
136 break;
137 case 139:
138 typeport = "netBIOS";
139 break;
140 case 1433:
141 typeport = "SQL Server";
142 break;
143 case 3389:
144 typeport = "Terminal Service";
145 break;
146 case 443:
147 typeport = "HTTPS";
148 break;
149 case 1521:
150 typeport = "Oracle";
151 break;
152 }
153 if( typeport.equals("0") ){
154 ThreadScan.Result.append("\n");
155 }else{
156 ThreadScan.Result.append(":" + typeport + "\n");
157 }
158 }catch( IOException e){
159
160 }
161 }
162 if( i == MAX_port + Integer.parseInt(ThreadScan.maxThread.getText())){
163 ThreadScan.Result.append("\n" + "扫描完成...");
164 if( !ThreadScan.Submit.isEnable()){
165 ThreadScan.Submit.setEnabled( true );
166 }
167 }
168 }//End of if
169 }
170 }
1 import java.net.*;
2 import java.io.*;
3 import java.awt.*;
4 import java.awt.event.*;
5 import javax.swing.*;
6 /**
7 * 实现扫描的主体程序,TreadScan
8 * @author Administrator
9 *
10 */
11
12 public class ThreadScan {
13
14 public static JFrame main = new JFrame("Scaner(V1.0)By Nevermore"); //注册框架类
15 public static JTextArea Result = new JTextArea("", 4, 40); //显示扫描结果
16 public static JScrollPane resultPane = new
17 JScrollPane( Result, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
18 JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
19
20
21 public static JTextField nameHost = new JTextField("localhost", 8 );//输入主机名文本框
22 public static JTextField fromip1 = new JTextField("0", 3); //输入IP地址前三位的文本框
23 public static JTextField fromip2 = new JTextField("0", 3); //输入IP地址4~6位的文本框
24 public static JTextField fromip3 = new JTextField("0", 3); //输入IP地址7~9位的文本框
25 public static JTextField fromip4 = new JTextField("0", 3); //输入IP地址后三位的文本框
26
27 public static JTextField toip = new JTextField("0", 3); //输入目标IP地址后四位
28
29 public static JTextField minPort = new JTextField("0", 4); //最小端口输入框
30 public static JTextField maxPort = new JTextField("1000", 4); //最大端口输入框
31
32 public static JTextField maxThread = new JTextField("100", 3); //最大线程数
33 public static JDialog DLGError = new JDialog(main, "错误!"); //错误提示框
34 public static JLabel DLGINFO = new JLabel("");
35 public static JLabel type = new JLabel("请选择:");
36 //扫描类型
37 public static JRadioButton radioIP = new JRadioButton("IP地址:");
38 public static JRadioButton radioHost = new JRadioButton("主机名:", true);
39 //单选按钮组
40 public static ButtonGroup group= new ButtonGroup();
41 public static JLabel p1 = new JLabel("端口范围:");
42 public static JLabel p2 = new JLabel("~");
43 public static JLabel p3 = new JLabel("~");
44 public static JLabel Pdot1 = new JLabel(".");
45 public static JLabel Pdot2 = new JLabel(".");
46 public static JLabel Pdot3 = new JLabel(".");
47 public static JLabel TNUM = new JLabel("线程数:");
48 public static JLabel RST = new JLabel("扫描结果:");
49 public static JLabel con = new JLabel("");
50 //定义按钮
51 public static JButton Ok = new JButton("确定");
52 public static JButton Submit = new JButton("开始扫描");
53 public static JButton Cancel = new JButton("退出");
54 public static JButton saveButton = new JButton("保存扫描结果");
55 //菜单栏设计:这一块好好学习学习
56 public static JMenuBar myBar = new JMenuBar();
57 public static JMenu myMenu = new JMenu("文件(F)");
58 public static JMenuItem saveItem = new JMenuItem("保存扫描结果(S)");
59 public static JMenuItem exitItem = new JMenuItem("退出(Q)");
60 public static JMenu myMenu2 = new JMenu("帮助");
61 public static JMenuItem helpItem = new JMenuItem("阅读");
62
63 /**
64 * 主方法
65 */
66 public static void main( String[] argcs ){
67 main.setSize(500, 400);
68 main.setLocation(400, 400);
69 main.setResizable(false);
70 main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
71
72 DLGError.setSize(300, 100);
73 DLGError.setLocation(400, 400);
74 //添加"菜单栏"
75 myMenu.add(saveItem);
76 myMenu.add(exitItem);
77
78 myMenu2.add(helpItem);
79
80 myBar.add(myMenu);//将菜单条目添加到菜单
81 myBar.add(myMenu2);
82
83 main.setJMenuBar(myBar);//将菜单添加到框架
84 //设置热键
85 myMenu.setMnemonic('F');
86 saveItem.setMnemonic('S');
87 //为"另存为"组建设置快捷键CTRL + S
88 saveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK));
89 //采用表格包模式布局
90 Container mPanel = main.getContentPane();
91 GridBagConstraints c = new GridBagConstraints();
92 c.insets = new Insets(10, 0, 0, 10);
93
94 c.gridx = 0;// 设置表格坐标
95 c.gridy = 0;
96 c.gridwidth = 10;
97 c.fill = GridBagConstraints.BOTH;
98 c.anchor = GridBagConstraints.CENTER;
99 mPanel.add(type, c);
100
101 group.add(radioIP);
102 group.add(radioHost);
103
104 c.gridx = 0;
105 c.gridy = 1;
106 c.gridwidth = 1;
107 c.fill = GridBagConstraints.BOTH;
108 c.anchor = GridBagConstraints.CENTER;
109 mPanel.add(radioIP, c);
110
111 c.gridx = 1;
112 c.gridy = 1;
113 c.gridwidth = 1;
114 c.fill = GridBagConstraints.CENTER;
115 mPanel.add(fromip1, c);
116
117 c.gridx = 2;
118 c.gridy = 1;
119 c.gridwidth = 1;
120 c.fill = GridBagConstraints.BOTH;
121 mPanel.add(Pdot1, c);
122
123 c.gridx = 3;
124 c.gridy = 1;
125 c.gridwidth = 1;
126 c.fill = GridBagConstraints.BOTH;
127 c.anchor = GridBagConstraints.CENTER;
128 mPanel.add(fromip2, c);
129
130 c.gridx = 4;
131 c.gridy = 1;
132 c.gridwidth = 1;
133 c.fill = GridBagConstraints.BOTH;
134 c.anchor = GridBagConstraints.CENTER;
135 mPanel.add(Pdot2, c);
136
137 c.gridx = 5;
138 c.gridy = 1;
139 c.gridwidth = 1;
140 c.fill = GridBagConstraints.BOTH;
141 c.anchor = GridBagConstraints.CENTER;
142 mPanel.add(fromip3, c);
143
144 c.gridy = 1;
145 c.gridx = 6;
146 c.gridwidth = 1;
147 c.fill = GridBagConstraints.BOTH;
148 c.anchor = GridBagConstraints.CENTER;
149 mPanel.add(Pdot3, c);
150
151
152 c.gridx = 7;
153 c.gridy = 1;
154 c.gridwidth = 1;
155 c.fill = GridBagConstraints.BOTH;
156 c.anchor = GridBagConstraints.CENTER;
157 mPanel.add(fromip4, c);
158
159 c.gridx = 8;
160 c.gridy = 1;
161 c.gridwidth = 1;
162 c.fill = GridBagConstraints.BOTH;
163 c.anchor = GridBagConstraints.CENTER;
164 mPanel.add(p2, c);
165
166 c.gridx = 9;
167 c.gridy = 1;
168 c.gridwidth = 1;
169 c.fill = GridBagConstraints.BOTH;
170 c.anchor = GridBagConstraints.CENTER;
171 mPanel.add(toip, c);
172
173 c.gridx = 0;
174 c.gridy = 2;
175 c.gridwidth = 1;
176 c.fill = GridBagConstraints.BOTH;
177 c.anchor = GridBagConstraints.CENTER;
178 mPanel.add(radioHost, c);
179
180 c.gridx = 1;
181 c.gridy = 2;
182 c.gridwidth = 3;
183 c.fill = GridBagConstraints.BOTH;
184 c.anchor = GridBagConstraints.CENTER;
185 mPanel.add(nameHost, c);
186
187 c.gridx = 0;
188 c.gridy = 3;
189 c.gridwidth = 1;
190 c.fill = GridBagConstraints.BOTH;
191 c.anchor = GridBagConstraints.CENTER;
192 mPanel.add(p1, c);
193
194 c.gridx = 1;
195 c.gridy = 3;
196 c.gridwidth = 1;
197 c.fill = GridBagConstraints.BOTH;
198 c.anchor = GridBagConstraints.CENTER;
199 mPanel.add(minPort, c);
200
201 c.gridx = 2;
202 c.gridy = 3;
203 c.gridwidth = 1;
204 c.fill = GridBagConstraints.BOTH;
205 c.anchor = GridBagConstraints.CENTER;
206 mPanel.add(p3, c);
207
208 c.gridx = 3;
209 c.gridy = 3;
210 c.gridwidth = 1;
211 c.fill = GridBagConstraints.BOTH;
212 c.anchor = GridBagConstraints.CENTER;
213 mPanel.add(maxPort, c);
214
215 c.gridx = 0;
216 c.gridy = 4;
217 c.gridwidth = 1;
218 c.fill = GridBagConstraints.BOTH;
219 c.anchor = GridBagConstraints.CENTER;
220 mPanel.add(TNUM, c);
221
222 c.gridx = 1;
223 c.gridy = 4;
224 c.gridwidth = 3;
225 c.fill = GridBagConstraints.BOTH;
226 c.anchor = GridBagConstraints.CENTER;
227 mPanel.add(maxThread, c);
228
229 c.gridx = 0;
230 c.gridy = 5;
231 c.gridwidth = 3;
232 c.fill = GridBagConstraints.BOTH;
233 c.anchor = GridBagConstraints.CENTER;
234 mPanel.add(Submit, c);
235
236
237 c.gridx = 3;
238 c.gridy = 5;
239 c.gridwidth = 3;
240 c.fill = GridBagConstraints.BOTH;
241 c.anchor = GridBagConstraints.CENTER;
242 mPanel.add(saveButton, c);
243
244 c.gridx = 6;
245 c.gridy = 5;
246 c.gridwidth =4;
247 c.fill = GridBagConstraints.BOTH;
248 c.anchor = GridBagConstraints.CENTER;
249 mPanel.add(Cancel, c);
250
251 c.gridx = 0;
252 c.gridy = 6;
253 c.gridwidth = 10;
254 c.fill = GridBagConstraints.BOTH;
255 c.anchor = GridBagConstraints.CENTER;
256 mPanel.add(RST, c);
257
258 //设置文本域可以换行
259 Result.setLineWrap(true);
260 //设置文本域不可编辑
261 Result.setEditable(false);
262
263
264 c.gridx = 0;
265 c.gridy = 7;
266 c.gridwidth = 10;
267 c.gridheight = 4;
268 c.fill = GridBagConstraints.VERTICAL;
269 c.anchor = GridBagConstraints.CENTER;
270 mPanel.add(resultPane, c);
271
272 Container dPanel = DLGError.getContentPane();
273 dPanel.setLayout(new FlowLayout(FlowLayout.CENTER));
274 dPanel.add(DLGINFO);
275 dPanel.add(Ok);
276
277
278 Submit.addActionListener(new SubmitAction());
279 Cancel.addActionListener(new CancelAction());
280 Ok.addActionListener(new OkAction());
281
282 //实现保存功能
283 saveItem.addActionListener(new java.awt.event.ActionListener(){
284 public void actionPerformed(java.awt.event.ActionEvent e){
285 JFileChooser fc = new JFileChooser();
286 int returnVal = fc.showSaveDialog(null);
287 //单击保存按钮
288 if( 0 == returnVal ){
289 File saveFile = fc.getSelectedFile();
290 try{
291 FileWriter writeOut = new FileWriter( saveFile );
292 writeOut.write(ThreadScan.Result.getText());
293 writeOut.close();
294
295 }catch( IOException ex ){ System.out.println("保存失败");}
296 }
297 }
298 });
299 //实现退出功能
300 ActionListener li = new java.awt.event.ActionListener(){
301 public void actionPerformed(java.awt.event.ActionEvent e){
302 System.exit(0);
303 }
304 };
305 exitItem.addActionListener(li);
306 //实现帮助功能
307
308 ActionListener lil = new java.awt.event.ActionListener(){
309 public void actionPerformed(java.awt.event.ActionEvent e){
310 new AboutDialog();//
311 }
312 };
313 helpItem.addActionListener(lil);
314
315 ActionListener lill = new java.awt.event.ActionListener(){
316 public void actionPerformed(java.awt.event.ActionEvent e){
317 JFileChooser fc = new JFileChooser();
318 int returnVal = fc.showSaveDialog(null);
319 //单击保存按钮
320 if( 0 == returnVal ){
321 File saveFile = fc.getSelectedFile();
322 try{
323 FileWriter writeOut = new FileWriter(saveFile);
324 writeOut.write(ThreadScan.Result.getText());
325 writeOut.close();
326 }catch(IOException ex ){ System.out.println("保存失败");}
327 }else{
328 return;//单击取消
329 }
330
331 }
332 };
333 saveButton.addActionListener(lill);
334 main.setVisible(true);
335 }
336 }
337 /**
338 *
339 * @author Nevermore
340 * 实现取消功能
341 */
342 class CancelAction implements ActionListener{
343 public void actionPerformed( ActionEvent e){
344 System.exit(0);
345 }
346 }
347 /**
348 *
349 * @author Nevermore
350 * 实现确定按钮
351 */
352 class SubmitAction implements ActionListener{
353 public void actionPerformed( ActionEvent a){
354 int minPort;
355 int maxPort;
356 int maxThread;
357
358 int ip1 = 0;
359 int ip2 = 0;
360 int ip3 = 0;
361 int ipstart = 0;
362 int ipend = 0;
363
364 String ipaddress = "";
365 String nameHost = "";
366 ThreadScan.Result.setText("");
367 if( ThreadScan.Submit.isEnabled()){
368 ThreadScan.Submit.setEnabled(false);
369 }
370 /**
371 * 判断扫描类型
372 * 根据IP地址扫描 type = 0
373 *根据主机名称扫描type = 1
374 */
375 if( ThreadScan.radioIP.isSelected()){
376 TcpThread.type = 0;
377 //判断IP地址的前三位是否是int型
378 try{
379 ip1 = Integer.parseInt(ThreadScan.fromip1.getText());
380 }catch( NumberFormatException e ){
381 ThreadScan.DLGINFO.setText("错误的IP地址");
382 ThreadScan.DLGError.setVisible(true);
383 return;
384 }
385 try{
386 ip2 = Integer.parseInt(ThreadScan.fromip2.getText());
387 }catch( NumberFormatException e ){
388 ThreadScan.DLGINFO.setText("错误的IP地址");
389 ThreadScan.DLGError.setVisible(true);
390 return;
391 }
392 try{
393 ip3 = Integer.parseInt(ThreadScan.fromip3.getText());
394 }catch( NumberFormatException e ){
395 ThreadScan.DLGINFO.setText("错误的IP地址");
396 ThreadScan.DLGError.setVisible(true);
397 return;
398 }
399 try{
400 ipstart = Integer.parseInt(ThreadScan.fromip4.getText());
401 }catch( NumberFormatException e ){
402 ThreadScan.DLGINFO.setText("错误的IP地址");
403 ThreadScan.DLGError.setVisible(true);
404 return;
405 }
406 try{
407 ipend = Integer.parseInt(ThreadScan.toip.getText());
408 }catch( NumberFormatException e ){
409 ThreadScan.DLGINFO.setText("错误的IP地址");
410 ThreadScan.DLGError.setVisible(true);
411 return;
412 }
413
414 //判断是否是合理的IP地址
415 if(ip1 < 0 || ip1 > 255 || ip2 < 0 || ip2 > 255 ||
416 ip3 < 0 || ip3 > 255 || ipstart < 0 || ipstart > 255 ){
417 ThreadScan.DLGINFO.setText("IP地址为0~255的整数");
418 ThreadScan.DLGError.setVisible(true);
419 return ;
420 }else{
421 TcpThread.ip1 = ip1;
422 TcpThread.ip2 = ip2;
423 TcpThread.ip3 = ip3;
424 TcpThread.ipstart = ipstart;
425 }
426 //判断目标IP地是否合理
427 if( ipend < 0 || ipend > 255 ){
428 ThreadScan.DLGINFO.setText("目标IP地址的范围是0~255");
429 ThreadScan.DLGError.setVisible(true);
430 return;
431 }else{
432 TcpThread.ipend = ipend;
433 }
434
435 ipaddress = "" + ip1 + ip2 + ip3 + ipstart;
436
437 /**
438 * 判断IP地址的有效性
439 */
440 try{
441 TcpThread.hostAddress = InetAddress.getByName(ipaddress);
442 }catch( UnknownHostException e){
443 ThreadScan.DLGINFO.setText("错误的IP或IP地址不可到达!");
444 ThreadScan.DLGError.setVisible(true);
445 return;
446 }
447
448 if( ThreadScan.radioHost.isSelected()){
449 TcpThread.type = 1;
450 /**
451 * 判断主机名的有效性
452 */
453 try{
454 TcpThread.hostAddress = InetAddress.getByName(ThreadScan.nameHost.getText());
455 }catch( UnknownHostException e){
456 ThreadScan.DLGINFO.setText("错误的域名或地址不可到达!");
457 ThreadScan.DLGError.setVisible(true);
458 return;
459 }
460 }
461 /**
462 * 判断端口号的有效性
463 */
464 try{
465 minPort = Integer.parseInt(ThreadScan.minPort.getText());
466 maxPort = Integer.parseInt(ThreadScan.maxPort.getText());
467 maxThread = Integer.parseInt(ThreadScan.maxThread.getText());
468 }catch( NumberFormatException e ){
469 ThreadScan.DLGINFO.setText("错误的端口号或端口号和线程数必须为整数");
470 ThreadScan.DLGError.setVisible(true);
471 return;
472 }
473 /**
474 * 判断最小端口号的有效范围
475 * 判断条件大于0小于65535最大端口号大于最小端口号
476 */
477 if( minPort < 0 || minPort > 65535 || minPort > maxPort ){
478 ThreadScan.DLGINFO.setText("端口号范围:0~65535,并且最大端口号应大于最小端口号!");
479 ThreadScan.DLGError.setVisible(true);
480 return;
481 }else{
482 TcpThread.MIN_port = minPort;
483 }
484 /**
485 * 判断最大端口号的有效范围
486 */
487 if( maxPort < 0 || maxPort > 65535 || maxPort < minPort ){
488 ThreadScan.DLGINFO.setText("端口号范围:0~65535,并且最大端口号应大于最小端口号!");
489 ThreadScan.DLGError.setVisible(true);
490 return;
491 }else{
492 TcpThread.MAX_port = maxPort;
493 }
494 /**
495 * 判断线程数的有效范围
496 * 判断条件 大于1且小于200
497 */
498 if( maxThread < 1 || maxThread > 200 ){
499 ThreadScan.DLGINFO.setText("线程数的有效范围是1~200");
500 ThreadScan.DLGError.setVisible(true);
501 return;
502 }
503 ThreadScan.Result.append("线程数" + ThreadScan.maxThread.getText() + "\n");
504
505 /**
506 * 启动线程
507 */
508 for( int i = 0; i < maxThread; i++ ){
509 new TcpThread("T" + i, i).start();
510 }
511 }
512 }
513 }
514 /**
515 *
516 * @author Administrator
517 * 错误对话框
518 */
519 class OkAction implements ActionListener{
520 public void actionPerformed( ActionEvent e){
521 ThreadScan.DLGError.dispose();
522 }
523 }
import javax.swing.*;
import java.awt.*;
public class AboutDialog extends JDialog{
JPanel JMainPane = new JPanel();
JTabbedPane jTabbedPane = new JTabbedPane();
private JPanel JPanel1 = new JPanel();
private JPanel JPanel2 = new JPanel();
private JTextArea jt1 = new JTextArea(6, 6);
private JTextArea jt2 = new JTextArea(6, 6);
/**
* 构造函数
*/
public AboutDialog(){
setTitle("Scaner");
setSize(300,200);
setResizable(false);
setDefaultCloseOperation( WindowConstants.DISPOSE_ON_CLOSE);
Container c = this.getContentPane();
jt1.setSize(260,200);
jt2.setSize(260,200);
jt1.setEditable(false);
jt2.setEditable(false);
jt1.setLineWrap(true);
jt2.setLineWrap(true);
jt1.setText("");
jt1.setFont(new Font("楷体_GB2312", java.awt.Font.BOLD, 13));
jt2.setText("");
jt2.setFont(new Font("楷体_GB2312", java.awt.Font.BOLD, 13));
jt1.setForeground(Color.black);
jt2.setForeground(Color.black);
JPanel1.add(jt1);
JPanel2.add(jt2);
jTabbedPane.setSize(300,200);
jTabbedPane.addTab("扫描原理", null, JPanel1, null);
jTabbedPane.addTab("使用说明", null, JPanel2, null);
JMainPane.add(jTabbedPane);
c.add(JMainPane);
pack();
this.setVisible(true);
}
}