<目录>

1 创建一个简单的窗体

如何进行事件监听

  (1) 按钮监听

  (2) 键盘监听

  (3) 鼠标监听

3 容器

  (1) 创建一个简单的对话框

  (2) 创建一个简单的模态对话框

  (3) 使窗体大小不可变化

4 布局器

  (1) 绝对定位

  (2) FlowLayout(顺序布局器:容器上的组件水平摆放)

  (3) BorderLayout(边框布局器:容器上的组件按上北、下南、左西、右东、中的顺序摆放)

  (4) GridLayout(网格布局器:容器上的组件按网格区域摆放)

  (5) setPreferredSize(使用布局器的时候,改变组件显示大小,仅部分有效)

  (6) CardLayout

5 组件

  (1) 标签

  (2) 使用JLabel显示图片

  (3) 按钮

  (4) 复选框

  (5) 单选框

  (6) 按钮组

  (7) 下拉框

  (8) 对话框

  (9) 文本框

  (10) 密码框

  (11) 文本域

  (12) 进度条

  (13) 文件选择器

6 面板

  (1) 基本面板

  (2) ContentPane

  (3) SplitPanel

  (4) JScrollPanel

  (5) TabbedPanel

  (6) CardLayerout

7 菜单

  (1) 菜单栏和菜单

  (2) 菜单项

8 工具栏

  (1) 工具栏

  (2) 给按钮设置提示信息

  (3) 禁止工具栏拖动

9 表格

  (1) 基本表格

  (2) JScrollPane

  (3) 列宽

  (4) TableModel

  (5) 进一步理解TableModel

  (6) TableModel与DAO结合

  (7) TableSelectionModel

  (8) 更新Table

  (9) 输入项验证

  (10) 选中指定行

10 日期控件

  (1) DatePicker

  (2) JXDatePicker

11 Swing中的线程

  (1) 三种线程

  (2) 事件调度线程是单线程的

  (3) 初始化线程

  (4) 事件调度线程

  (5) 长耗时任务线程

12 皮肤


<正文内容>

<创建一个简单的窗体>

package practice;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Test {
    public static void main(String[] args) {
        JFrame f=new JFrame("Kannyi的窗体");  //主窗体,括号里面是标题
        f.setSize(400,300);                  //主窗体设置大小,宽400高300
        f.setLocation(200, 200);             //主窗体设置位置,距离(屏幕左侧200,屏幕上方200)
        f.setLayout(null);                   //主窗体中的组件设置为绝对定位

        JButton b=new JButton("Kannyi的按钮");//按钮组件,还没设置功能
        b.setBounds(50,50,280,30);           //同时设置组件的位置和大小
        f.add(b);                            //把按钮加入到主窗体中

        //关闭窗体时,退出程序,不关会越来越卡
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //让窗体可见
        f.setVisible(true);
    }
}

界面如下:

<如何进行事件监听>

(1)按钮监听

package practice;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Test {
    public static void main(String[] args) {
        JFrame f=new JFrame("Kannyi的窗体"); //主窗体,括号里面是标题
        f.setSize(400,300);                 //主窗体设置大小,宽400高300
        f.setLocation(580,200);             //主窗体设置位置,距离(屏幕左侧200,屏幕上方200)
        f.setLayout(null);                  //主窗体中的组件设置为绝对定位

        //标签,用于显示信息,比如文本或图像
        JLabel l1=new JLabel();
        //获取图像
        ImageIcon i=new ImageIcon("C:/Users/ASUS/Pictures/其他/img.png");
        //设置指定的图像到标签中
        l1.setIcon(i);
        //设置标签的位置和大小
        l1.setBounds(50,50,i.getIconWidth(),i.getIconHeight());

        JLabel l2=new JLabel();
        l2.setText("Kannyi的文本");          //设置指定的文本到标签中
        l2.setBounds(30, 30, 80, 12);       //设置标签的位置和大小,高度太高排版会出问题,12正好

        JButton b=new JButton("隐藏图片");    //按钮组件
        b.setBounds(250,200,100,30);

        //给按钮增加监听
        //写法1
        /*----------------------------------------------
        b.addActionListener(new ActionListener(){
            //当按钮被点击时,actionPerformed方法就会被执行
            //就会触发ActionEvent事件
            public void actionPerformed(ActionEvent e) {
                l.setVisible(false);
            }
        });
        -----------------------------------------------*/
        //写法2
        b.addActionListener(e->l1.setVisible(false));

        f.add(b);
        f.add(l1);
        f.add(l2);

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
}

界面如下:

(2)键盘监听

package practice;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Test {
    public static void main(String[] args) {

        JFrame f = new JFrame("Kannyi的窗体");
        f.setSize(400, 300);
        f.setLocation(580, 200);
        f.setLayout(null);

        JLabel l = new JLabel();
        ImageIcon i = new ImageIcon("C:/Users/ASUS/Pictures/其他/img.png");
        l.setIcon(i);
        l.setBounds(50, 50, i.getIconWidth(), i.getIconHeight());

        //增加键盘监听
        f.addKeyListener(new KeyListener() {
            //键被弹起
            public void keyReleased(KeyEvent e) {
                //左键37 上键38 右键39 下键40
                /*
                可用下面这个函数知道键位的Code
                System.out.println(e.getKeyCode());
                */

                if (e.getKeyCode() == 37) {
                    //图片向左移动 (x坐标减少,y坐标不变)
                    l.setLocation(l.getX() -10, l.getY());
                }
                if (e.getKeyCode() == 38) {
                    //图片向上移动 (x坐标不变,y坐标减少)
                    l.setLocation(l.getX(), l.getY() - 10);
                }
                if (e.getKeyCode() == 39) {
                    //图片向右移动 (x坐标增加,y坐标不变)
                    l.setLocation(l.getX() + 10, l.getY());
                }
                if (e.getKeyCode() == 40) {
                    //图片向下移动 (x坐标不变,y坐标增加)
                    l.setLocation(l.getX(), l.getY() + 10);
                }
            }

            //键被按下,可以实现连续运动
            //之前被定义过的键位就不能用了
            public void keyPressed(KeyEvent e) {

            }

            // 一个按下弹起的组合动作
            //不会用!!!
            public void keyTyped(KeyEvent e) {

            }
        });

        f.add(l);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
}

界面如下(看不出什么特别,因为要用键盘实现上下左右操作):

(3)鼠标监听

package practice;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Random;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Test {
    public static void main(String[] args) {

        JFrame f = new JFrame("Kannyi的窗体");
        f.setLayout(null);
        f.setSize(500, 400);
        f.setLocationRelativeTo(null);               //设置窗体在屏幕正中央

        JLabel l = new JLabel();
        ImageIcon i = new ImageIcon("C:/Users/ASUS/Pictures/其他/img.png");
        l.setIcon(i);
        l.setBounds(150, 100, i.getIconWidth(), i.getIconHeight());

        /*
        //鼠标监听-方法1
        //这种方法的缺点在于每个方法都要写出来,很麻烦
        l.addMouseListener(new MouseListener() {
            //释放鼠标
            public void mouseReleased(MouseEvent e) {

            }

            //按下鼠标
            public void mousePressed(MouseEvent e) {

            }

            //鼠标退出
            public void mouseExited(MouseEvent e) {

            }

            //鼠标进入
            public void mouseEntered(MouseEvent e) {
                //Random r.nextInt(int n)可以随机生成一个[0,n)的区间
                Random r = new Random();
                //下面的相减操作是防止图片随机到窗体外
                int x = r.nextInt(f.getWidth() - l.getWidth());
                int y = r.nextInt(f.getHeight() - l.getHeight());
                l.setLocation(x, y);
            }

            //按下释放组合动作为点击鼠标
            public void mouseClicked(MouseEvent e) {

            }
        });
         */

        //鼠标监听-方法2
        //用适配器,只需要重写用到的方法即可,较为方便
        l.addMouseListener(new MouseAdapter() {
            //只有mouseEnter用到了
            public void mouseEntered(MouseEvent e) {
                Random r=new Random();
                int x=r.nextInt(f.getWidth()-l.getWidth());
                int y=r.nextInt(f.getHeight()-l.getHeight());
                l.setLocation(x, y);
            }
        });

        f.add(l);

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
}

界面如下(看不出什么特别,因为要用鼠标实现操作):

<容器>

(1)创建一个简单的对话框

package practice;

import javax.swing.JButton;
import javax.swing.JDialog;

public class Test {
    public static void main(String[] args) {
        JDialog d=new JDialog();             //对话框
        d.setTitle("Kannyi的对话框");         //设置对话框的标题
        d.setSize(400,300);
        d.setLocation(200,200);
        d.setLayout(null);

        JButton b=new JButton("kannyi的按钮");
        b.setBounds(50,50,280,30);

        d.add(b);

        d.setVisible(true);
    }
}

界面如下:

(2)创建一个简单的模态对话框(父窗体不能被激活,除非对话框关闭)

package practice;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;

public class Test {
    public static void main(String[] args) {
        JFrame f=new JFrame("Kannyi的外部窗体");
        f.setSize(600, 500);
        f.setLocation(100, 100);

        JDialog d=new JDialog(f);   //根据外部窗体实例化JDialog
        d.setModal(true);           //设置为模态,其后的父窗体不能被激活,除非对话框关闭

        d.setTitle("Kannyi的模态对话框");
        d.setSize(400,300);
        d.setLocation(200,200);
        d.setLayout(null);

        JButton b=new JButton("Kannyi的按钮");
        b.setBounds(50,50,280,30);

        d.add(b);

        f.setVisible(true);
        d.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

界面如下:

(3)使窗体大小不可变化

package practice;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Test {
    public static void main(String[] args) {
        JFrame f=new JFrame("Kannyi的窗口");
        f.setSize(400,300);
        f.setLocation(200, 200);
        f.setLayout(null);

        JButton b=new JButton("Kannyi的按钮");
        b.setBounds(50, 50, 280, 30);

        f.add(b);
        //窗体大小不可变化
        f.setResizable(false);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        f.setVisible(true);
    }
}

界面如下:

<布局器>

(1)绝对定位

package practice;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Test {

    public static void main(String[] args) {
        JFrame f=new JFrame("Kannyi的窗体");
        f.setSize(400,300);
        f.setLocation(200,200);
        //绝对定位:设置布局器为null,容器上的组件都需要指定位置和大小
        f.setLayout(null);

        JButton b1=new JButton("按钮1");
        b1.setBounds(50,50,70,30);
        JButton b2=new JButton("按钮2");
        b2.setBounds(150,50,80,30);
        //没有指定位置和大小,不会出现在容器上
        JButton b3=new JButton("按钮3");

        f.add(b1);
        f.add(b2);
        f.add(b3);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        f.setVisible(true);
    }
}

界面如下:

(2)FlowLayout

package practice;

import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Test {

    public static void main(String[] args) {
        JFrame f=new JFrame("Kannyi的窗体");
        f.setSize(400,300);
        f.setLocation(200, 200);
        //设置布局器为FlowLayrout
        //容器上的组件水平摆放
        f.setLayout(new FlowLayout());

        JButton b1=new JButton("按钮1");
        JButton b2=new JButton("按钮2");
        JButton b3=new JButton("按钮3");

        //加入到容器,无需单独指定大小和位置
        f.add(b1);
        f.add(b2);
        f.add(b3);

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
}

界面如下:

(3)BorderLayout

package practice;

import java.awt.BorderLayout;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Test {

    public static void main(String[] args) {
        JFrame f=new JFrame("Kannyi的窗体");
        f.setSize(400,300);
        f.setLocation(200,200);
        //设置布局为BorderLayout
        //容器上的组件按照 上北 下南 左西 右东 的顺序摆放(可以自己设置)
        f.setLayout(new BorderLayout());

        JButton b1 = new JButton("按钮1");
        JButton b2 = new JButton("按钮2");
        JButton b3 = new JButton("按钮3");
        JButton b4 = new JButton("按钮4");
        JButton b5 = new JButton("按钮5");

        //加入到容器的时候,需要指定位置
        f.add(b1, BorderLayout.NORTH);
        f.add(b2, BorderLayout.SOUTH);
        f.add(b3, BorderLayout.WEST);
        f.add(b4, BorderLayout.EAST);
        f.add(b5, BorderLayout.CENTER);

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
}

界面如下:

(4)GridLayout

import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class Test {
    public static void main(String[] args) {

        JFrame f = new JFrame("Kannyi的窗体");
        f.setSize(400, 300);
        f.setLocation(200, 200);
        // 设置布局器为GridLayerout,即网格布局器
        // 该GridLayerout的构造方法表示该网格是2行3列
        f.setLayout(new GridLayout(2, 3));

        JButton b1 = new JButton("甲");
        JButton b2 = new JButton("乙");
        JButton b3 = new JButton("丙");
        JButton b4 = new JButton("丁");
        JButton b5 = new JButton("戊");

        f.add(b1);
        f.add(b2);
        f.add(b3);
        f.add(b4);
        f.add(b5);

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
}

界面如下:

(5)setPreferredSize

import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Test {
    public static void main(String[] args) {

        JFrame f = new JFrame("Kannyi的窗体");
        f.setSize(400, 300);
        f.setLocation(200, 200);
        f.setLayout(new FlowLayout());

        JButton b1 = new JButton("甲");
        JButton b2 = new JButton("乙");
        JButton b3 = new JButton("丙");

        // 即便使用布局器,也可以通过setPreferredSize,向布局器建议该组件显示的大小
        b3.setPreferredSize(new Dimension(180, 40));

        f.add(b1);
        f.add(b2);
        f.add(b3);

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
}

界面如下:

(6)CardLayout

界面如下:

<组件>

(1)标签

界面如下:

(2)使用JLabel显示图片

界面如下:

(3)按钮

界面如下:

(4)复选框

界面如下:

(5)单选框

界面如下:

(6)按钮组

界面如下:

(7)下拉框

界面如下:

(8)对话框

界面如下:

(9)文本框

界面如下:

(10)密码框

界面如下:

(11)文本域

界面如下:

(12)进度条

界面如下:

(13)文件选择器

界面如下:

<面板>

(1)基本面板

界面如下:

(2)ContentPane

界面如下:

(3)SplitPanel

界面如下:

(4)JScrollPanel

界面如下:

(5)TabbedPanel

界面如下:

(6)CardLayerout

界面如下:

<菜单>

(1)菜单栏和菜单

package practice;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;

public class Test33 {

    public static void main(String[] args) {
        JFrame f = new JFrame("Kannyi");
        f.setSize(400, 300);
        f.setLocation(200, 200);

        //菜单栏
        JMenuBar mb = new JMenuBar();

        //菜单
        JMenu mHero = new JMenu("英雄");
        JMenu mItem = new JMenu("道具");
        JMenu mWord = new JMenu("符文");
        JMenu mSummon = new JMenu("召唤师");
        JMenu mTalent = new JMenu("天赋树");

        //把菜单加入到菜单栏
        mb.add(mHero);
        mb.add(mItem);
        mb.add(mWord);
        mb.add(mSummon);
        mb.add(mTalent);

        //把菜单栏加入到frame,这里用的是set而非add
        f.setJMenuBar(mb);

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
}

界面如下:

(2)菜单项

package practice;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

public class Test34 {

    public static void main(String[] args) {
        JFrame f = new JFrame("Kannyi的窗体");
        f.setSize(500, 400);
        f.setLocation(200, 200);

        JMenuBar mb = new JMenuBar();

        JMenu mHero = new JMenu("英雄");
        JMenu mItem = new JMenu("道具");
        JMenu mWord = new JMenu("符文");
        JMenu mSummon = new JMenu("召唤师");
        JMenu mTalent = new JMenu("天赋树");

        //菜单项
        mHero.add(new JMenuItem("近战"));
        mHero.add(new JMenuItem("远程"));
        mHero.add(new JMenuItem("物理"));
        mHero.add(new JMenuItem("坦克"));
        mHero.add(new JMenuItem("法系"));
        mHero.add(new JMenuItem("辅助"));
        mHero.add(new JMenuItem("打野"));
        mHero.add(new JMenuItem("突进"));
        mHero.add(new JMenuItem("男性"));
        mHero.add(new JMenuItem("女性"));
        //分隔符
        mHero.addSeparator();
        mHero.add(new JMenuItem("所有"));

        mb.add(mHero);
        mb.add(mItem);
        mb.add(mWord);
        mb.add(mSummon);
        mb.add(mTalent);

        f.setJMenuBar(mb);

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
}

界面如下:

<工具栏>

(1)工具栏

界面如下:

(2)给按钮设置提示信息

界面如下:

(3)禁止工具栏拖动

界面如下:

<表格>

(1)基本表格

界面如下:

(2)JScrollPane

界面如下:

(3)列宽

界面如下:

(4)TableModel

界面如下:

(5)进一步理解TableModel

界面如下:

(6)TableModel与DAO结合

界面如下:

(7)TableSelectionModel

界面如下:

(8)更新Table

界面如下:

(9)输入项验证

界面如下:

(10)选中指定行

界面如下:

<日期控件>

(1)DatePicker

界面如下:

(2)JXDatePicker

界面如下:

<Swing中的线程>

(1)三种线程

界面如下:

(2)事件调度线程是单线程的

界面如下:

(3)初始化线程

界面如下:

(4)事件调度线程

界面如下:

(5)长耗时任务线程

界面如下:

<皮肤>

界面如下:

【Java项目】GUI图形用户界面(不断更新中!)的更多相关文章

  1. java第八节 GUI/图形用户界面

    /* *第8讲 GUI/图形用户界面 * AWT的基础知识 * GUI全称是Graphical User Interface,即图形用户界面 * JDK中提供了AWT和Swing两个包,用于GUI程序 ...

  2. AWT是Java基础类 (JFC)的一部分,为Java程序提供图形用户界面(GUI)的标准API

    抽象窗口工具包 (Abstract Windowing Toolkit) (AWT)是Java的平台独立的窗口系统,图形和用户界面器件工具包. AWT是Java基础类 (JFC)的一部分,为Java程 ...

  3. 黑马程序员_<<GUI(图形用户界面)--------1>>

    --------------------ASP.Net+Android+IOS开发..Net培训.期待与您交流! -------------------- 1.  GUI图形用户界面 1.简述 Gra ...

  4. JAVA记事本的图形用户界面应用程序含过滤

    JAVA记事本的图形用户界面应用程序 过滤 题目简介: 整体分析: 实验代码: package note; import java.awt.EventQueue; import java.awt.ev ...

  5. JAVA记事本的图形用户界面应用程序含加密

    JAVA记事本的图形用户界面应用程序 加密 题目简介: 整体分析: 实验代码: import java.awt.EventQueue; import java.awt.event.ActionEven ...

  6. JAVA记事本的图形用户界面应用程序

    JAVA记事本的图形用户界面应用程序 整体分析: 代码实现: import java.awt.EventQueue; import java.awt.event.ActionEvent; import ...

  7. java GUI(图形用户界面)

    GUI Graphical User Interface(图形用户接口). 用图形的方式,来显示计算机操作的界面,这样更方便更直观. CLI Command line User Interface ( ...

  8. linux系统中firewalld防火墙管理工具firewall-config(GUI图形用户界面)

    firewall-config是firewalld防火墙管理工具的GUI(图形用户界面)版本,几乎可以实现所有以命令行来执行的操作. firewall-config的界面如下图(在终端直接运行fire ...

  9. 十一:Java之GUI图形Awt和Swing

    一. AWT和 Swing AWT 和 Swing 是 Java 设计 GUI用户界面的基础.与 AWT 的重量级组件不同,Swing 中大部分是轻量级组件.正是这个原因,Swing 差点儿无所不能, ...

  10. GUI(图形用户界面)

    一.GUI(图形用户界面) GUI Graphical User Interface(图形用户接口) 用图形的方式,来显示计算机操作的界面,这样更方便更直观 CLI Command line User ...

随机推荐

  1. 样式 bootstrap purecss Amaze UI 推荐

    Bootstrap 简洁.直观.强悍的前端开发框架,让web开发更迅速.简单. Bootstrap,来自 Twitter,是目前很受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAV ...

  2. [算法练习]Add Two Numbers

    题目说明: You are given two linked lists representing two non-negative numbers. The digits are stored in ...

  3. Android 退出app,后台推送的服务也停止了,怎么可以做到不停止后台服务呢?

    service粘性等的那4种方式试了,三星的可以,小米老款手机可以,新款不行,华为新款也不行,还有魅族什么的,都不行,新款的手机上都有一个安全中心,只有在安全中心里面添加上允许app自启动才可以 怎么 ...

  4. 通过Application存取公共数据比如登录信息等..

    Android系统在运行每一个程序应用的时候,都会创建一个Application对象,用于存储与整个应用相关的公共变量.一个Android应用只会生成一个Application对象,在不同的Activ ...

  5. 应用程序 调用 webservice

    首先用VS创建一个WebService服务工程,并且完成基本功能,本人完成的是html转pdf功能. 然后,新建一个Windows应用程序. 添加WebService到Windows项目中,如图 然后 ...

  6. 需求分析之WBS

    我们的产品就是当你把废旧的塑料瓶和电池投入回收箱中会产生能量,那么这能量可以干嘛呢那就通过我们的APP进行扫码记录所产生的能量这写能量可以在我们的APP的换吧中进行兑换用户所需要的东西比如:共享单车的 ...

  7. EF6 code first 新建项目注意问题

    1.一开始就建立自动迁移模式 打开Package Manager Console,确保Package source是nuget.org 命令行输入: enable-migrations 然后第一次运行 ...

  8. 对于大型公司项目平台选择j2ee的几层认识

    我是一个从野路子上一路走来的程序员,现在主要用.net做方案.选.net不选jave并没有什么特别的原因,只不过是因为我自己从c,java学起,后来被vs这个工具所吸引, 很熟悉这个平台罢了,从业15 ...

  9. linux-软件下载安装

    RPM 安装 rpm -ivh 包全名 :-i(install):安装:-v(verbose):显示详细信息:-h(hash):显示进度: rpm -Uvh 包全名:-U(upgrate):升级 rp ...

  10. 巧用花生壳将局域网内的FTP和www服务器发布到互联网

    一.目的:用生壳发布FTP和mail服务器到互连网. 二.网络环境:(出租房多家共用路由器上网,ADSL的1Mbps带宽,动态PPPOE拨号,帐号和密码存储在soho路由器中,路由器自动联机上网,并为 ...