赞
踩
GUI就是图形用户界面,是基于图形的界面,windows就是一个图形用户界面的操作系统,而DOS是基于命令提示符的操作系统,GUI编程就是编出一个图形用户界面的软件.
组件:
GUI的两个核心编程技术:Swing AWT
所以,没有流行起来。
为什么要学习?
AWT是底层,Swing是封装的
1)包含了很多类和接口,用于GUI(图形用户界面)编程
2)元素:窗口、按钮、文本框
3)java.awt
package com.song.lesson01; import java.awt.*; //GUI的第一个界面 public class TestFrame { public static void main(String[] args) { //Frame JDK 看源码 Frame frame = new Frame("我的第一个Java图像界面窗口"); //需要设置可见性 frame.setVisible(true); //设置窗口大小 frame.setSize(400,400); //设置背景颜色 Color //frame.setBackground(Color.black);//直接用 frame.setBackground(new Color(85,150,68));//自己new一个,设置RGB的值 //弹出的初始位置 frame.setLocation(200,200);//屏幕坐标(0,0)点,在左上角 //设置大小固定 frame.setResizable(false);//不能改变 } }
运行结果图:
尝试封装:
package com.song.lesson01; import java.awt.*; public class TestFrame2 { public static void main(String[] args) { //展示多个窗口 //做一个封装继承 MyFrame myFrame01 = new MyFrame(100, 100, 200, 200, Color.blue); MyFrame myFrame02 = new MyFrame(300, 100, 200, 200, Color.yellow); MyFrame myFrame03 = new MyFrame(100, 300, 200, 200, Color.pink); MyFrame myFrame04 = new MyFrame(300, 300, 200, 200, Color.green); } } class MyFrame extends Frame { static int id = 0;//可能存在多个窗口,需要一个计数器区分title public MyFrame(int x, int y, int w, int h, Color color) { super("MyFrame" + (++id));//调用父类构造器 //需要设置可见性 setVisible(true);//继承,直接调用父类方法即可 //设置窗口大小 setSize(w, h); //弹出的初始位置 setLocation(x, y);//屏幕坐标(0,0)点,在左上角 //setBounds(x,y,w,h);//等价于上面两个,直接设置位置和大小 //设置背景颜色 Color setBackground(color); //设置大小固定 setResizable(false);//不能改变 } }
运行结果:
Frame中加了面板,之后所有组件都在面板中添加
同时,解决了窗口的关闭问题
package com.song.lesson01; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; //面板可以看做一个空间,但是不能单独存在 public class TestPanel { public static void main(String[] args) { Frame frame = new Frame(); //布局的概念 Panel panel = new Panel(); //设置布局 frame.setLayout(null); //坐标、背景 frame.setBounds(300, 300, 500, 500); frame.setBackground(new Color(40, 161, 35)); //panel设置坐标,相对于frame——相对坐标 panel.setBounds(50, 50, 400, 400); panel.setBackground(new Color(157, 115, 24)); //把面板加入到frame中 frame.add(panel); //设置可见性 frame.setVisible(true); //监听事件:监听窗口关闭事件 /*直接new一个WindowListener,需要重写很多方法;故考虑适配器模式,只写需要的方法*/ //适配器模式,只选择需要的方法 frame.addWindowListener(new WindowAdapter() { //点击窗口关闭时要做的事情 @Override public void windowClosing(WindowEvent e) { //结束程序 System.exit(0); } }); } }
运行结果:
package com.song.lesson01; import java.awt.*; public class TestFlowLayout { public static void main(String[] args) { Frame frame = new Frame(); //组件--按钮 Button button1 = new Button("button1"); Button button2 = new Button("button2"); Button button3 = new Button("button3"); //设置为流式布局 //frame.setLayout(new FlowLayout()); frame.setLayout(new FlowLayout(FlowLayout.LEFT)); frame.setSize(200, 200); //把按钮添加上去 frame.add(button1); frame.add(button2); frame.add(button3); frame.setVisible(true); } }
package com.song.lesson01; import java.awt.*; public class TestBorderLayout { public static void main(String[] args) { Frame frame = new Frame(); Button button1 = new Button("East"); Button button2 = new Button("West"); Button button3 = new Button("South"); Button button4 = new Button("North"); Button button5 = new Button("Center"); frame.add(button1, BorderLayout.EAST); frame.add(button2, BorderLayout.WEST); frame.add(button3, BorderLayout.SOUTH); frame.add(button4, BorderLayout.NORTH); frame.add(button5, BorderLayout.CENTER); frame.setSize(200, 200); frame.setVisible(true); } }
package com.song.lesson01; import java.awt.*; public class TestGridLayout { public static void main(String[] args) { Frame frame = new Frame(); Button button1 = new Button("1"); Button button2 = new Button("2"); Button button3 = new Button("3"); Button button4 = new Button("4"); Button button5 = new Button("5"); Button button6 = new Button("6"); frame.setLayout(new GridLayout(3, 2));//3行2列 frame.add(button1); frame.add(button2); frame.add(button3); frame.add(button4); frame.add(button5); frame.add(button6); frame.pack();//Java函数,自动填充 frame.setVisible(true); } }
1.frame
2.4个面板
border
左:button
中:面板
右:button
package com.song.lesson01; import java.awt.*; public class Test { public static void main(String[] args) { //总布局Frame Frame frame = new Frame(); frame.setLayout(new GridLayout(2, 1));//2行1列,分出上下结构 frame.setSize(400, 300); frame.setVisible(true); frame.setBackground(Color.pink); //4个面板 Panel panel1 = new Panel(new BorderLayout());//将上面分为东西南北中,隔出来2边的button Panel panel2 = new Panel(new GridLayout(2, 1));//中间再是2行1列的 Panel panel3 = new Panel(new BorderLayout()); Panel panel4 = new Panel(new GridLayout(2, 2)); //上面 panel1.add(new Button("East-1"), BorderLayout.EAST); panel1.add(new Button("West-1"), BorderLayout.WEST); panel2.add(new Button("p2-btn-1")); panel2.add(new Button("p2-btn-2")); panel1.add(panel2, BorderLayout.CENTER); //下面 panel3.add(new Button("East-2"), BorderLayout.EAST); panel3.add(new Button("West-2"), BorderLayout.WEST); for (int i = 1; i <= 4; i++) { panel4.add(new Button("p4-btn-" + i)); } panel3.add(panel4, BorderLayout.CENTER); frame.add(panel1); frame.add(panel3); } }
1.Frame是一个顶级窗口
2.Panel无法单独显示,必须放在一个容器(Frame)中
3.布局管理器
4.大小、定位、背景颜色、可见性、监听
package com.song.lesson02; import com.sun.javafx.logging.JFRInputEvent; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class TestActionEvent { public static void main(String[] args) { //按下按钮,触发一个事件 Frame frame = new Frame(); Button button = new Button("button"); //因为需要addActionListener()需要一个ActionListener,所以构造一个 MyActionListener myActionListener = new MyActionListener(); button.addActionListener(myActionListener); frame.add(button, BorderLayout.CENTER); frame.pack(); windowClose(frame); frame.setVisible(true); } //关闭窗口的事件 private static void windowClose(Frame frame) { frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); } } class MyActionListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { System.out.println("lalalala"); } }
多个按钮,共享一个事件
package com.song.lesson02; import org.omg.PortableInterceptor.ACTIVE; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class TestActionTwo { public static void main(String[] args) { //两个按钮 实现同一个监听 //开始 停止 Frame frame = new Frame(); Button button1 = new Button("start"); Button button2 = new Button("stop"); button1.setActionCommand("button1-start"); //button2.setActionCommand("button2-stop");//未显示定义时显示默认值stop MyAction myAction = new MyAction(); button1.addActionListener(myAction); button2.addActionListener(myAction); frame.add(button1, BorderLayout.NORTH); frame.add(button2, BorderLayout.SOUTH); frame.setSize(400, 400); frame.setVisible(true); } } class MyAction implements ActionListener { @Override public void actionPerformed(ActionEvent e) { //getActionCommand()获得按钮的信息 System.out.println("按钮被点击了:msg " + e.getActionCommand()); } }
package com.song.lesson02; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class TestText01 { public static void main(String[] args) { //正常main方法中只有一个启动 MyFrame myFrame = new MyFrame(); } } class MyFrame extends Frame { public MyFrame() { TextField textField = new TextField(); add(textField); //监听这个文本框输入的文字 MyActionListener2 myActionListener2 = new MyActionListener2(); //按下Enter,就会触发输入框的事件 textField.addActionListener(myActionListener2); //设置替换显示的编码 textField.setEchoChar('*'); setVisible(true); setSize(400, 400); pack(); } } class MyActionListener2 implements ActionListener { @Override public void actionPerformed(ActionEvent e) { TextField field = (TextField) e.getSource();//获得一些资源,返回给一个对象 System.out.println(field.getText()); ;//获得输入框中的文本 field.setText("");//回车即清空 } }
oop原则:组合,大于继承(优先使用组合)
继承:
class A extends B{ }
组合:
class A{ public B b;}
实现方法:(面向过程)
package com.song.lesson02;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;//简易计算器public class TestCalculator { public static void main(String[] args) { Calculator myFrame2 = new Calculator(); }}//计算器类class Calculator extends Frame { public Calculator() { //3个文本框、1个按钮、1个标签 TextField textField1 = new TextField(10);//字符数,即表示框的大小 TextField textField2 = new TextField(10); TextField textField3 = new TextField(20); Label label = new Label("+"); Button btn = new Button("="); btn.addActionListener(new MyCalculatorListener(textField1, textField2, textField3)); //布局 setLayout(new FlowLayout()); add(textField1); add(label); add(textField2); add(btn); add(textField3); setVisible(true); pack(); }}//监听类class MyCalculatorListener implements ActionListener { //获取三个变量 private TextField num1, num2, num3; public MyCalculatorListener(TextField num1, TextField num2, TextField num3) { this.num1 = num1; this.num2 = num2; this.num3 = num3; } @Override public void actionPerformed(ActionEvent e) { //1.获得加数和被加数 int n1 = Integer.parseInt(num1.getText()); int n2 = Integer.parseInt(num2.getText()); //2.加法运算、放到第三个框 num3.setText("" + (n1 + n2)); //清楚前两个框 num1.setText(""); num2.setText(""); }}
方法改进1:(组合)
package com.song.lesson02; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; //简易计算器 public class TestCalculator { public static void main(String[] args) { new Calculator().loadFrame(); } } //计算器类 class Calculator extends Frame { //属性 TextField num1, num2, num3; //方法 public void loadFrame() { //3个文本框、1个按钮、1个标签 num1 = new TextField(10);//字符数,即表示框的大小 num2 = new TextField(10); num3 = new TextField(20); Label label = new Label("+"); Button btn = new Button("="); btn.addActionListener(new MyCalculatorListener(this));//this就是指Calculator自己 //布局 setLayout(new FlowLayout()); add(num1); add(label); add(num2); add(btn); add(num3); setVisible(true); pack(); } } //监听类 class MyCalculatorListener implements ActionListener { //获取计算器对象,在一个类中组合另一个类 Calculator cal = null; public MyCalculatorListener(Calculator calculator) { this.cal = calculator; } @Override public void actionPerformed(ActionEvent e) { //1.获得加数和被加数 //2.加法运算、放到第三个框 //清楚前两个框 int n1 = Integer.parseInt(cal.num1.getText()); int n2 = Integer.parseInt(cal.num2.getText()); cal.num3.setText("" + (n1 + n2)); cal.num1.setText(""); cal.num2.setText(""); } }
方法改进2:(完全的面向对象——内部类)
package com.song.lesson02;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;//简易计算器public class TestCalculator { public static void main(String[] args) { new Calculator().loadFrame(); }}//计算器类class Calculator extends Frame { //属性 TextField num1, num2, num3; //方法 public void loadFrame() { //3个文本框、1个按钮、1个标签 num1 = new TextField(10);//字符数,即表示框的大小 num2 = new TextField(10); num3 = new TextField(20); Label label = new Label("+"); Button btn = new Button("="); btn.addActionListener(new MyCalculatorListener());//this就是指Calculator自己 //布局 setLayout(new FlowLayout()); add(num1); add(label); add(num2); add(btn); add(num3); setVisible(true); pack(); } //监听类,设置为内部类 //内部类的最大好处,可以畅通无阻的访问外部类的方法 private class MyCalculatorListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { //1.获得加数和被加数 //2.加法运算、放到第三个框 //清楚前两个框 int n1 = Integer.parseInt(num1.getText()); int n2 = Integer.parseInt(num2.getText()); num3.setText("" + (n1 + n2)); num1.setText(""); num2.setText(""); } }}
package com.song.lesson03; import java.awt.*; public class TestPaint { public static void main(String[] args) { new MyPaint().loadFrame(); } } class MyPaint extends Frame { public void loadFrame() { setBounds(200, 200, 800, 500); setVisible(true); } //画笔 @Override public void paint(Graphics g) { //super.paint(g); //画笔需要有颜色 g.setColor(Color.pink); //画笔需要能画 g.fillOval(100, 100, 100, 100);//实心的圆 g.setColor(Color.green); g.fillRect(150, 200, 200, 200); //画笔用完需要将他还原到最初的颜色 g.setColor(Color.black); } }
目的:实现鼠标画画(点击)
思路:
package com.song.lesson03; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ArrayList; import java.util.Iterator; public class TestMouseListener { public static void main(String[] args) { new MyFrame("画图"); } } //自己的类 class MyFrame extends Frame { //画画需要画笔,需要监听当前鼠标的位置,需要集合来存储这点 //ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。 ArrayList points; public MyFrame(String title) { super(title); setBounds(200, 200, 400, 300); //存储鼠标点击的点 points = new ArrayList<>(); setVisible(true); //鼠标监听器,正对这个窗口 this.addMouseListener(new MyMouseListener()); } @Override public void paint(Graphics g) { //画画,监听鼠标的事件 //使用迭代器,把集合中的所有点画出来 Iterator iterator = points.iterator(); while (iterator.hasNext()) { Point point = (Point) iterator.next(); g.setColor(Color.blue); g.fillOval(point.x, point.y, 10, 10); } } //添加一个点到界面上,画上去 public void addPaint(Point point) { //把点加到存储点的集合中 points.add(point); } //监听器类 //适配器模式 private class MyMouseListener extends MouseAdapter { //鼠标:按下、弹起、释放 @Override public void mousePressed(MouseEvent e) { MyFrame frame = (MyFrame) e.getSource(); //这个我们点击的时候,就会在界面产生一个点 //这个点就是鼠标的点,加到集合中 frame.addPaint(new Point(e.getX(), e.getY())); //每次点击鼠标都要窗口重新画一遍,否则画布上不显示 frame.repaint();//刷新 } } }
//内部类方法 package com.song.lesson03; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class TestWindow { public static void main(String[] args) { new WindowFrame(); } } class WindowFrame extends Frame { public WindowFrame() { setVisible(true); setBounds(100, 100, 300, 300); setBackground(Color.pink); addWindowListener(new MyWindowListener()); } //内部类,方便 class MyWindowListener extends WindowAdapter { @Override public void windowClosing(WindowEvent e) { //setVisible(false);//只是隐藏,不是正常关闭;通过按钮,隐藏当前窗口 System.exit(0);//正常退出 } } }
//匿名内部类package com.song.lesson03;import java.awt.*;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;public class TestWindow { public static void main(String[] args) { new WindowFrame(); }}class WindowFrame extends Frame { public WindowFrame() { setVisible(true); setBounds(100, 100, 300, 300); setBackground(Color.pink); //匿名内部类,更推荐 this.addWindowListener( new WindowAdapter() { //关闭窗口 @Override public void windowClosing(WindowEvent e) { System.out.println("Window closing"); System.exit(0); } //激活窗口 @Override public void windowActivated(WindowEvent e) { Frame frame = (Frame) e.getSource(); frame.setTitle("被激活了"); System.out.println("Window activated"); } } ); }}
package com.song.lesson03; import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; public class TestKeyListener { public static void main(String[] args) { new KeyFrame(); } } class KeyFrame extends Frame{ KeyFrame(){ setBounds(100,100,400,400); setVisible(true); this.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { //键盘按下的键是哪个,当前键盘的码l int keyCode=e.getKeyCode();//不需要记数值,直接用静态属性VK_XXX System.out.println(keyCode); if(keyCode==KeyEvent.VK_UP){ System.out.println("你按下了上键"); } //根据按下的不同操作,可以产生不同的结果 } }); } }
使用Swing都要获得一个容器Container,再把东西放上去;AWT不需要,直接add
Container container=this.getContentPane();
考虑通过构造器或者初始化函数来定义。
package com.song.lesson04; import sun.java2d.loops.Blit; import javax.swing.*; import java.awt.*; public class JFrameDemo { public static void main(String[] args) { //建立一个窗口 new MyFrame().init(); } } class MyFrame extends JFrame{ //init();初始化 public void init(){ this.setVisible(true); this.setBounds(100,100,300,300); //label实际是在容器上,要让容器显式的初始化 //获得一个容器 Container container=this.getContentPane(); container.setBackground(Color.blue); //设置文字 JLabel jLabel = new JLabel("欢迎!"); container.add(jLabel); jLabel.setBackground(Color.PINK); //关闭事件 this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } }
JDialog,默认有关闭事件,无需再写
package com.song.lesson04; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; //主窗口 public class DialogDemo extends JFrame { DialogDemo() { this.setVisible(true); this.setBounds(100, 100, 700, 500); //this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置默认关闭 //JFrame 放东西,容器 Container container = this.getContentPane(); //绝对布局 container.setLayout(null); //按钮 JButton jButton = new JButton("点击弹出一个对话框");//创建 jButton.setBounds(30, 30, 200, 59); //点击按钮的时候弹出弹窗 jButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //弹窗 new MyDialog(); } }); container.add(jButton); } public static void main(String[] args) { new DialogDemo(); } } //弹窗的窗口 class MyDialog extends JDialog { public MyDialog() { this.setVisible(true); this.setBounds(300, 300, 500, 500); Container container = new Container(); container.setLayout(null); container.add(new JLabel("学Java")); //this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } }
new JLable("标签");
1.标签上放一个图标(Icon接口)
package com.song.lesson04; import javax.swing.*; import java.awt.*; public class IconDemo extends JFrame implements Icon { private int width; private int height; //无参构造 public IconDemo() { } //有参构造 public IconDemo(int width, int height) { this.height = height; this.width = width; } public void init() { IconDemo iconDemo = new IconDemo(15, 15); //图标可以放在标签上,也可以放在按钮上 JLabel label = new JLabel("icontest", iconDemo, SwingConstants.CENTER); Container container = getContentPane();//注意!! container.add(label);//lable要加到容器中 this.setVisible(true); this.setBounds(100, 100, 400, 400); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new IconDemo().init(); } @Override public void paintIcon(Component c, Graphics g, int x, int y) { g.fillOval(x, y, width, height); } @Override public int getIconWidth() { return this.width; } @Override public int getIconHeight() { return this.height; } }
2.标签上放一个图片(ImageIcon类)
package com.song.lesson04; import javax.swing.*; import java.awt.*; import java.net.URL; public class ImageIconDemo extends JFrame { public ImageIconDemo() { //获取图片地址 JLabel label = new JLabel("ImageIcon"); //获取当前IamgeIconDemo这个类的同级资源,返回一个地址URL。尽量不要写死!!! URL url = ImageIconDemo.class.getResource("test.jpg"); ImageIcon imageIcon = new ImageIcon(url);//注意是ImageIcon类,不要命名冲突 label.setIcon(imageIcon);//设置图片标签 label.setHorizontalAlignment(SwingConstants.CENTER);//图片居中 Container container = getContentPane(); container.add(label); setVisible(true); setBounds(100, 100, 500, 500); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new ImageIconDemo(); } }
package com.song.lesson04; import javax.swing.*; import java.awt.*; public class JPanelDemo extends JFrame { public JPanelDemo(){ Container container=getContentPane(); container.setLayout(new GridLayout(2,1,10,10));//后面的参数10是间距m JPanel panle=new JPanel(new GridLayout(1,3)); panle.add(new Button("button 1")); panle.add(new Button("button 2")); panle.add(new Button("button 3")); JPanel panle2=new JPanel(new GridLayout(2,2)); panle2.add(new Button("button 1")); panle2.add(new Button("button 2")); panle2.add(new Button("button 3")); panle2.add(new Button("button 4")); JPanel panle3=new JPanel(new GridLayout(2,1)); panle3.add(new Button("button 1")); panle3.add(new Button("button 2")); container.add(panle); container.add(panle2); container.add(panle3); setVisible(true); setSize(300,300); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new JPanelDemo(); } }
滚动条
package com.song.lesson04; import javax.swing.*; import java.awt.*; public class JScollDemo extends JFrame { //滚动条正常情况下没有,是在超出大小时才有 public JScollDemo() { Container container = getContentPane(); //文本域 JTextArea jTextArea = new JTextArea(20, 50); jTextArea.setText("Welcome!!!!!!!!!!!!!!!"); //Scroll面板 JScrollPane jScrollPane = new JScrollPane(jTextArea); container.add(jScrollPane); this.setVisible(true); this.setBounds(100, 100, 400, 400); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new JScollDemo(); } }
图片按钮
package com.song.lesson04; import javax.swing.*; import java.awt.*; import java.net.URL; public class JButtonDemo01 extends JFrame { public JButtonDemo01() { Container container = getContentPane(); //将一个图片变成图标 URL resource = JButtonDemo01.class.getResource("test.jpg"); Icon icon = new ImageIcon(resource);//把图片变成图标 //把图标放在按钮上 JButton jButton = new JButton("button"); jButton.setIcon(icon); jButton.setToolTipText("图片按钮"); //add container.add(jButton); setVisible(true); setBounds(100,100,300,300); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new JButtonDemo01(); } }
package com.song.lesson04; import javax.swing.*; import java.awt.*; public class JButtonDemo02 extends JFrame{ public JButtonDemo02(){ Container container = this.getContentPane(); //单选框 JRadioButton jRadioButton1 = new JRadioButton("button01"); JRadioButton jRadioButton2 = new JRadioButton("button02"); JRadioButton jRadioButton3 = new JRadioButton("button03"); //由于单选框只能选择一个,一般进行分组,一个组中只有一个能选 ButtonGroup group = new ButtonGroup(); group.add(jRadioButton1); group.add(jRadioButton2); group.add(jRadioButton3); //add container.add(jRadioButton1,BorderLayout.CENTER); container.add(jRadioButton2,BorderLayout.NORTH); container.add(jRadioButton3,BorderLayout.SOUTH); this.setVisible(true); this.setBounds(100, 100, 300, 300); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new JButtonDemo02(); } }
package com.song.lesson04; import javax.swing.*; import java.awt.*; public class JButtonDemo03 extends JFrame { public JButtonDemo03() { Container container = this.getContentPane(); //多选框 JCheckBox box01 = new JCheckBox("JCheckBox01"); JCheckBox box02 = new JCheckBox("JCheckBox02"); JCheckBox box03 = new JCheckBox("JCheckBox03"); //add container.add(box01, BorderLayout.CENTER); container.add(box02, BorderLayout.NORTH); container.add(box03, BorderLayout.SOUTH); this.setVisible(true); this.setBounds(100, 100, 300, 300); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new JButtonDemo03(); } }
package com.song.lesson05; import javax.swing.*; import java.awt.*; public class ComboboxDemo01 extends JFrame { public ComboboxDemo01() { Container container = this.getContentPane(); JComboBox status = new JComboBox(); status.addItem(null); status.addItem("正在热映"); status.addItem("已下架"); status.addItem("即将上映"); //status.addActionListener();获取选择的内容 container.add(status); this.setVisible(true); this.setBounds(100, 100, 300, 300); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new ComboboxDemo01(); } }
package com.song.lesson05; import javax.swing.*; import java.awt.*; import java.util.List; import java.util.Vector; public class ComboboxDemo02 extends JFrame { public ComboboxDemo02() { Container container = this.getContentPane(); //生成列表的内容,可以用数组,静态的,不能动态添加 String[] contents = {"1", "2", "3"}; //列表中需要放入内容 JList jList = new JList(contents); //生成列表的内容,可以用数据结构,动态添加 Vector contents2 = new Vector(); //列表中需要放入内容 JList jList2 = new JList(contents2); contents2.add("1111"); contents2.add("222"); contents2.add("33"); contents2.add("4"); //container.add(jList); container.add(jList2); this.setVisible(true); this.setBounds(100, 100, 300, 300); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new ComboboxDemo02(); } }
应用场景:
package com.song.lesson05; import javax.swing.*; import java.awt.*; import java.util.Vector; public class TestTextDemo01 extends JFrame { public TestTextDemo01() { Container container = this.getContentPane(); JTextField jTextField = new JTextField("Hello"); JTextField jTextField2 = new JTextField("world", 20); container.add(jTextField, BorderLayout.SOUTH); container.add(jTextField2, BorderLayout.NORTH); this.setVisible(true); this.setBounds(100, 100, 300, 300); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new TestTextDemo01(); } }
package com.song.lesson05; import javax.swing.*; import java.awt.*; import java.util.Vector; public class TestTextDemo02 extends JFrame { public TestTextDemo02() { Container container = this.getContentPane(); //为了布局方便,尽量在面板中 JPasswordField jPasswordField = new JPasswordField();//*** jPasswordField.setEchoChar('*'); container.add(jPasswordField); this.setVisible(true); this.setBounds(100, 100, 300, 300); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new TestTextDemo02(); } }
文本域与文本框的最大区别就是文本域允许用户输入多行文本信息。
文本域主要配合面板使用,参考滚动条设置。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。