首页 > 代码库 > 第三节 Java Swing其它容器

第三节 Java Swing其它容器

第三节:其它容器

Java Swing开发中,窗体部分除了可以使用JFrame表示之外,还有其他几种常见的窗体:JPanelJSplitPanelJTabbedPaneJScrollPaneJdesktopPaneJInternalFrame等,下面就简单介绍几种

 

 

JPanel

 JPanel也是经常使用的容器之一,可以使用JPanel完成各种复杂的界面显示。在JPanel中可以加入人意的组件,之后直接讲JPanel容器加入到JFrame中即可显示。JPanel常用方法如下:

Public JPanel()  //创建一个默认的JPanel对象,使用流布局管理

Public JPanel(LayoutManager Layout)//创建一个指定布局管理器的JPanel对象

 

JPanel的基本使用 

import java.awt.GridLayout;

import java.io.File;

import javax.swing.Icon;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JPasswordField;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import javax.swing.JTextField;

public class JavaSwingTest {

public static void main(String args[]){

test1();

}

 

//设置JPanel

public static void test1(){

JFrame jFrame=new JFrame("Welcome to MichaelLee!");

JPanel panel=new JPanel();//如果不添加布局管理器,则默认为使用流布局管理器 

//JPanel panel=new JPanel(new GridLayout(3, 3));

panel.add(new JLabel("标签-A"));

panel.add(new JLabel("标签-B"));

panel.add(new JLabel("标签-C"));

panel.add(new JButton("按钮A"));

panel.add(new JButton("按钮B"));

panel.add(new JButton("按钮C"));

jFrame.add(panel);

jFrame.setSize(400,300);

jFrame.setLocation(400,300);

jFrame.setVisible(true);

}

从程序的运行结果来看,所有的组件都是采用顺序的形式加入到JPanel中,最后再将JPanel加入到JFrame中,使用JPanel并结合布局管理器可以更加方便的管理组件,可以使用布局管理器对多个JPanel进行排列,而每个JPanel中也可以分别使用不同的布局管理器管理组件,这样就可以对组件进行复杂的排列。

 

 

 

在一般的图形界面中如果显示的区域不够大,可以加入滚动条方便用户浏览,在SwingJScrollPane的主要功能就是为显示的内容加上滚动条,JScrollPane常用方法级常量。

static final int HORIZONTAL_SCROLLBAR_AS_NEEDED//始终显示水平滚动条

static final int HORIZONTAL_SCROLLBAR_AS_NEEDED//任何情况都不显示水平滚动条

static final int HORIZONTAL_SCROLLBAR_NEVER//根据自身需要显示水平滚动条

static final int VERTICAL_SCROLLBAR_ALWAYS//始终显示垂直滚动条

static final int VERTICAL_SCROLLBAR_AS_NEEDE////根据自身需要显示垂直滚动条

static final int VERTICAL_SCROLLBAR_NEVER//任何情况都不显示垂直滚动条

public JSCrollPane(Component view)//将指定的组件加入滚动条,根据大小显示水平或垂直滚动条

 

//设置JScorePane

public static void test2(){

JFrame jFrame=new JFrame("Welcome to MichaelLee!");

String picPath="D:"+File.separator+"孙燕姿.jpg";

Icon icon=new ImageIcon(picPath);

JPanel panel=new JPanel();

JLabel label=new JLabel(icon);

panel.add(label);

JScrollPane scr1=null;

//垂直滚动条始终显示,水平滚动条根据需要显示

scr1=new JScrollPane(panel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

jFrame.add(scr1);

jFrame.setSize(230,200);

jFrame.setLocation(400,300);

jFrame.setVisible(true);

}

由于图片的大小已经超过了容器的本身,所以只显示了部分内容。水平滚动条是根据需要来显示的,而垂直滚动条是始终显示的,可以通过改变窗口的大小来查看效果。

文本组件:

各个软件系统中都存在文本框,以方便用户输入数据,在Swing中也提供了同样的文本框组件:

单行文本框:JTextField

密码文本框:JPasswordField

多行文本框:JTextArea

JTextComponent的常用方法:

Public String getText()//返回文本框的所有内容

Public String getSelectedText()//返回文本框选定的内容

Public int getSelectedStart()//返回文本框选定内容的开始点

Public int getSelectedEnd()//返回文本框选定内容的结束点

Public void setText()//设置此文本框的内容

Public void select(int selectionStart,int selectionEnd)//将指定开始点和结束点之间的内容选定

 

 

 

 

单行输入文本框:

 如果要实现一个单行的输入文本,则可以使用JtextField 

Public JtextField()//构造了一个默认的文本框

Public JtextField(String text)//构造了一个指定文本内容的文本框

Public void setColumns(int columns)//设置显示长度

 

//使用JTextField定义普通单行布局框

public static void test3(){

JFrame frame=new JFrame("Welcome to MichaelLee");

JTextField name=new JTextField(30);

JTextField noed=new JTextField("mldn",10);

JLabel nameLabel=new JLabel("输入用户姓名!");

JLabel noedLabel=new JLabel("不可编辑文本");

noed.setEnabled(false);

name.setColumns(30);

noed.setColumns(10);

frame.setLayout(new GridLayout(2,2));

frame.add(nameLabel);

frame.add(name);

frame.add(noedLabel);

frame.add(noed);

frame.setSize(300,100);

frame.setLocation(300,200);

frame.setVisible(true);

}

从效果来看虽然使用setColumns()设置了显示的行数,但在显示上并没有任何的改变,主要是GridLayout在设置时会忽略这些设置值,让每一个格子具有相同的大小。如果要解决这样的问题,可以使用绝对布局。

//使用绝对定位显示

public static void test4(){

JFrame frame=new JFrame("Welcome to MichaelLee");

JTextField name=new JTextField(30);

JTextField noed=new JTextField("mldn",10);

JLabel nameLabel=new JLabel("输入用户姓名!");

JLabel noedLabel=new JLabel("不可编辑文本");

noed.setEnabled(false);

/*name.setColumns(30);

noed.setColumns(10);*/

nameLabel.setBounds(10,10,100,20);

noedLabel.setBounds(10,30,100,20);

name.setBounds(110,10,80,20);

noed.setBounds(110,30,50,20);

frame.setLayout(null);//这一句很重要,不写这一句程序就不知道是绝对定位

frame.add(nameLabel);

frame.add(name);

frame.add(noedLabel);

frame.add(noed);

frame.setSize(300,100);

frame.setLocation(300,200);

frame.setVisible(true);

}

 

 

密文输入组件:

JTextField是使用明文方式进行显示的,现在需要将回显的内容设置成其他字符,则可以使用JPassWordField

常用方法

Public JPasswordField()//构造默认的JPasswordField对象

Public JPasswordField(String text)//构造指定内容的JPasswordField对象

Public char setEchoChar(char c)//设置回显字符,默认为”*”

Public char getEchoChar()//得到回显字符

Public char[] getPassword()//得到此文本框的所有内容

//设置密文输入组件

public static void test5(){

JFrame frame=new JFrame("Welcome to MichaelLee");

JPasswordField jpf1=new JPasswordField();

JPasswordField jpf2=new JPasswordField();

jpf2.setEchoChar(‘#‘);

JLabel Label1=new JLabel("默认的回显:");

JLabel Label2=new JLabel("回显设置‘#’:");

/*name.setColumns(30);

noed.setColumns(10);*/

Label1.setBounds(10,10,100,20);

Label2.setBounds(10,30,100,20);

jpf1.setBounds(110,10,80,20);

jpf2.setBounds(110,30,80,20);

frame.setLayout(null);//这一句很重要,不写这一句程序就不知道是绝对定位

frame.add(Label1);

frame.add(jpf1);

frame.add(Label2);

frame.add(jpf2);

frame.setSize(300,100);

frame.setLocation(300,200);

frame.setVisible(true);

}

在文本框中输入内容,第一个密文框是默认的字符*,第二个是#

 

 

多行文本输入组件:

 

可以使用JTextArea实现多行文本的输入 

Public JTextArea()//构造文本域,行数和列数为0

Public JTextArea(int rows,int columns)//构造文本域,指定文本域的行数和列数

Public JTextArea(String text,int rows,int columns)//指定构造文本与的内容,行数和列数

Public void append(String str)//向文本域中追加内容

Public void replaceRange(String str,int start,int end)//替换文本与中指定范围内的内容

Public void insert(String str,int pos)//向文本域中指定位置插入内容

Public void setLineWrap(boolean wrap)//是指换行策略

//使用TextArea

public static void test6(){

JFrame frame=new JFrame("Welcome to MichaelLee");

JTextArea jta=new JTextArea(3,10);

JLabel label=new JLabel("多行文本域:");

label.setBounds(10,10,120,20);

jta.setBounds(130,10,150,100);

frame.setLayout(null);

frame.add(label);

frame.add(jta);

frame.setSize(300,150);

frame.setLocation(300,200);

frame.setVisible(true);

}

如果一个文本域过大,则可以在文本域中添加滚动条。

//设置多行文本域,并加入滚动条

public static void test7(){

JFrame frame=new JFrame("Welcome to MichaelLee");

JTextArea jta=new JTextArea(3,20);

//jta.setLineWrap(true);//如果内容过长,自动换行

JScrollPane scr1=null;

//垂直滚动条始终显示,水平滚动条根据需要显示

scr1=new JScrollPane(jta, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

JLabel label=new JLabel("多行文本域:");

frame.setLayout(new GridLayout(2,1));

frame.add(label);

frame.add(scr1);

frame.setSize(300,150);

frame.setLocation(300,200);

frame.setVisible(true);

}