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 }