黑马程序员_java学习日记_Java基础_GUI

--------------------- android培训java培训java学习型技术博客、期待与您交流! ----------------------

用户交互方式

1 DOS命令行不利于记忆

2 图像化界面

专门用于图像化界面的包:java.awt,javax.swing

Java.awt:比较依赖于系统,跨平台性差重量级控件

Javax.swint:基于awt,增强了移植性,轻量级组件

Eclipse用的是swt

Component

Container(容器),window panel(面板)

Buttoncheckboxlabel textcomponent textarea textField

Container作为一个组件,可以添加组件是他的特点

流式布局:默认居中

边界式布局:必须指定边界,否则默认全局中添加新组建就覆盖

网格式布局:分格,组件存在于格子中

卡片式布局:

网格包布局:

上面边界,下面流式布局:先把窗体进行大区快的划分,然后每个区块都加一个Panel

然后在panel中加控件

Container内部封装了一个集合,因为他可以根据角标来添加元素

图形化界面是由另外一个线程控制的,创建一个图像化界面就是创建一个线程

/*

 * 1 创建窗体

 * 2 设置窗体属性,大小是否可见

 * 3 设置布局管理

 * 4 添加控件

 * */

    publicstaticvoid main(String[] args) {

       //Frame有一个默认边界布局,全部剧中填充

       Frame f = new Frame("MYAWT");

       //设置该窗口是否可见

       f.setVisible(true);

       //设置窗口大小

       f.setSize(500, 300);

       //设置窗口位置

       f.setLocation(200, 100);

       //设置布局管理

       f.setLayout(new FlowLayout());

       //按钮

       Button b = new Button("提交");

       f.add(b);

       System.out.println("1");

    }

事件监听机制

包括事件源,事件,监听器,处理方式

事件源:就是普通的图形界面组件

事件:每一个事件源都有自己的特有的对应事件,和共性事件

监听器:将可以触发某一个事件的动作都已经封装到了监听器中

以上三者都已定义好了,我们要做的事情是对产生的动作进行处理

f.addWindowListener(new event());

 

class event extends WindowAdapter

{

 

    @Override

    publicvoid windowClosing(WindowEvent e) {

       //System.out.println("关闭");

       System.exit(0);

    }

 

    @Override

    publicvoid windowActivated(WindowEvent e) {

       //只要该窗口在最前端,就会触发该方法

       System.out.println("最前端");

    }

 

    @Override

    publicvoid windowOpened(WindowEvent e) {

       System.out.println("打开窗口");

    }

   

}

分离事件和界面

publicclass Test02 {

 

    //定义全局变量都能访问到

    private Frame f;

    private Button b;

   

    public Test02() {

       init();

    }

    //将事件和图像化界面分离

    publicvoid init(){

       f = new Frame("测试");

       b = new Button("a");

       //使用一个函数来设置窗口位置和大小

       f.setBounds(100, 100, 300, 300);

       //布局管理器

       f.setLayout(new FlowLayout());

       f.setVisible(true);

       //定义按钮

       b = new Button();

       f.add(b);

       event();

    }

   

    publicvoid event()

    {

       f.addWindowListener(new WindowAdapter() {

 

           @Override

           publicvoid windowActivated(WindowEvent e) {

              System.out.println("1");

           }

 

           @Override

           publicvoid windowClosing(WindowEvent e) {

              System.out.println("1");

           }

 

           @Override

           publicvoid windowOpened(WindowEvent e) {

              System.out.println("1");

           }

       });

       //它是少数没有适配器接口的其中一个

       b.addActionListener(new ActionListener() {

          

           @Override

           publicvoid actionPerformed(ActionEvent arg0) {

              System.out.println("asd");

           }

       });

    }

    publicstaticvoid main(String[] args) {

       new Test02();

    }

}

添加监听

publicclass Test03 {

 

    //定义全局变量都能访问到

    private Frame f;

    private Button b;

    private TextField t;

   

    public Test03() {

       init();

    }

    //将事件和图像化界面分离

    publicvoid init(){

       f = new Frame("测试");

       //初始化指定列数

       t = new TextField(40);

       //定义按钮

       b = new Button("test");

       t.isVisible();

       //使用一个函数来设置窗口位置和大小

       f.setBounds(300, 300, 600, 500);

       //布局管理器

       f.setLayout(new FlowLayout());

       f.setVisible(true);

       f.add(t);

       f.add(b);

       event();

    }

    publicvoid event()

    {

       //活动监听,只要按钮被活动就会执行,如果规定了该监听又规定了其他监听,其他监听先执行,因为其他监听更具体

       b.addActionListener(new ActionListener() {

           @Override

           publicvoid actionPerformed(ActionEvent arg0) {

              // TODO Auto-generated method stub

           }

       });

      

       b.addMouseListener(new MouseListener() {

           //进入E为鼠标事件的对象

           @Override

           publicvoid mouseExited(MouseEvent e) {

              System.out.println("离开");

           }

           //离开

           @Override

           publicvoid mouseEntered(MouseEvent e) {

              System.out.println("进入");

           }

       });

       b.addKeyListener(new KeyAdapter() {

           @Override

           publicvoid keyTyped(KeyEvent arg0) {

              // TODO Auto-generated method stub

             

           }

           @Override

           publicvoid keyPressed(KeyEvent e) {

              System.out.println(e.getKeyText(e.getKeyCode())+"!!!"+e.getKeyCode());

              //esc关闭窗口

              if(e.getKeyCode() == KeyEvent.VK_ESCAPE)

                  System.exit(1);

              //组合键

              if(e.isControlDown()&&e.getKeyCode() == KeyEvent.VK_ENTER)

              {

                  //e.isShiftDown();

                  //e.isAltDown()

                  System.exit(2);

              }

           }

          

      

       });

       t.addKeyListener(new KeyAdapter() {

 

           @Override

           publicvoid keyPressed(KeyEvent e) {

              int i = e.getKeyCode();

              if(!(i>=KeyEvent.VK_0 && i<=KeyEvent.VK_9))

              {

                  //如果输入的是非数字则不让输入

                  e.consume();

              }

           }

          

       });

    }

}

练习

b.addActionListener(new ActionListener() {

          

           @Override

           publicvoid actionPerformed(ActionEvent arg0) {

              String string = t.getText();

              File file = new File(string);

              if(file.exists()&&file.isDirectory())

              {

                  String[] str = file.list();

                  for(String s : str)

                  {

                     ta.append(s+"\r\n");                         

                  }

              }

              t.setText("");

           }

       });

对话框:

Dialog依赖于别的对话框存在,所以需要将他以来的对话框对象作为参数传递进去,第二个参数确定该窗口是否是模化窗口

开始设置该对话框为不可见,当触发某些事件时修改为可见,然后当点击确定或者关闭则再次设置为不可见,不能system.exit,否则整个程序关闭

else

              {

              d.setVisible(true);

              }

菜单:

菜单栏,菜单,菜单项,子菜单

    private Frame f;

    private MenuBar mb;

    private Menu m;

    private Menu m1 ,m2 ;

    private MenuItem zm1,zm2;

   

   

    public Test06() {

       f = new Frame();

       //这三步缺一不可

       f.setBounds(300, 300, 500, 500);

       f.setLayout(new FlowLayout());

       f.setVisible(true);

       mb = new MenuBar();

       m = new Menu("文件");

       //如果想要有子菜单 new menu,如果不想有子菜单 new menuItem

       m1 = new Menu("文件1");

       m2 = new Menu("文件2");

       zm1 = new MenuItem("1");

       zm2 = new MenuItem("2");

       mb.add(m);

       m.add(m1);

       m.add(m2);

       //添加子菜单

       m1.add(zm1);

       m1.add(zm2);

       //添加菜单

       f.setMenuBar(mb);

    }

使用界面打开保存文件

publicclass Test06 {

 

    private Frame f;

    private MenuBar mb;

    private Menu m;

    private Menu m1 ,m2 ;

    private MenuItem zm1,zm2;

    private FileDialog open;

    private FileDialog save;

    private TextArea ta;

    private File file;

   

   

    public Test06() {

       f = new Frame();

       //这三步缺一不可

       f.setBounds(300, 300, 500, 500);

       f.setLayout(new FlowLayout());

       f.setVisible(true);

       mb = new MenuBar();

       m = new Menu("文件");

       //如果想要有子菜单 new menu,如果不想有子菜单 new menuItem

       m1 = new Menu("文件1");

       m2 = new Menu("打开");

       zm1 = new MenuItem("打开");

       zm2 = new MenuItem("保存");

       mb.add(m);

       m.add(m1);

       m.add(m2);

       //添加子菜单

       m1.add(zm1);

       m1.add(zm2);

       open = new FileDialog(f, "打开",FileDialog.LOAD);

       save = new FileDialog(f, "保存",FileDialog.SAVE);

       //添加菜单

       f.setMenuBar(mb);

        ta = new TextArea(30,50);

       f.add(ta);

       event();

    }

    publicvoid event()

    {

       zm1.addActionListener(new ActionListener() {

          

           @Override

           publicvoid actionPerformed(ActionEvent e) {

              ta.setText("");

              open.setVisible(true);

              //返回的是文件名

              //System.out.println(open.getFile());

              file = new File(open.getDirectory()+open.getFile());

              try {

                  BufferedReader br = new BufferedReader(new FileReader(file));

                  String line = null;

                  while((line = br.readLine())!=null)

                  {

                     ta.append(line+"\r\n");

                  }

              } catch (Exception e1) {

                  thrownew RuntimeException("读取失败");

              }

           }

       });

       zm2.addActionListener(new ActionListener() {

          

           @Override

           publicvoid actionPerformed(ActionEvent e) {

              save.setVisible(true);

              file = new File(save.getDirectory(),save.getFile());

              try {

                  BufferedWriter bw = new BufferedWriter(new FileWriter(file));

                  bw.write(ta.getText());

                  bw.close();

              } catch (IOException e1) {

                  thrownew RuntimeException("保存失败");

              }

              

           }

       });

    }

    publicstaticvoid main(String[] args) {

       new Test06();

    }

}

打包jar –cvf …jar 文件夹名

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java GUI的布局和设置背景可以通过以下方式实现: 1. 布局:Java GUI提供了多种布局方式,包括FlowLayout、GridLayout、BorderLayout、CardLayout等,你可以根据实际需求选择合适的布局方式来实现自己的界面布局。 2. 设置背景:Java GUI中可以通过设置JFrame、JPanel等组件的背景色或者背景图片来实现设置背景的效果。具体实现方法如下: - 设置背景色:可以通过setBackgroundColor(Color c)来设置组件的背景色。 - 设置背景图片:可以通过setBackgroungImage(Image img)来设置组件的背景图片,也可以通过继承JComponent类并重写paintComponent()方法来实现自定义的背景图片。 注意:在使用背景图片时,需要确保背景图片的大小与组件的大小相同,否则会出现拉伸或者重复的情况。 示例代码如下: ``` import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JPanel; public class MyFrame extends JFrame { private JPanel panel; public MyFrame() { // 设置窗口标题 setTitle("My Frame"); // 设置窗口大小 setSize(400, 300); // 设置窗口关闭时的操作 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 创建面板 panel = new JPanel() { // 重写paintComponent()方法,绘制背景图片 @Override protected void paintComponent(Graphics g) { ImageIcon icon = new ImageIcon("bg.jpg"); // 加载背景图片 Image img = icon.getImage(); g.drawImage(img, 0, 0, getWidth(), getHeight(), this); // 绘制背景图片 } }; // 设置面板背景色 panel.setBackground(Color.WHITE); // 将面板添加到窗口中 add(panel); // 显示窗口 setVisible(true); } public static void main(String[] args) { new MyFrame(); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值