小白的JAVA学习笔记(十三)----布局管理器和Swing组件

版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/qq_41641805/article/details/81840038

一、布局管理器

布局管理器用来控制所关联组件上携带的其他组件,举个例子:框架上带有面板,面板上带有按钮,则框架的布局管理器控制面板的大小和位置,面板的布局管理器控制按钮的大小和位置,按钮由于没有携带其他组件,无需布局管理器。

1、BorderLayout

该管理器将背景组件分成5个区域,每个区域放一个组件。是框架的默认管理器。在java.awt包中。

在东区或西区时,宽度可由自己决定,高度受到布局管理器限制;在南区或北区时,高度可由自己决定,宽度受到布局管理器限制;中间区域就用剩下的空间。

2、FlowLayout

布局组件的流向:依次从左至右,从上至下,组件放不下时会自动换行。是面板的默认管理器。

//Author: ZJQ
//嵌套布局+面板默认FlowLayout
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class Test {
    
	public static void main(String[] args) {
		// TODO Auto-generated method stub
       JFrame frame=new JFrame();
       JPanel panelA=new JPanel();
       JPanel panelB=new JPanel();
       int red=(int)(Math.random()*255);
       int green=(int)(Math.random()*255);
       int blue=(int)(Math.random()*255);
       Color rancolor=new Color(red,green,blue);
       panelA.setBackground(rancolor);
       panelB.add(new JButton("button1"));
       panelB.add(new JButton("button2"));
       panelB.add(new JButton("button3"));
       panelA.add(panelB);
       frame.getContentPane().add(panelA);
       frame.setSize(500,500);
       frame.setVisible(true);
	}

}

3、BoxLayout

 布局组件的流向:垂直排列。不会自动换行。可以调用setLayout()来改变布局管理器。

//Author: ZJQ
//嵌套布局+面板布局管理器变换为BoxLayout
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class Test {
    
	public static void main(String[] args) {
		// TODO Auto-generated method stub
       JFrame frame=new JFrame();
       JPanel panelA=new JPanel();
       JPanel panelB=new JPanel();
       int red=(int)(Math.random()*255);
       int green=(int)(Math.random()*255);
       int blue=(int)(Math.random()*255);
       Color rancolor=new Color(red,green,blue);
       panelA.setBackground(rancolor);
       panelB.add(new JButton("button1"));
       panelB.add(new JButton("button2"));
       panelB.add(new JButton("button3"));
       panelB.setLayout(new BoxLayout(panelB,BoxLayout.Y_AXIS));//管理哪个组件以及使用哪个轴
       panelA.add(panelB);
       frame.getContentPane().add(panelA);
       frame.setSize(500,500);
       frame.setVisible(true);
	}

}

二、Swing组件的操作

1、 JTextField(只有一行文字!)

使用:

  • 取得文本内容:field.getText();
  • 设定文本内容:field.setText();
  • 选取文本内容:field.selectAll();
  • 将焦点拉回文本,方便输入:field.requestFocus();
//Author: ZJQ
//JTextField的使用
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class Test implements ActionListener{
    
	JTextField field=new JTextField("waiting for greeting");//20字宽,只有一行
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        Test t=new Test();
        t.go();
       
	}
	public void go() {
		JFrame frame=new JFrame();
		JButton button=new JButton("click it!");
		button.addActionListener(this);
		frame.getContentPane().add(BorderLayout.SOUTH,button);
		frame.getContentPane().add(BorderLayout.NORTH,field);
		frame.setSize(500,500);
		frame.setVisible(true);
	}
	public void actionPerformed(ActionEvent event) {
		field.setText("hello,i'm field!!");
	}

}

2、JTextArea(可设为多行文字)

使用:

  • 加入文字:test.append()
  • 替换文字:test.setText()
  • 选取内容:test.selectAll()
  • 拉回焦点:test.requestFocus()
  • 只有垂直滚动条(见代码)
//Author: ZJQ
//JTextField的使用
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class Test implements ActionListener{
    
	JTextArea text;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        Test t=new Test();
        t.go();
       
	}
	public void go() {
		JFrame frame=new JFrame();
		text=new JTextArea(10,20);//10行文字,20字宽
		text.setLineWrap(true);//启动自动换行
		JScrollPane scroller=new JScrollPane(text);//将text赋值给创建的JScollPane
		scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
	    //以上两行规定只使用垂直滚动条
		JButton button=new JButton("click it!");
		button.addActionListener(this);
		frame.getContentPane().add(BorderLayout.SOUTH,button);
		frame.getContentPane().add(BorderLayout.NORTH,scroller);//注意是把scroller放在框架里,而非text!
		frame.setSize(500,500);
		frame.setVisible(true);
	}
	public void actionPerformed(ActionEvent event) {
		text.append("i've been clicked!\n");//加一个换行符,否则会粘在一起
	}

}

                                                                                                                                                        BY   ZJQ 

猜你喜欢

转载自blog.csdn.net/qq_41641805/article/details/81840038