您的位置:首页 > 博客中心 > 电脑问题 >

Swing的基本操作

时间:2022-03-18 14:51

  1 package GUI_experience;
  2 import java.awt.*;
  3 import java.awt.Container;
  4 import java.awt.FlowLayout;
  5 import java.awt.event.ActionEvent;
  6 import java.awt.event.ActionListener;
  7 import javax.imageio.stream.ImageInputStream;
  8 import javax.swing.*;
  9 import java.awt.event.FocusEvent;
 10 import java.awt.event.FocusListener;
 11 import java.net.*;
 12 /**class myFrame extends Frame{
 13     myFrame(String s){
 14         super(s);
 15         this.setBackground(Color.blue);
 16         this.setSize(300,200);
 17         this.setVisible(true);
 18     }
 19     public static void main(String []args){
 20         myFrame mfr=new myFrame("First GUI project");
 21     }
 22 }*/
 23 
 24 /**class MyFrame extends Frame{
 25     static int id=0;
 26     MyFrame(int x,int y,int w,int h,Color myColor){
 27         super("MyFrame first project "+(++id));
 28         this.setBackground(myColor);
 29         this.setBounds(x,y,w,h);
 30         this.setLayout(null);
 31         this.setVisible(true);
 32     }
 33     public static void main(String[]args){
 34         MyFrame mf=new MyFrame(200,300,200,200,Color.gray);
 35     }
 36 }*/
 37 
 38 /**
 39  * 窗体示例JFrame
 40  * 通常继承自JFrame类来使用而不是在类的main函数中创建一个JFrame对象
 41  *
 42  */
 43 class Demo2 extends JFrame{
 44     Demo2(){
 45 
 46         setVisible(true);//Visible
 47 
 48         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭按键,直接关闭
 49         //setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);//关闭按键等于没用
 50         //setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);//关闭但是不停止程序
 51         //setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//释放程序资源
 52         setBounds(300,500,300,200);//Location and Size
 53         //setSize(300,200);
 54         //setLocation(300,500);
 55         setTitle("This is a Frame.");
 56 
 57         Container c = getContentPane();//获取窗体容器
 58         c.setBackground(Color.white);
 59         JLabel jl=new JLabel("Right here is a frame.");
 60         c.add(jl);
 61 //      c.remove(jl);
 62         c.validate();//验证容器中的组件,等于刷新一下
 63 //      f.setContentPane(c);//重新载入容器,与上式等效,但是上式更好
 64         setResizable(false);
 65         System.out.println(getX());
 66         System.out.println(getY());
 67     }
 68 
 69     public static void main(String[] args) {
 70         new Demo2();
 71 
 72     }
 73 }
 74 
 75 /**
 76  * JDialog对话框示例
 77  *
 78  */
 79 class Demo3 extends JDialog{
 80     Demo3(JFrame frame){//在对话框的参数列表中就要包含父窗体
 81         super(frame,"Title of DIALOG",true);//父窗体对象,对话框标题,是否阻塞父窗体
 82         Container c=getContentPane();
 83         JLabel jl=new JLabel("这是一个标签");
 84         jl.setForeground(Color.RED);//设置字体颜色为红色
 85         //jl.setText("");更改标签内容
 86         //jl.getText();获取标签内容
 87         jl.setFont(new Font("宋体",Font.BOLD,15));//设置字体
 88         c.add(jl);//添加一段标签
 89 
 90         JLabel pic=new JLabel("这是一个展示图片的标签");
 91 //        URL url=Demo3.class.getResource("pycharm_inter.png");//获取图片URL路径,要求图片和此文件在同一包内
 92 //        Icon icon = new ImageIcon(url);
 93         Icon icon = new ImageIcon("src/GUI_experience/pycharm_inter.png");//直接写出图片相应路径也能得到图片
 94 //        jl.setSize(20,20);//设置标签大小并不能改变图片大小
 95         pic.setIcon(icon);//添加图片
 96         c.add(pic);
 97         setBounds(100,100,500,400);
 98 
 99     }
100 
101     public static void main(String[] args) {
102         JFrame f =new JFrame("Father Frame");
103         f.setBounds(50,50,300,300);
104         Container c=f.getContentPane();
105         JButton btn =new JButton("Push out a DIALOG");
106         c.setLayout(new FlowLayout());
107         c.add(btn);
108         f.setVisible(true);
109         f.setDefaultCloseOperation(EXIT_ON_CLOSE);
110         /**
111          * 重要部分:给按钮添加监听(使按钮生效)
112          *
113          */
114         btn.addActionListener(new ActionListener() {
115             public void actionPerformed(ActionEvent actionEvent) {
116                 Demo3 d =new Demo3(f);
117                 d.setVisible(true);//对话框最好在main中设置窗体可见
118             }
119         });
120     }
121 
122 }
123 
124 class Exp_absoluteLayout extends JFrame{
125     Exp_absoluteLayout(){
126         setBounds(300,300,200,150);
127         setDefaultCloseOperation(EXIT_ON_CLOSE);
128         Container c = getContentPane();
129 
130         c.setLayout(null);//布局参数设置为null即为绝对布局,此时组件大小和位置只由设定的坐标决定(与窗体大小无关)
131         JButton jb1 = new JButton("Button_1"), jb2 = new JButton("Button_2");
132         jb1.setBounds(10,30,120 ,30);
133         jb2.setBounds(60,70,100,20);
134         c.add(jb1);
135         c.add(jb2);
136 
137         setVisible(true);
138 
139 
140     }
141     public static void main(String[] args) {
142         new Exp_absoluteLayout();
143     }
144 }
145 
146 class Exp_FlowLayout extends JFrame{
147     Exp_FlowLayout(){
148         setVisible(true);
149         setDefaultCloseOperation(EXIT_ON_CLOSE);
150         setBounds(300,300,200,150);
151 
152         Container c = getContentPane();
153         for(int i=0;i<10;i++){
154             c.add(new JButton("Button_"+i));
155         }
156 //        setLayout(new FlowLayout());//默认居中对齐
157         setLayout(new FlowLayout(FlowLayout.RIGHT,20,20));//设置为右对齐,水平间距20,竖直间距20
158     }
159 
160     public static void main(String[] args) {
161         new Exp_FlowLayout();
162     }
163 }
164 
165 class Exp_BorderLayout extends JFrame{
166     Exp_BorderLayout(){
167         setBounds(100,100,350,200);
168         setDefaultCloseOperation(EXIT_ON_CLOSE);
169 
170 
171         Container c = getContentPane();
172         c.setLayout(new BorderLayout());
173         JButton jb1=new JButton("中"),
174                 jb2=new JButton("东"),
175                 jb3=new JButton("西"),
176                 jb4=new JButton("南"),
177                 jb5=new JButton("北");
178         c.add(jb1,BorderLayout.CENTER);
179         c.add(jb2,BorderLayout.EAST);
180         c.add(jb3,BorderLayout.WEST);
181         c.add(jb4,BorderLayout.SOUTH);
182         c.add(jb5,BorderLayout.NORTH);
183         c.setVisible(true);
184         setVisible(true);//tip:只有将设置可见性放在最后才能保证所有组件都可见
185     }
186 
187     public static void main(String[] args) {
188         new Exp_BorderLayout();
189     }
190 }
191 
192 class Exp_GridLayout extends JFrame{
193     Exp_GridLayout(){
194         setBounds(100,100,300,300);
195         setDefaultCloseOperation(EXIT_ON_CLOSE);
196 
197         Container c = getContentPane();
198 //        c.setLayout(new GridLayout(7,3,5,5));//网格布局,7行3列,水平间距5,竖直间距5
199         c.setLayout(new GridLayout(6,4));//紧密无缝隙排列
200         for(int i=0;i<23;i++){//如果组件数量超过网格布局,每当不足时则多出一列
201             c.add(new JButton("Button_"+i));
202         }
203         setVisible(true);
204     }
205 
206     public static void main(String[] args) {
207         new Exp_GridLayout();
208     }
209 }
210 
211 class Exp_GridBagFLayout {
212     JFrame f = new JFrame();
213     Container c= f.getContentPane();
214 
215     void createFrame(){
216         f.setSize(800,600);
217         f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
218         c.setLayout(new GridBagLayout());
219         f.setLocationRelativeTo(null);
220     }
221     void init(){
222         GridBagConstraints g1 = new GridBagConstraints();
223         c.add(new JButton("Btn1"),g1);
224 
225         GridBagConstraints g2 = new GridBagConstraints();
226         g2.gridx=1;
227         g2.gridy=1;
228         c.add(new JButton("Btn2"),g2);
229 
230         GridBagConstraints g3 = new GridBagConstraints();
231         g3.gridx=2;
232         g3.gridy=2;
233         c.add(new JButton("Btn3"),g3);
234     }
235     void createButton(){
236         for(int i=0;i<9;i++){
237             GridBagConstraints g1 = new GridBagConstraints();
238             g1.gridx=0;
239             g1.gridy=i;//标定位置(左上角)
240             c.add(new JButton("Btn"),g1);
241 
242             GridBagConstraints g2 = new GridBagConstraints();
243             g2.gridx=i;
244             g2.gridy=0;
245             c.add(new JButton("Btn"),g2);
246         }
247     }
248 
249     void init2(){
250         GridBagConstraints g1 = new GridBagConstraints();
251         g1.gridx=1;
252         g1.gridy=1;
253         c.add(new JButton("Btn1"),g1);
254 
255         GridBagConstraints g2 = new GridBagConstraints();
256         g2.gridx=2;
257         g2.gridy=2;
258         g2.gridwidth=2;
259         g2.gridheight=1;//占据位置:两行一列
260         c.add(new JButton("Btn2"),g2);
261 
262         GridBagConstraints g3 = new GridBagConstraints();
263         g3.gridx=4;
264         g3.gridy=4;
265         g3.gridwidth=2;
266         g3.gridwidth=2;
267         c.add(new JButton("Btn3"),g3);
268     }
269     void init3(){
270         GridBagConstraints g1 = new GridBagConstraints();
271         g1.gridx=1;
272         g1.gridy=1;
273         g1.gridwidth=2;
274         g1.gridheight=2;
275         g1.fill=GridBagConstraints.NONE;
276         c.add(new JButton("NONE"),g1);
277 
278         GridBagConstraints g2 = new GridBagConstraints();
279         g2.gridx=3;
280         g2.gridy=1;
281         g2.gridheight=2;
282         g2.gridwidth=2;
283         g2.fill=GridBagConstraints.HORIZONTAL;//填充方式:水平填充
284         c.add(new JButton("HORIZONTAL"),g2);
285 
286         GridBagConstraints g3 = new GridBagConstraints();
287         g3.gridx=5;
288         g3.gridy=1;
289         g3.gridwidth=2;
290         g3.gridheight=2;
291         g3.fill=GridBagConstraints.VERTICAL;//填充方式:竖直填充
292         c.add(new JButton("VERTICAL"),g3);
293 
294         GridBagConstraints g4 = new GridBagConstraints();
295         g4.gridx=7;
296         g4.gridy=1;
297         g4.gridwidth=2;
298         g4.gridheight=2;
299         g4.fill=GridBagConstraints.BOTH;//填充方式:完全填充
300         c.add(new JButton("BOTH"),g4);
301     }
302     void init4(){
303         GridBagConstraints g1 = new GridBagConstraints();
304         g1.gridx=1;
305         g1.gridy=1;
306         g1.gridwidth=2;
307         g1.gridheight=2;
308         g1.fill=GridBagConstraints.NONE;
309         g1.anchor=GridBagConstraints.NORTHWEST;//占据方位:所占据区域的左上角(西北角)
310         c.add(new JButton("."),g1);
311     }
312     void init5(){
313         GridBagConstraints g1 = new GridBagConstraints();
314         g1.gridx=1;
315         g1.gridy=1;
316         g1.gridwidth=2;
317         g1.gridheight=2;
318         g1.insets = new Insets(0,0,10,10);//偏移像素值
319         c.add(new JButton("."),g1);
320     }
321     void init6(){
322         GridBagConstraints g1 = new GridBagConstraints();
323         g1.gridx=1;
324         g1.gridy=1;
325         g1.gridwidth=2;
326         g1.gridheight=2;
327         g1.ipadx=10;
328         g1.ipady=10;//首选位置
329         c.add(new JButton("NONE"),g1);
330     }
331     void init7(){
332         GridBagConstraints g1 = new GridBagConstraints();
333         g1.gridx=1;
334         g1.gridy=1;
335         g1.gridwidth=2;
336         g1.gridheight=2;
337         g1.weightx=10;
338         g1.weighty=10;//当窗体大小足够大时占据的空间(如果不够大则迁就窗体进行回缩
339         c.add(new JButton("NONE"),g1);
340     }
341     public static void main(String[] args) {
342         Exp_GridBagFLayout eg = new Exp_GridBagFLayout();
343         eg.createFrame();
344         eg.createButton();
345         eg.init7();
346         eg.f.setVisible(true);
347     }
348 }
349 
350 class Demo4 extends JFrame{
351     Demo4(){
352         setBounds(100,100,190,120);
353         setDefaultCloseOperation(EXIT_ON_CLOSE);
354         Container c = getContentPane();
355         c.setLayout(null);
356 
357         JComboBox<String> cb = new JComboBox<String>();//建立下拉列表,可以使用泛型确定条目类型
358         cb.addItem("身份证");
359         cb.addItem("学生证");
360         cb.addItem("工作证");
361 
362         String [] items = {"1","2","3"};//利用字符串数组创建下拉列表
363         JComboBox<String> cb2 = new JComboBox<>(items);
364 
365         JComboBox<String> cb3 = new JComboBox<>();
366         String [] item = {"学生证","驾驶证","毕业证"};
367         ComboBoxModel cm = new DefaultComboBoxModel<>(item);//建立下拉列表模型并向其中加入元素
368         cb3.setModel(cm);//利用下拉列表模型创建下拉列表
369 
370         cb3.setEditable(true);//设定下拉框中值可编辑
371         cb3.setBounds(10,10,80,21);
372         c.add(cb3);
373 
374         JButton jb = new JButton("打印");
375         jb.addActionListener(new ActionListener() {
376 
377             public void actionPerformed(ActionEvent actionEvent) {
378                 System.out.println("索引:"+cb3.getSelectedIndex());
379                 System.out.println("值:"+cb3.getSelectedItem());
380             }
381         });
382         jb.setBounds(100,10,60,20);
383         c.add(jb);
384 
385 
386         setVisible(true);
387     }
388 
389     public static void main(String[] args) {
390         Demo4 d4 = new Demo4();
391     }
392 
393 }
394 
395 class Exp_Jlist extends JFrame{
396     Exp_Jlist(){
397                 setBounds(100,100,217,167);
398                 setDefaultCloseOperation(EXIT_ON_CLOSE);
399 
400                 Container c = getContentPane();
401                 c.setLayout(null);
402 
403 
404                 String items [] ={"1","2","3","4","5","6","7","8"};
405               //  JList<String> jl = new JList<>(items);
406 
407                 DefaultListModel<String> mod = new DefaultListModel<>();//创建数据模型
408                 for(String tmp:items){
409                     mod.addElement(tmp);//向数据模型中添加元素
410                 }
411                 mod.addElement("AnotherElem");
412                 JList<String> jl = new JList<>();
413                 jl.setModel(mod);//为创建的列表框提供模型,方便更改元素
414 
415 //                jl.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);//选择模式:只能选择1个元素
416 //                jl.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);//只能选择相邻元素
417                 jl.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);//选择不受限制(按ctrl)
418 
419                 JButton jb = new JButton("确认");
420                 jb.setBounds(120,90,70,25);
421                 jb.addActionListener(new ActionListener() {
422                     public void actionPerformed(ActionEvent actionEvent) {
423                         java.util.List<String> str = jl.getSelectedValuesList();//获取列表框中元素
424                         for(String st:str){
425                             System.out.println(st);
426                         }
427                     }
428                 });
429                 c.add(jb);
430 
431                 JScrollPane js = new JScrollPane(jl);//添加滚动条
432                 js.setBounds(10,10,100,100);//如果添加了滚动条,列表框的大小由滚动条决定
433                 c.add(js);
434                 setVisible(true);
435     }
436 
437     public static void main(String[] args) {
438         new Exp_Jlist();
439     }
440 }
441 
442 class Exp_JTextField extends JFrame{
443     Exp_JTextField(){
444         setBounds(100,100,250,100);
445         setDefaultCloseOperation(EXIT_ON_CLOSE);
446         Container c =getContentPane();
447         c.setLayout(new FlowLayout());
448 
449         JTextField jt = new JTextField("aaa",20);//创建文本框,同时可以创建默认文本和长度
450         jt.setColumns(20);//也可以通过此方法设置长度
451         jt.setText("aaa");//也可以通过此方法设置文本
452         jt.setFont(new Font("宋体",Font.PLAIN,20));//设置字体
453         c.add(jt);
454 
455         JButton jb = new JButton("确认");
456         jb.addActionListener(new ActionListener() {
457             @Override
458             public void actionPerformed(ActionEvent actionEvent) {
459                 System.out.println(jt.getText());//获取文本框中的文本
460                 jt.setText("");//点击完按钮之后清空文本
461                 jt.requestFocus();//获取光标
462             }
463         });
464         c.add(jb);
465         setVisible(true);
466     }
467 
468     public static void main(String[] args) {
469         new Exp_JTextField();
470     }
471 }
472 
473 class Exp_JPasswordField extends JFrame{
474     Exp_JPasswordField(){
475         setBounds(100,100,500,100);
476         setDefaultCloseOperation(EXIT_ON_CLOSE);
477         Container c = getContentPane();
478         c.setLayout(new FlowLayout());
479 
480         JPasswordField jp = new JPasswordField(20);
481         jp.setColumns(20);
482         jp.setFont(new Font("Arial",Font.BOLD,20));
483         jp.setEchoChar(‘*‘);//设置显式字符,默认为圆点
484         jp.addActionListener(new ActionListener() {
485             public void actionPerformed(ActionEvent actionEvent) {
486                 char ch[] = jp.getPassword();//获取密码的字符数组
487                 String str = new String (ch);
488                 System.out.println(str);
489             }
490         });
491         c.add(jp);
492 
493         setVisible(true);
494     }
495 
496     public static void main(String[] args) {
497         new Exp_JPasswordField();
498     }
499 }
500 
501 class Exp_JTextArea extends JFrame{
502     Exp_JTextArea(){
503          setBounds(100,100,400,400);
504          setDefaultCloseOperation(EXIT_ON_CLOSE);
505          Container c = getContentPane();
506          c.setLayout(new FlowLayout());
507          JTextArea area = new JTextArea("这是一个文本域");//创建一个带默认文本的文本域,不同于文本框,文本域支持多行输入
508          area.setText("文本域");
509          area.setRows(5);//设定行
510          area.setColumns(20);//设定列数
511          area.append("添加内容");
512          area.insert("插入",3);
513          area.setFont(new Font("楷体",Font.PLAIN,20));
514 
515          JScrollPane js = new JScrollPane(area);//给文本域提供滚动条
516          c.add(js);
517 
518          setVisible(true);
519     }
520 
521     public static void main(String[] args) {
522         new Exp_JTextArea();
523     }
524 }
525 
526 class JustAExampleForActionListener extends JFrame{//动作事件监听器示例
527     JustAExampleForActionListener(){
528         setBounds(100,100,500,500);
529         setDefaultCloseOperation(EXIT_ON_CLOSE);
530         Container c =getContentPane();
531 
532         JTextField jt = new JTextField();
533         JLabel jl = new JLabel("这是一个标签");
534 
535         JScrollPane js =new JScrollPane(jt);
536         js.setBounds(10,10,300,30);
537 
538         jt.addActionListener(new ActionListener() {
539             @Override
540             public void actionPerformed(ActionEvent actionEvent) {
541                 Object obj =actionEvent.getSource();//使用ActionEvent对象获取值
542                 JTextField jtTmp = (JTextField)obj;
543                 System.out.println(jtTmp.getText());
544                 jl.setText("文本框单击了回车");
545             }
546         });
547 
548         c.add(js);
549         c.add(jl);
550         setVisible(true);
551     }
552 
553     public static void main(String[] args) {
554         new JustAExampleForActionListener();
555     }
556 }
557 
558 class JustAnExampleForFocusListener extends JFrame{//焦点事件监听器示例
559     JustAnExampleForFocusListener(){
560         setBounds(100,100,500,400);
561         setDefaultCloseOperation(EXIT_ON_CLOSE);
562         Container c = getContentPane();
563         c.setLayout(null);
564 
565         JTextField jt1 = new JTextField();
566         jt1.setBounds(10,10,60,20);
567 
568         JTextField jt2 = new JTextField();
569         jt2.setBounds(10,60,60,20);
570 
571         JTextField jt3 = new JTextField();
572         jt3.setBounds(10,110,60,20);
573 
574         jt1.addFocusListener(new MyFocusListener() );
575         jt2.addFocusListener(new MyFocusListener() );
576         jt3.addFocusListener(new MyFocusListener() );
577         c.add(jt1);
578         c.add(jt2);
579         c.add(jt3);
580         setVisible(true);
581     }
582     class MyFocusListener implements FocusListener{//自定义的焦点事件监听类
583        public void focusGained(FocusEvent e){//得到焦点事件
584            JTextField jtTmp = (JTextField)e.getSource();//获取触发事件的组件
585            jtTmp.setBorder(BorderFactory.createLineBorder(Color.GREEN));//给得到焦点的文本框提供绿色边框
586        }
587        public void focusLost(FocusEvent e){//失去焦点事件
588            JTextField jtTmp = (JTextField)e.getSource();
589            jtTmp.setBorder(BorderFactory.createLineBorder(Color.red));
590        }
591     }
592 
593     public static void main(String[] args) {
594         new JustAnExampleForFocusListener();
595     }
596 }

 

热门排行

今日推荐

热门手游