版权声明:本文为博主原创文章,未经博主允许不得转载 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