精华内容
下载资源
问答
  • 场景分析在前端开发中,我们常常会运用到“组件库”...举例说明例如:element-ui组件库中使用switch开关,有个属性active-color是设置“打开时”的背景色。change事件是触发状态的事件。v-model="value":active-colo...

    场景分析

    在前端开发中,我们常常会运用到“组件库”。在main入口中引入组件库,就可以很轻松的在页面中引入,并做一些基本的配置,如样式,颜色等。只需要在引入的组件中写入特定的属性,就能够定义。

    举例说明

    例如:element-ui组件库中使用switch开关,有个属性active-color是设置“打开时”的背景色。change事件是触发状态的事件。

    v-model="value"

    :active-color="activecolor"

    @change="touchSwitch">

    export default {

    data() {

    return {

    value: true,

    activecolor: '#13ce66'

    }

    },

    methods: {

    touchSwitch () {

    // 这里入方法

    }

    }

    };

    分析代码

    我们分析上面的代码

    首先我们可以看到active-color是将特定的数据传给组件,也就是父传子组件。

    其次是@change虽然监听的是改变事件,但是语法糖依然是$emit,什么emit我们在以后的文章中会讲到,就是“抛出事件”。

    这就分为组件的最基本功能:

    数据进

    事件出

    那组件的使用我们知道了,通过active-color传入参数,通过@来接收事件。

    所以,我们来探究一下组件的内部结构是什么样的?

    我写了一个小模型,是一个显示标题的小按钮,通过div包裹。

    {{title}}

    export default {

    name: 'type-box',

    props: {

    title: {

    type: String,

    default: () => ''

    }

    },

    methods: {

    ai_click (title) {

    this.$emit('ai_click', title)

    }

    }

    }

    .box{

    width: 250px;

    height: 100px;

    margin: 10px;

    border-radius: 10px;

    background-color: #3a8ee6;

    color: white;

    font-size: 25px;

    line-height: 100px;

    text-align: center;

    cursor: pointer;

    }

    使用方法:

    import typeBox from './type-box'

    export default {

    components: {

    typeBox

    },

    methods: {

    touch (data) {

    console.log(data)

    }

    }

    }

    分析组件

    接收

    通过props接收父组件传递过来的数据,通过工厂函数获取一个默认值。

    传递

    通过this.$emit('ai_click', title)告诉父组件,我要传递一个事件,名字叫“ai_click”,请通过@ai_click接收一下,并且我将title的值返回父组件。

    总结

    所以今天分析vue组件的3大核心概念的其中两个——属性和事件。

    这篇文章只分析到应用场景,也是最简单的组件。希望后续能够深入了解vue的组件概念:属性、事件和插槽。

    展开全文
  • 本文实例讲述了Android编程实现滑动开关组件功能。分享给大家供大家参考,具体如下: 由于Android并未提供滑动开关之类的组件,所以我们需要自己去实现一个自定义的视图组件来实现滑动开关效果。 这里有一个示例代码...
  • Android自定义控件系列二:自定义开关按钮(一) 这一次我们将会实现一个完整纯粹的自定义控件,而不是像之前的组合控件一样,拿系统的控件来实现;计划分为三部分:自定义控件的基本部分,自定义...

             Android自定义控件系列二:自定义开关按钮(一)


    这一次我们将会实现一个完整纯粹的自定义控件,而不是像之前的组合控件一样,拿系统的控件来实现;计划分为三部分:自定义控件的基本部分自定义控件的触摸事件的处理自定义控件的自定义属性

    下面就开始第一部分的编写,本次以一个定义的开关按钮为例,下面就开始吧:


    先看看效果,一个点击开关按钮,实现点击切换开关状态:



    为了能够讲解清晰,还是来一些基本的介绍。

    首先需要明确的就是自定义控件还是继承自View这个类,Google在View这个类里面提供了相当多的方法供我们使用,使用这些方法我们可以实现相当多的效果和功能,在这里需要用到几个主要的方法;


    自定义控件的步骤、用到的主要方法:


    1、首先需要定义一个类,继承自View;对于继承View的类,会需要实现至少一个构造方法;实际上这里一共有三个构造方法:


    public View (Context context)是在java代码创建视图的时候被调用(使用new的方式),如果是从xml填充的视图,就不会调用这个


    public View (Context context, AttributeSet attrs)这个是在xml创建但是没有指定style的时候被调用


    public View (Context context, AttributeSet attrs, int defStyle)这个是在第二个基础上添加style的时候被调用的


    所以对于这里来说,如果不使用style, 我们重点关注第二个构造方法即可



    2、对于任何一个控件来说,它需要显示在我们的界面上,那么肯定需要定义它的大小;

    在这里Google提供了一个方法:protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec);我们去看这个方法的内部,实际上是调用了protected final void setMeasuredDimension(int measuredWidth, int measuredHeight);这个方法,其中第一个参数是view的宽,第二个参数是view的高,这样我们就可以设置view的宽高了,但是要注意,这样设置的单位都是像素



    3、对于一个需要显示的控件来说,我们往往还需要确定它的位置:

    这就要求重写onLayout方法;但是实际上这个方法在自定义view的时候使用的不多,原因是因为对于位置来说,控件只有建议权而没有决定权,决定权一般在父控件那里。


    4、对于一个控件,需要显示,我们当然需要将它绘制出来,这里就需要重写onDraw方法,来将这个控件绘制出来



    5、当控件状态改变的时候,我们很可能需要刷新view的显示状态,这时候就需要调用invalidate()方法,这个方法实际上会重新调用onDraw方法来重绘控件



    6、在定义控件的过程中,如果需要对view设置点击事件,可以直接使用setOnClickListener方法,而不需要写view.setOnClickListener;



    7、在布局文件中将这个自定义控件定义出来,注意名字要使用全类名;而且,由于是继承自view控件,所以在xml文件中如果是view本身的属性都可以直接使用,比如:android:layout_width等等



    这里比较关键的地方就在于这个onDraw方法,我们一起来看一下:


    1. /** 
    2.      * 画view的方法,绘制当前view的内容 
    3.      */  
    4.     @Override  
    5.     protected void onDraw(Canvas canvas) {  
    6.         // super.onDraw(canvas);  
    7.   
    8.   
    9.         Paint paint = new Paint();  
    10.         // 打开抗锯齿  
    11.         paint.setAntiAlias(true);  
    12.   
    13.   
    14.         // 画背景  
    15.         canvas.drawBitmap(backgroundBitmap, 00, paint);  
    16.         // 画滑块  
    17.         canvas.drawBitmap(slideButton, slideBtn_left, 0, paint);  
    18.     }  



    onDraw方法传入的参数是一个Canvas画布对象,这个实际上跟Java中的差不太多,我们要在画布上画画也需要一个画笔,我们这里也将其初始化出来Paint paint = new Paint(),同时设置了一个抗锯齿效果paint.setAntiAlias(true),然后调用drawBitmap的方法,先后绘制了开关的背景和开关的滑块,分别入下图:


                              


    这里要注意的一点就是,drawBitmap(Bitmap bitmap, float left, float top, Paint paint)方法中间的两个float类型的参数,分别代表绘制图形的左上角的x和y的坐标(原点设置在左上角),所以这里如果我们个绘制坐标都传入0,0,那么开关会处在一个关的状态,这里,我们对于滑块使用了一个变量slideBtn_left来设置其位置,那么对于关闭状态,slideBtn_left的值就应该为0,对于开启状态,slideBtn_left的值就应该是backgroundBitmap(背景)的宽度减去slideButton(滑块)的宽度


    那么这样一来,机制就比较清楚了,我们只需要在控件上设置一个点击事件,同时设置一个boolean变量代表开关的状态,当点击的时候,切换这个boolean类型的变量为true或者false,同时变化slideButton的值为0或者backgroundBitmap.getWidth()-slideButton.getWidth(),然后再调用invalidate()方法刷新控件,就可以实现基本的开关功能了


    下面来看具体的代码,注解比较详细:


    自定义控件的类MyToggleButton.java,继承自View:

    1. package com.example.togglebutton.ui;  
    2.   
    3. import com.example.togglebutton.R;  
    4.   
    5. import android.content.Context;  
    6. import android.graphics.Bitmap;  
    7. import android.graphics.BitmapFactory;  
    8. import android.graphics.Canvas;  
    9. import android.graphics.Paint;  
    10. import android.util.AttributeSet;  
    11. import android.view.View;  
    12.   
    13. /* 
    14.  * 自定义view的几个步骤: 
    15.  * 1、首先需要写一个类来继承自View 
    16.  * 2、需要得到view的对象,那么需要重写构造方法,其中一参的构造方法用于new,二参的构造方法用于xml布局文件使用,三参的构造方法可以传入一个样式 
    17.  * 3、需要设置view的大小,那么需要重写onMeasure方法 
    18.  * 4、需要设置view的位置,那么需要重写onLayout方法,但是这个方法在自定义view的时候用的不多,原因主要在于view的位置主要是由父控件来决定 
    19.  * 5、需要绘制出所需要显示的view,那么需要重写onDraw方法 
    20.  * 6、当控件状态改变的时候,需要重绘view,那么调用invalidate();方法,这个方法实际上会重新调用onDraw方法 
    21.  * 7、在这其中,如果需要对view设置点击事件,可以直接调用setOnClickListener方法 
    22.  */  
    23.   
    24. public class MyToggleButton extends View {  
    25.   
    26.     /** 
    27.      * 开关按钮的背景 
    28.      */  
    29.     private Bitmap backgroundBitmap;  
    30.     /** 
    31.      * 开关按钮的滑动部分 
    32.      */  
    33.     private Bitmap slideButton;  
    34.     /** 
    35.      * 滑动按钮的左边界 
    36.      */  
    37.     private float slideBtn_left;  
    38.     /** 
    39.      * 当前开关的状态 
    40.      */  
    41.     private boolean currentState = false;  
    42.   
    43.     /** 
    44.      * 在代码里面创建对象的时候,使用此构造方法 
    45.      *  
    46.      * @param context 
    47.      */  
    48.     public MyToggleButton(Context context) {  
    49.         super(context);  
    50.     }  
    51.   
    52.     /** 
    53.      * 在布局文件中声明的view,创建时由系统自动调用 
    54.      *  
    55.      * @param context 
    56.      * @param attrs 
    57.      */  
    58.     public MyToggleButton(Context context, AttributeSet attrs) {  
    59.         super(context, attrs);  
    60.         initView();  
    61.     }  
    62.   
    63.     /** 
    64.      * 测量尺寸时的回调方法 
    65.      */  
    66.     @Override  
    67.     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  
    68.         // super.onMeasure(widthMeasureSpec, heightMeasureSpec);  
    69.         // 设置当前view的大小 width:view的宽,单位都是像素值 heigth:view的高,单位都是像素值  
    70.         setMeasuredDimension(backgroundBitmap.getWidth(),  
    71.                 backgroundBitmap.getHeight());  
    72.     }  
    73.   
    74.     // 这个方法对于自定义view的时候帮助不大,因为view的位置一般由父组件来决定的  
    75.     @Override  
    76.     protected void onLayout(boolean changed, int left, int top, int right,  
    77.             int bottom) {  
    78.         super.onLayout(changed, left, top, right, bottom);  
    79.     }  
    80.   
    81.     /** 
    82.      * 画view的方法,绘制当前view的内容 
    83.      */  
    84.     @Override  
    85.     protected void onDraw(Canvas canvas) {  
    86.         // super.onDraw(canvas);  
    87.   
    88.         Paint paint = new Paint();  
    89.         // 打开抗锯齿  
    90.         paint.setAntiAlias(true);  
    91.   
    92.         // 画背景  
    93.         canvas.drawBitmap(backgroundBitmap, 00, paint);  
    94.         // 画滑块  
    95.         canvas.drawBitmap(slideButton, slideBtn_left, 0, paint);  
    96.     }  
    97.   
    98.     /** 
    99.      * 初始化view 
    100.      */  
    101.     private void initView() {  
    102.         backgroundBitmap = BitmapFactory.decodeResource(getResources(),  
    103.                 R.drawable.switch_background);  
    104.         slideButton = BitmapFactory.decodeResource(getResources(),  
    105.                 R.drawable.slide_button);  
    106.   
    107.         /* 
    108.          * 点击事件 
    109.          */  
    110.         setOnClickListener(new OnClickListener() {  
    111.   
    112.             @Override  
    113.             public void onClick(View v) {  
    114.   
    115.                 currentState = !currentState;  
    116.                 flushState();  
    117.                 flushView();  
    118.             }  
    119.         });  
    120.     }  
    121.   
    122.     /** 
    123.      * 刷新视图 
    124.      */  
    125.     protected void flushView() {  
    126.         // 刷新当前view会导致ondraw方法的执行  
    127.         invalidate();  
    128.     }  
    129.   
    130.     /** 
    131.      * 刷新当前的状态 
    132.      */  
    133.     protected void flushState() {  
    134.         if (currentState) {  
    135.             slideBtn_left = backgroundBitmap.getWidth()  
    136.                     - slideButton.getWidth();  
    137.         } else {  
    138.             slideBtn_left = 0;  
    139.         }  
    140.     }  
    141.   
    142. }  


    在布局文件中将其定义出来:


    1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    2.     xmlns:tools="http://schemas.android.com/tools"  
    3.     android:layout_width="match_parent"  
    4.     android:layout_height="match_parent"  
    5.     tools:context="${relativePackage}.${activityClass}" >  
    6.   
    7.   
    8.     <com.example.togglebutton.ui.MyToggleButton  
    9.         android:id="@+id/my_toggle_btn"  
    10.         android:layout_width="wrap_content"  
    11.         android:layout_height="wrap_content"  
    12.         android:layout_centerInParent="true" />  
    13.   
    14.   
    15. </RelativeLayout>  


    在这里由于没有写任何点击触发业务的逻辑,只是一个单纯的控件,所以在MainActivity里面没有加入多的代码:


    1. package com.example.togglebutton;  
    2.   
    3. import android.app.Activity;  
    4. import android.os.Bundle;  
    5.   
    6. public class MainActivity extends Activity {  
    7.   
    8.     @Override  
    9.     protected void onCreate(Bundle savedInstanceState) {  
    10.         super.onCreate(savedInstanceState);  
    11.         setContentView(R.layout.activity_main);  
    12.   
    13.     }  
    14. }  


    至此一个自定义的开关按钮就完成了,后面两篇将会介绍如何在上面实现 点击拖动开关的效果 和如何实现自定义属性,谢谢支持!

    展开全文
  • JAVA学习笔记(四十九)- Swing相关组件

    千次阅读 2015-04-04 08:34:09
    JFrame组件import java.awt.Color;import javax.swing.JFrame; import javax.swing.JPanel;/* * Swing是在AWT基础上的扩展 * javax.swing包及其扩展包,组件的命名多以J开关 * * JFrame组件 */ public class ...

    JFrame组件

    import java.awt.Color;
    
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    /*
     * Swing是在AWT基础上的扩展
     * javax.swing包及其扩展包,组件的命名多以J开关
     * 
     * JFrame组件
     */
    public class Test08 {
        public static void main(String[] args) {
            JFrame frame=new JFrame("我的窗体");
            frame.setSize(200,200);
            frame.setLocationRelativeTo(null);
            //frame.getLayeredPane().setBackground(Color.red);
            frame.setBackground(Color.blue);
            JPanel pnl=(JPanel) frame.getContentPane();
            pnl.setOpaque(false);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }
    }
    

    JButton组件

    import java.awt.FlowLayout;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    
    /*
     * JButton组件
     */
    public class Test09 extends JFrame {
    
        public Test09(String title){
            super(title);
            init();
        }
    
        public void init(){
            JButton btn1=new JButton("按钮1");
            JButton btn2=new JButton("按钮2");
            JButton btn3=new JButton("按钮3");
            add(btn1);
            add(btn2);
            add(btn3);
            setSize(200,200);
            setLocationRelativeTo(null);
            setLayout(new FlowLayout());
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            //setExtendedState(MAXIMIZED_BOTH);//最大化窗体
            setResizable(false); //禁止改变窗体大小
            setVisible(true);
        }
    
        public static void main(String[] args) {
            new Test09("我的窗体");
        }
    }

    JLabel组件

    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    
    /*
     * JLabel组件
     */
    public class Test10 {
        public static void main(String[] args) {
            JFrame frame=new JFrame("我的窗体");
            JLabel lbl=new JLabel("你是我的小呀小苹果");
            JButton btn1=new JButton("按钮1");
            JButton btn2=new JButton("按钮2");
            JButton btn3=new JButton("按钮3");
    
            frame.setLayout(null);
            frame.setSize(300,300);
            frame.setLocationRelativeTo(null);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            frame.add(lbl);
            frame.add(btn1);
            frame.add(btn2);
            frame.add(btn3);
            lbl.setBounds(3, 5, 200, 30);
            btn1.setBounds(20, 30, 80, 30);
            btn2.setBounds(60, 60, 80, 30);
            btn3.setBounds(100, 100, 80, 30);
    
            frame.setVisible(true);
        }
    }

    JMenuBar JMenu JMenuItem

    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JTextArea;
    
    /*
     * JMenuBar  JMenu JMenuItem
     */
    public class Test11 {
        public static void main(String[] args) {
            JFrame frame=new JFrame("我的窗体");
            //创建菜单栏
            JMenuBar bar=new JMenuBar();
            //创建菜单
            JMenu menu1=new JMenu("文件");
            JMenu menu2=new JMenu("编辑");
            //创建菜单项
            JMenuItem item1=new JMenuItem("新建");
            JMenuItem item2=new JMenuItem("关闭");
            JMenuItem item3=new JMenuItem("保存");
            JMenuItem item4=new JMenuItem("复制");
            JMenuItem item5=new JMenuItem("粘贴");
            menu1.add(item1);
            menu1.add(item2);
            menu1.add(item3);
            menu2.add(item4);
            menu2.add(item5);
            bar.add(menu1);
            bar.add(menu2);
            frame.add("North",bar);
    
            JTextArea txt=new JTextArea();
            frame.add(txt);
    
            frame.setSize(300,300);
            frame.setLocationRelativeTo(null);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
    
        }
    }

    ImageIcon 设置图标

    import java.awt.Dimension;
    import java.awt.Image;
    import javax.swing.Icon;
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    
    /*
     * 设置图标
     * 相关的类
     * java.awt.Image图像类,抽象类
     * javax.swing.Icon 图标,接口
     * javax.swing.ImageIcon 图标类,实现Icon接口
     */
    public class Test12 {
        public static void main(String[] args) {
            JFrame frame=new JFrame("My Frame");
    
            /*
             * 1.设置窗体图标
             */
            //创建ImageIcon图标
            ImageIcon icon=new ImageIcon("images/qq.jpg");
            //由ImageIcon获得Image
            Image image=icon.getImage();
            //设置窗体的图标
            frame.setIconImage(image);
    
            /*
             * 设置按钮图标
             */
            Icon icon2=new ImageIcon("images/heihei.gif");
            JButton btn=new JButton("点我", icon2);
            btn.setSize(200, 50);
            frame.add("North",btn);
    
            /*
             * 设置JLabel显示图像
             */
            Icon icon3=new ImageIcon("images/dog.jpg");
            JLabel lbl=new JLabel("好可爱的小狗啊", icon3, JLabel.LEFT);
            frame.add(lbl,"South");
    
    
            frame.setSize(300,300);
            frame.setLocationRelativeTo(null);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }
    }

    JTextfied JPasswordField

    import java.awt.Dimension;
    import java.awt.GridLayout;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JPasswordField;
    import javax.swing.JTextField;
    
    /*
     * JTextfied JPasswordField
     * 
     * setSize()和setPreferredSize()
     * 如果使用布局管理器,则setSize()无效,此时可以使用setPreferredSize()
     * 如果未使用布局管理器,则可以使用setSize()
     */
    public class Test13 extends JFrame{
        JPanel[] pnls=new JPanel[3];
    
        public Test13(String title){
            super(title);
            init();
        }
    
        public void init(){
            for(int i=0;i<3;i++){
                pnls[i]=new JPanel();
                add(pnls[i]);
            }
            JLabel lblUsername=new JLabel("用户名:");
            JTextField txtUsername=new JTextField(10);
            txtUsername.setSize(100, 30);
            txtUsername.setPreferredSize(new Dimension(100, 30));
            pnls[0].add(lblUsername);
            pnls[0].add(txtUsername);
    
            JLabel lblPwd=new JLabel("密码:");
            JPasswordField txtPwd=new JPasswordField(10);
            pnls[1].add(lblPwd);
            pnls[1].add(txtPwd);
    
            JButton btnLogin=new JButton("登陆");
            JButton btnCancel=new JButton("取消");
            pnls[2].add(btnLogin);
            pnls[2].add(btnCancel);
    
            //pnls[0].setSize(200,50);
            pnls[0].setPreferredSize(new Dimension(100, 30));
    
    
    
            setLayout(new GridLayout(3, 0));
            setSize(300,200);
            setLocationRelativeTo(null);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setVisible(true);
        }
    
        public static void main(String[] args) {
            new Test13("用户登陆");
        }
    }

    JCheckBox、JRadioButton

    import java.awt.FlowLayout;
    import java.awt.GridLayout;
    import javax.swing.ButtonGroup;
    import javax.swing.JButton;
    import javax.swing.JCheckBox;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JRadioButton;
    
    /*
     * JCheckBox、JRadioButton
     */
    public class Test01 extends JFrame{
        //定义复选框
        JCheckBox hobby1=new JCheckBox("学习JAVA");
        JCheckBox hobby2=new JCheckBox("吃月饼");
        JCheckBox hobby3=new JCheckBox("泡妞",true);
    
        //定义单选按钮
        JRadioButton male=new JRadioButton("男");
        JRadioButton female=new JRadioButton("女", true);
    
        //定义标签
        JLabel lblHobby=new JLabel("您的爱好:");
        JLabel lblSex=new JLabel("您的性别:");
    
        public Test01(String title){
            super(title);
            //将单选按钮添加到同一组中,实现互斥
            ButtonGroup groupSex=new ButtonGroup();
            groupSex.add(male);
            groupSex.add(female);
    
            setLayout(new GridLayout(8, 0));
            add(lblHobby);
            add(hobby1);
            add(hobby2);
            add(hobby3);
            add(lblSex);
            add(male);
            add(female);
    
            JPanel pnl=new JPanel();
            pnl.setLayout(new FlowLayout(FlowLayout.CENTER, 20, 0));
            JButton btnOK=new JButton("确定");
            JButton btnCancel=new JButton("取消");
            pnl.add(btnOK);
            pnl.add(btnCancel);
            add(pnl);
    
            setSize(200, 200);
            setLocationRelativeTo(null);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setVisible(true);
        }
    
        public static void main(String[] args) {
            new Test01("我的窗体");
        }
    }
    

    Swing窗体由不同的层组成

    import java.awt.Color;
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JLayeredPane;
    import javax.swing.JPanel;
    
    /*
     * 设置背景图片
     * 
     * Swing窗体由不同的层组成
     * 由深到浅依次为:RootPane、LayoutPane、ContentPane、MenuBar、GlassPane
     */
    public class Test02 {
        public static void main(String[] args) {
            JFrame frame=new JFrame("我的窗体");
    
            //1.创建背景图片
            ImageIcon bg=new ImageIcon("images/bg.jpg");
            //2.将背景图片放到JLable中
            JLabel lblBg=new JLabel(bg);
            lblBg.setSize(bg.getIconWidth(), bg.getIconHeight());//设置面板的宽和高
            //3.将JLable添加到LayoutPane面板中
            JLayeredPane layoutPane=frame.getLayeredPane();//获取窗体的布局面板
            //将背景Label添加到布局面板中,将放置于布局面板的最底层
            layoutPane.add(lblBg, new Integer(Integer.MIN_VALUE));
            //4.将ContentPane设置为透明,否则背景出不来
            //frame.setBackground(Color.red);
            JPanel pnlContent=(JPanel) frame.getContentPane();//获取窗体的内容面板
            pnlContent.setOpaque(false);//设置为透明
    
            frame.setSize(300, 300);
            frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
            frame.setLocationRelativeTo(null);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }
    }
    

    JTabbedPane选项卡

    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTabbedPane;
    import javax.swing.JTextField;
    
    /*
     * JTabbedPane选项卡
     */
    public class Test03 {
        public static void main(String[] args) {
            JFrame frame=new JFrame("Java API");
            JTabbedPane tab=new JTabbedPane();//创建一个选项卡
            frame.add(tab);
    
            JPanel pnl1=new JPanel();
            JTextField txt1=new JTextField(10);
            JButton btn1=new JButton("按钮1");
            pnl1.add(txt1);
            pnl1.add(btn1);
    
            JPanel pnl2=new JPanel();
            JTextField txt2=new JTextField(10);
            JButton btn2=new JButton("按钮2");
            pnl2.add(txt2);
            pnl2.add(btn2);
    
            JPanel pnl3=new JPanel();
            JTextField txt3=new JTextField(10);
            JButton btn3=new JButton("按钮3");
            pnl3.add(txt3);
            pnl3.add(btn3);
    
            tab.add("目录", pnl1);
            tab.add("索引", pnl2);
            //tab.add("搜索", pnl3);
            tab.addTab("搜索", pnl3);
    
            frame.setSize(300, 300);
            frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
            frame.setLocationRelativeTo(null);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }
    }

    JTable、JScrollPane、DefaultTableModel

    /*
     * JTable、JScrollPane、DefaultTableModel
     * JOptionPane
     * 
     * JComboBox下拉列表
     * ItemListener监听器
     */
    public class Test04 extends MouseAdapter implements ActionListener{
    
        JFrame frame = new JFrame("学生信息");
        String[] titles = { "姓名", "性别", "年龄", "地址", "爱好" };
        DefaultTableModel dtm=null;
        JTable table=null;
        JLabel lblUsername=new JLabel("用户名:");
        JLabel lblAddress=new JLabel("地址:");
        JTextField txtUsername=new JTextField(10);
        JTextField txtAddress=new JTextField(10);
    
        public static void main(String[] args) {
            Test04 test=new Test04();
            //test.test1();
            test.test3();
        }
    
        public static void test1(){
            JFrame frame = new JFrame("学生信息");
            String[] titles = { "姓名", "性别", "年龄", "地址", "爱好" };
            Object[][] userInfo = { { "赵小涛", "男", 20, "南京", "女人" },
                    { "赵中涛", "男", 20, "南京", "男人" }, { "赵大涛", "男", 20, "南京", "人妖" } };
            //创建JTable用来显示或编辑二维表数据
            JTable table = new JTable(userInfo, titles);
            // 创建JScrollPane视图,用来封装显示JTable中的数据
            JScrollPane scrollpane = new JScrollPane(table,
                    JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                    JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); //为表格添加滚动条
    
            frame.add(scrollpane);
            frame.setSize(300, 300);
            frame.setLocationRelativeTo(null);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }
    
        //使用DefaultTableModel动态更新数据
        public void test2(){
            JFrame frame = new JFrame("学生信息");
            Object[][] userInfo = { { "赵小涛", "男", 20, "南京", "女人" },
                    { "赵中涛", "男", 20, "南京", "男人" }, { "赵大涛", "男", 20, "南京", "人妖" } };
            //创建DefaultTableModel,用来存储JTable中的数据
            dtm=new DefaultTableModel(userInfo, titles);
            JTable table = new JTable(dtm);
            JScrollPane scrollpane = new JScrollPane(table);
    
            JButton btnChange=new JButton("变");
            btnChange.addActionListener(this);
    
            frame.add("South",btnChange);
            frame.add(scrollpane);
            frame.setSize(300, 300);
            frame.setLocationRelativeTo(null);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }
    
    
        //获取选中的记录
        public void test3(){
            Object[][] userInfo = { { "赵小涛", "男", 20, "南京", "女人" },
                    { "赵中涛", "男", 20, "南京", "男人" }, { "赵大涛", "男", 20, "南京", "人妖" } };
            //创建DefaultTableModel,用来存储JTable中的数据
            dtm=new DefaultTableModel(userInfo, titles);
            table = new JTable(dtm);
            JScrollPane scrollpane = new JScrollPane(table);
    
            JButton btnChange=new JButton("变");
            JButton btnDelete=new JButton("删除");
            JPanel pnlSouth=new JPanel();
            pnlSouth.setLayout(new FlowLayout(FlowLayout.CENTER, 20, 0));
            pnlSouth.add(btnChange);
            pnlSouth.add(btnDelete);
    
            //绑定事件
            btnChange.addActionListener(this);
            btnDelete.addActionListener(new ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    int choice=JOptionPane.showConfirmDialog(frame, "确定要删除吗?", "提示", JOptionPane.OK_CANCEL_OPTION);
                    if(choice==0){  //0表示确定
                        System.out.println("执行删除操作");
                    }
                }
            });
    
            JPanel pnlUserInfo=new JPanel();
            pnlUserInfo.setLayout(new GridLayout(2, 2));
    
            txtUsername.setEnabled(false);
            txtAddress.setEnabled(false);
            pnlUserInfo.add(lblUsername);
            pnlUserInfo.add(txtUsername);
            pnlUserInfo.add(lblAddress);
            pnlUserInfo.add(txtAddress);
    
    
            //为JTable绑定事件
            table.addMouseListener(this);
    
            frame.add("North",pnlUserInfo);
            frame.add("Center",scrollpane);
            frame.add("South",pnlSouth);
            frame.setSize(300, 300);
            frame.setLocationRelativeTo(null);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }
        //点击按钮更新表格中的数据
        @Override
        public void actionPerformed(ActionEvent e) {
            Object[][] userInfo2 = { { "tom", "男", 20, "南京", "女人" },
                    { "jack", "男", 20, "南京", "男人" }};
            dtm.setDataVector(userInfo2, titles);
        }
    
        //将当前选中行的记录显示在文本框中
        @Override
        public void mouseClicked(MouseEvent e) {
            int row=table.getSelectedRow();
            String username=(String) table.getValueAt(row, 0);
            String address=(String) table.getValueAt(row, 3);
            txtUsername.setText(username);
            txtAddress.setText(address);
        }
    }
    展开全文
  • JAVA/JSP上传组件 本人只有这个水准,会的请指点,不会的,可以拿源码大概的要求:单独负责上传的类,只用iframe调用其它的类不用调用上传预览单个文件上传与多个文件都支付多个文件上传需要在iframe父级页面传参,也...

    JAVA/JSP上传组件

     

    本人只有这个水准,会的请指点,不会的,可以拿源码

    大概的要求:

    1. 单独负责上传的类,只用iframe调用其它的类不用调用
    2. 上传预览
    3. 单个文件上传与多个文件都支付
    4. 多个文件上传需要在iframe父级页面传参,也就是开关鸟
    5. 预览时可以删除原文件和预览的(多个文件)某个节点
    6. 文件类型的在iframe定义
    7. 禁止用session
    8. 上传的进度条
    9. IE6加强型  + 火狐加强里

     什么叫加强?

    呵呵 ,,,,就是ie6起码,78当然同样啦

     

    用到的jar

    fileupload1.2.1.jar

    算了,不说了,也就是struts2包括的jar就行了

    我用到hibernate,不用就需要改struts.xml的package的action的class

     

     

     

     

    展开全文
  • Google 在 API 14 开始才新增了Switch 控件。 因此,我们可以选择自己封装一个Switch 。...[java] view plaincopy public class SwitchView extends LinearLayout {   private Im
  • 10天轻松学习javase第8天上,Java gui 图形界面编程之常用组件 基本组件 1 JLabel标签 2 JButton 按钮 3 JRadioButton 单选按钮 4 JCheckBox 复选框 5 JToggleButton 开关按钮 6 ...
  • 这是一个聊天页面,我又把组件还原到1.1.0版本了,刷新中的状态目前只能通过设置style为none来隐藏。{this.state.messages.length > 0 && this.state.messages.map((message,key) => {if (message._...
  • 介绍控件 文本框TextView 编辑框EditText ... 单选按钮RadioButton ...开关按钮ToggleButton 下拉列表Spinner 实例: 注册页面 /Chapter04_UI_CommonWidget/src/com/amaker/test/MainActivity.java ...
  • 一台计算机是由以下几个主要的硬件组件构成的中央处理器CPU内存磁盘输入设备输出设备通信设备计算机就是一系列的电路开关。每个开关存在两种状态:关和开。简单地说计算机把0当做关,1当做开。计算机中字节(byte)是...
  • Java个人笔记(一)

    2021-02-04 13:18:05
    Java第一章第一章第一节计算机基础Java、JDK、IDE 第一章 第一节 计算机基础 计算机包括硬件和软件两部分,软件也叫做程序。软件包含了指令,告诉计算机做什么。 一台计算机是由以下几个主要的硬件组件构成的. 中央...
  • Java程序员面试宝典pdf

    热门讨论 2013-02-21 13:06:13
    面试题061 如何使用文本输入组件 97 面试题062 如何捕获事件 98 6.2 布局控制 100 面试题063 如何使用BorderLayout布局 100 面试题064 如何使用FlowLayout布局 102 面试题065 如何使用GridLayout布局 103 6.3 事件...
  • java初学者必看

    热门讨论 2012-02-24 16:07:34
    4.2.6 开关语句 4.3 循环语句 4.3.1 while循环结构 4.3.2 do-while 循环结构 4.3.3 for循环结构 4.3.4 循环的嵌套 4.4 转向语句 4.4.1 break中断语句 4.4.2 continue条件继续语句 4.4.3 标签语句 4.5 返回...
  • @EnableDubbo、@EnableWebMvc来作为此组件开关。 其实现原理也很简单,springboot模拟了Java的spi机制,实现了自己的spi机制,以达到组件之间的解耦效果。第三方只需要在组件资源的根目录下添加META-INF文...
  • Java课程设计1-2

    2020-05-12 11:13:18
    一、文本域 ...3.事实上,该组件类似于具有开关选项的按钮。 三、单选框 1.程序界面给用户提供多个选项,但是只允许用户选中其中一个,这就是单选框的概念。 2.单选框从复选框衍生而来的,也采用Ch
  • Java微服务架构163课

    2019-12-26 15:29:59
    089 Dubbo 组件角色 090 Zookeeper 简介 091 Zookeeper 应用举例 092 Zookeeper 集群模式 093 Dubbo Admin 管理控制台 094 系统后台管理-修改所需依赖 095 服务提供者 096 服务消费者 097 测试 JRebel 热...
  • 面试题061 如何使用文本输入组件 97 面试题062 如何捕获事件 98 6.2 布局控制 100 面试题063 如何使用BorderLayout布局 100 面试题064 如何使用FlowLayout布局 102 面试题065 如何使用GridLayout布局 103 6.3 ...
  • 界面设计过程、设计上的创意及组件的布局策略。j整体上以长宽分别为800,620像素大小建立主窗口;k在左上角建立一个music按键用于开关音乐播放;l建立两个文本框放在中上的位置,设置为不可编辑,且字号为25,隶书,...
  • 可以提供一个选项来开关这个功能。 <pre><code>php class prism_js { public $languages = array(); public $languages_all = array( "markup" => "Markup", "css" &#...
  • OpenTUNG基本上是用Java编写的“ The Ultimate Nerd Game”的WIP克隆。 由@Ecconia发起并维护 公里标记 到达: OpenTUNG导入.tungboard文件。 OpenTUNG显示已加载的TUNGBoard的所有内容。 OpenTUNG可以模拟整个...
  • ToggleButton(开关button)是Android系统中比較简单的一个组件,是一个具有选中和未选择状态双状态的button。而且须要为不同的状态设置不同的显示文本。ToggleButton经常使用的XML属性属性名称描写叙述android:...
  • 下面介绍了几个简单的组件 AutoCompleteTextView 自动完成输入框 AutoLink 自动链接 ImageButton 图片按钮 ToggleButton 开关按钮 CheckBox 复选框 RadioButton 单选按钮 RadioGroup 控制单选 java...
  • // 开关2用于记录符号键的次数,如果 k2>1 说明进行的是 2+3-9+8 这样的多符号运算 int k2 = 1; // 开关3用于标识 str1 是否可以被清0 ,等于1时可以,不等于1时不能被清0 int k3 = 1; // 开关4用于标识 str2 ...
  • 而这些 annotation 的生效, 则依赖于 spring 的一些开关, 例如 以及 ImportAware 等等 假如我直接将整个 client jar 包的类做 ark 导出处理, 例如我在 export 配种配置 package 为 com.test.configcenter.client.* ...
  • 089 Dubbo 组件角色 090 Zookeeper 简介 091 Zookeeper 应用举例 092 Zookeeper 集群模式 093 Dubbo Admin 管理控制台 094 系统后台管理-修改所需依赖 095 服务提供者 096 服务消费者 097 测试 JRebel 热部署 098 ...
  • Netbeans 5.5

    2007-03-17 17:47:00
    1:Apache Geronimo 输入组件 本地化包项目 2:进程追踪 Ctrl-Shift-F 监视应用程序的运行时行为 紫色:线程正在调用 Thread....3:JavaServer Faces 1.1 和1.2 技术文本字段 基于Java ME的应用调整启动IDE 的JVM开关 

空空如也

空空如也

1 2 3 4 5 6
收藏数 110
精华内容 44
关键字:

java开关组件

java 订阅