小问题
之前学过Awt包,继承Frame类的那个窗体,有个很大的问题是,它不行正常的显示中文在控件上,这就很难受。经过学习,我发现Swing窗体是没有这个问题的,当然也可能是我电脑的问题。
Swing&AWT功能
Swing&AWT区别
import javax.swing.*;
public class JFrameTextRun {
public static void main(String[] args) {
new JFrameText();
}
}
class JFrameText extends JFrame{
public JFrameText(){
init();
}
public void init(){
setTitle("啦啦啦窗口标题");
setBounds(500,500,400,300);
// setSize(400,300); //大小 //同上
// setLocation(500,500);//启动方位
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置默认的关闭方式
setVisible(true);//窗口是否可见
}
}
运行结果:
方法 | 说明 |
---|---|
JTextField() | 构造新的文本输入框 |
JTextField(String text) | 构造一个新的文本输入框,以指定文本作为初始文本 |
getColumns() | 返回文本字段中的列数 |
setColumns(int columns) | 设置最多可显示内容的列数 |
setHorizontalAlignment(int value) | 设置文本字段中文本的水平对齐方式:JTextField.LEFT JTextField.CENTER JTextField.RIGHT |
import javax.swing.*;
public class JFrameTextRunA{
public static void main(String[] args) {
new JFrameTextA();
}
}
class JFrameTextA extends JFrame{
public JFrameTextA(){
init();
}
public void init(){
setTitle("啦啦啦窗口标题");
setBounds(500,500,400,300);
// setSize(400,300); //大小 //同上
// setLocation(500,500);//启动方位
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置默认的关闭方式
setVisible(true);//窗口是否可见
setResizable(false);
//------------------------------------------------------------------------
//2、向窗体添加控件
// 2.1、JTextField方法:
JTextField JTF1 = new JTextField();//构造新的文本输入框
JTextField JTF2 = new JTextField("啦啦啦文本输入框",1);//构造一个新的文本输入框,以指定文本作为初始文本
JTextField JTF3 = new JTextField(5);
JTF1.setBounds(20,20,200,50);
JTF2.setBounds(20,80,200,50);
JTF3.setBounds(20,140,200,50);
add(JTF1);
add(JTF2);
JTF3.setColumns(6);
JTF3.setText(String.valueOf(JTF3.getColumns()));//返回文本字段中的列数
JTF3.setColumns(6);
JTF3.setHorizontalAlignment(JTF3.RIGHT);//设置对齐方式
add(JTF3);
}
}
遗留问题:getColumns()
方法 | 说明 |
---|---|
JButton() | 创建不带文本和图标的按钮 |
JButton(Icon icon) | 创建带图标的按钮 |
JButton(String text) | 创建带文本的按钮 |
JButton(String text,Icon icon) | 创建带文本和图标的按钮 |
setRolloverlcon(Icon img) | 当鼠标经过时,显示指定的图标 |
setSelectedlcon(Icon img) | 当选择按钮时,显示img指定的图标 |
import javax.print.attribute.standard.JobName;
import javax.swing.*;
import java.awt.*;
public class TextJButton {
public static void main(String[] args) {
new winFrame();
}
}
class winFrame extends JFrame{
public winFrame(){
init();
}
public void init(){
setTitle("窗口标题");
setBounds(500,300,500,500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setResizable(false);
//创建容器
Container container = this.getContentPane();
container.setLayout(null);//绝对布局
////////////////////////////////////////////////
//创建不带文本和图标的按钮
JButton jButton = new JButton();
// jButton.setText("按钮A");
jButton.setBounds(0,10,200,50);
container.add(jButton);
/////////////////////////////////////////////////
//创建带图标的按钮
JButton jButton1 = new JButton(new ImageIcon(".\\icon\\如何养猪.jpg"));
jButton1.setBounds(0,70,200,200);
container.add(jButton1);
/////////////////////////////////////////////////
//创建带文本的按钮
JButton jButton2 = new JButton("按钮B,因为A没显示,哈哈哈");
jButton2.setBounds(0,280,200,50);
container.add(jButton2);
/////////////////////////////////////////////////
//创建带文本和图标的按钮
JButton jButton3 = new JButton("按钮C"/*当图片不存在时显示*/,
new ImageIcon(".\\icon\\花瓣.png"));
jButton3.setBounds(0,340,300,100);
container.add(jButton3);
//当鼠标经过时,显示指定的图标setRolloverIcon
JButton jButton4 = new JButton();
jButton4.setBounds(210,10,150,200);
jButton4.setRolloverIcon(new ImageIcon(".\\icon\\淋光.jpg"));
jButton4.setSelectedIcon(new ImageIcon(".\\icon\\淋光.jpg"));
container.add(jButton4);
}
}
遗留问题:setRolloverIcon|setSelectedIcon
方法 | 说明 |
---|---|
JCheckBox() | 创建初始非选中的复选框,且不带文本或图标 |
JCheckBox(String text) | 用指定的文本创建初始非选中的复选框 |
JCheckBox(String text,boolean selected) | 用指定文本创建一个复选框,并指定是否初始选中该复选框 |
import javax.swing.*;
import java.awt.*;
public class JCheckBoxText {
public static void main(String[] args) {
new JFrameText1();
}
}
class JFrameText1 extends JFrame {
public JFrameText1(){
init();
}
public void init(){
setTitle("窗口标题");
setVisible(true);
setBounds(500,300,500,500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
Container container=this.getContentPane();
container.setLayout(null);
/////////////////////////////////////////////
//创建初始非选中的复选框,且不带文本或图标
JCheckBox jCheckBox = new JCheckBox();
jCheckBox.setBounds(0,10,50,50);
container.add(jCheckBox);
//////////////////////////////////////////
//用指定的文本创建初始非选中的复选框
JCheckBox jCheckBox1 = new JCheckBox("复选框B");
jCheckBox1.setBounds(0,70,100,50);
container.add(jCheckBox1);
////////////////////////////////////////////
//用指定文本创建一个复选框,并指定是否初始选中该复选框
JCheckBox jCheckBox2 = new JCheckBox("复选框C",true);
jCheckBox2.setBounds(0,130,100,50);
container.add(jCheckBox2);
}
}
方法 | 说明 |
---|---|
JRadioButton | 创建初始非选中的单选按钮,不设置其文本 |
JRadioButton(String text) | 用指定的文本创建非选中的单选按钮 |
JRadioButton(String text,boolean selected) | 用指定的文本和选中状态创建单选按钮 |
import javax.swing.*;
import java.awt.*;
public class JRadioButtonText {
public static void main(String[] args) {
new WindJFrame();
}
}
class WindJFrame extends JFrame {
public WindJFrame(){
init();
}
public void init(){
setTitle("窗口标题");
setVisible(true);
setBounds(500,300,500,500);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container container = this.getContentPane();
container.setLayout(null);
//////////////////////////////////////////
//创建初始非选中的单选按钮,不设置其文本
JRadioButton jRadioButton = new JRadioButton();
jRadioButton.setBounds(0,10,200,100);
container.add(jRadioButton);
//////////////////////////////////////////
//用指定的文本创建非选中的单选按钮
JRadioButton jRadioButton1 = new JRadioButton("单选按钮B");
jRadioButton1.setBounds(0,120,200,100);
container.add(jRadioButton1);
///////////////////////////////////////////
//用指定的文本和选中状态创建单选按钮
JRadioButton jRadioButton2 = new JRadioButton("单选按钮C",true);
jRadioButton2.setBounds(0,230,200,100);
container.add(jRadioButton2);
}
}
方法 | 说明 |
---|---|
JcomboBox() | 创建一个下拉框实例 |
addItem(Object obj) | 将项添加至项的列表 |
getItemAt(int index) | 返回指定索引位置的列表项 |
getItemCount() | 返回列表(作为对象)中的项数 |
getSelectedItem() | 将当前选择的项作为一个对象返回 |
getSelectedIndex() | 返回当前选择项的索引位置 |
import javax.swing.*;
import java.awt.*;
public class JComboBoxText {
public static void main(String[] args) {
new WindowJFrame();
}
}
class WindowJFrame extends JFrame{
JButton jButton;
JTextField jTextField1;
JComboBox jComboBox;
public WindowJFrame(){
init();
}
public void init(){
setTitle("窗口标题");
setVisible(true);
setBounds(500,300,500,500);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container container=this.getContentPane();
container.setLayout(null);//设置绝对布局
//////////////////////////////////////////
//创建一个下拉框实例
//将项添加至项的列表addItem(Object obj)
jComboBox = new JComboBox();
jComboBox.setBounds(0,10,400,30);
jComboBox.addItem(new String("1"));
jComboBox.addItem(new String("2"));
jComboBox.addItem(new String("4"));
container.add(jComboBox);
//返回指定索引位置的列表项getItemAt(int index)
JTextField jTextField = new JTextField(String.valueOf(jComboBox.getItemAt(2)));
jTextField.setBounds(0,80,400,30);
container.add(jTextField);
//返回列表(作为对象)中的项数getItemCount()
jTextField1 = new JTextField(String.valueOf(jComboBox.getItemCount()));
jTextField1.setBounds(0,120,400,30);
container.add(jTextField1);
System.out.println(jComboBox.getSelectedItem());
System.out.println(jComboBox.getSelectedIndex());
}
}
边界布局管理器,将容器划分为5个部分
方法 | 说明 |
---|---|
BorderLayout | 创建新的BorderLayout,组件之间没有间距 |
setHgap(int hgap) | 将组件间的水平间距设置为指定的值 |
setVgap(int vgap) | 将组件间的垂直间距设置为指定的值 |
import javax.swing.*;
import java.awt.*;
public class BorderLayoutText extends JFrame {
private JButton jb1,jb2,jb3,jb4,jb5;
public BorderLayoutText(){
//创建组件
jb1=new JButton("中");
jb2=new JButton("北");
jb3=new JButton("东");
jb4=new JButton("南");
jb5=new JButton("西");
//添加组件
add(jb1, BorderLayout.CENTER);
add(jb2, BorderLayout.NORTH);
add(jb3, BorderLayout.EAST);
add(jb4, BorderLayout.SOUTH);
add(jb5, BorderLayout.WEST);
//设置窗体属性
//窗口标题
setTitle("边界布局案例");
//设置窗体大小
setSize(500,500);
//设置窗体位置
setLocation(500,300);
// setBounds(500,300,500,500);
//设置关闭窗体同时退出JVM
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//显示窗体
setVisible(true);
//窗口是否可以拖放大
setResizable(false);
}
}
class RunText{
public static void main(String[] args) {
new BorderLayoutText();
}
}
流布局是面板的默认布局管理器
方法 | 说明 |
---|---|
FlowLayout() | 构造新的中间对齐的FlowLayout,将垂直和水平间距保留为5个像素 |
setAlignment(int align) | 设置指定布局的对齐方式 |
setHgap(int hgap) | 设置指定布局的水平间距 |
setVgap(int vgap) | 设置指定布局的垂直间距 |
特点:
import javax.swing.*;
import java.awt.*;
public class FlowLayoutText extends JFrame {
public static void main(String[] args) {
new FlowLayoutText();
}
public FlowLayoutText(){
super();
setTitle("流布局管理器测试");
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(500,300,200,200);
Container container = this.getContentPane();//创建容器
container.setLayout(new FlowLayout(/*FlowLayout.LEFT*/));//设置容器布局
//创建组件
final JButton jButton = new JButton("金");
final JButton jButton1 = new JButton("木");
final JButton jButton2 = new JButton("水");
final JButton jButton3 = new JButton("火");
final JButton jButton4 = new JButton("土");
//添加组件
container.add(jButton);
container.add(jButton1);
container.add(jButton2);
container.add(jButton3);
container.add(jButton4);
//设置布局管理器,流式布局默认是中间对齐
//我们要在new FlowLayout(FlowLayout.LEFT)设置,<-此时设置的左对齐
}
}
网格布局特点
方法 | 描述 |
---|---|
GridLayout() | 创建网格布局,默认为每个组件占用一整列和一单行 |
GridLayout(int rows,int cols) | 用指定的行数和列数创建网格布局 |
GridLayout(int rows,int cols,int hgap,int vgap) | 用指定的行数和列数、指定的水平个垂直间距创建网格布局 |
setColumns(int cols) | 将相应的布局中的列数设置为指定值 |
setHgap(int hgap) | 将相应的布局中的水平间距设置为指定值 |
setVgap(int vgap) | 将相应的布局中的垂直间距设置为指定值 |
setRows(int rows) | 将相应布局中的行数设置为指定值 |
import javax.swing.*;
import java.awt.*;
public class GridLayoutText extends JFrame {
int size=9;
private JButton jbs[] = new JButton[size];
public static void main(String[] args) {
new GridLayoutText();
}
public GridLayoutText(){
//创建组件
for (int i = 0; i < size; i++) {
jbs[i] = new JButton(String.valueOf(i));
}
Container container = this.getContentPane();
//设置网格布局管理器,设置3行3列,每个组件间隔水平方向10,垂直方向10个像素
container.setLayout(new GridLayout(3,3,10,10));
//添加组件
for (int i = 0; i < size; i++) {
container.add(jbs[i]);
}
//设置窗体
setTitle("网格布局测试");
setSize(500,500);
setLocation(500,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ActionEventText extends JFrame {
private JLabel label;//标签
public static void main(String[] args) {
new ActionEventText();
}
public ActionEventText(){
super();//调用父类方法,详细功能在面向对象一章博客文档
setTitle("动作事件示例");//标题
setBounds(100,100,500,375);//大小
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭方式
setVisible(true);//窗口是否可见
setResizable(false);//窗口是否可以自由调整大小
//以上代码最后一次备注
///////////////////////////////////////////////////
//添加标签
label = new JLabel("欢迎登录");
// label.setText("欢迎登录");
label.setHorizontalAlignment(JLabel.CENTER);//设置对齐方式
Container container=this.getContentPane();//创建一个容器
container.add(label);
//添加按钮
final JButton jButton = new JButton("登录");
// jButton.setText("登录");
jButton.addActionListener(new ButtonActionText());
container.add(jButton,BorderLayout.SOUTH);
}
//按钮监听器
class ButtonActionText implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
//获得触发此事件的按钮对象
JButton jButton= (JButton) e.getSource();
//获取触发此事件的标签文本
String jButtonName=e.getActionCommand();
if (jButtonName.equals("登录")){
label.setText("您已成功登录");//修改标签提示信息
jButton.setText("退出");//修改按钮提示信息
}else{
label.setText("您已安全退出");
jButton.setText("登录");
}
}
}
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
public class FocusEventText extends JFrame {
private JTextField textField;
public static void main(String[] args) {
FocusEventText focusEventText = new FocusEventText();
}
public FocusEventText(){
setTitle("焦点事件示例");
setBounds(100,100,500,375);
setVisible(true);
getContentPane().setLayout(new FlowLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JLabel jLabel = new JLabel();//创建标签
jLabel.setText("出生日期");
getContentPane().add(jLabel);
textField = new JTextField();
textField.setColumns(10);//设置对多可显示内容的列数
textField.addFocusListener(new TextFocusListener());
getContentPane().add(textField);
final JButton jButton = new JButton();
jButton.setText("确定");
getContentPane().add(jButton);
}
class TextFocusListener implements FocusListener {
@Override
public void focusGained(FocusEvent e) {//获取焦点时做什么
textField.setText("");
}
@Override
public void focusLost(FocusEvent e) {//失去焦点时做什么
textField.setText("2001-01-16");
}
}
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class MouseEventText extends JFrame {
public static void main(String[] args) {
new MouseEventText();
}
public MouseEventText(){
super();//继承父类构造器
setTitle("鼠标事件处理");
setBounds(100,100,500,375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
final JLabel jLabel = new JLabel();//添加标签
jLabel.setText("Hello");
//MouseAdapter适配器 MouseListener
//MouseAdapter适配器实现了MouseListener接口,
// 这样做可以让你不用重写MouseListener接口中所有的方法
//只需要重写你需要的方法。
/**jLabel.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("光标移入组件");
}
});*/
jLabel.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("单击了鼠标按键");
int i=e.getButton();//获取你单击的键,返回一个int值
if (i==MouseEvent.BUTTON1)//1
System.out.println("单击了左键1111");
if (i==MouseEvent.BUTTON2)//2
System.out.println("单击中键2222");
if (i==MouseEvent.BUTTON3)//3
System.out.println("单击右键3333");
int clickCount=e.getClickCount();//获取鼠标单击次数
System.out.println(clickCount);
}
//mousePressed鼠标按键被按下
//可以判断是哪个鼠标按键
@Override
public void mousePressed(MouseEvent e) {
System.out.println("鼠标按键被按下");
int i=e.getButton();//获取你按下的键,返回一个int值
if (i==MouseEvent.BUTTON1)
System.out.println("按下了左键1111");
if (i==MouseEvent.BUTTON2)
System.out.println("按下中键2222");
if (i==MouseEvent.BUTTON3)
System.out.println("按下右键3333");
}
//mouseReleased鼠标按键被按下
//可以判断是哪个鼠标按键
@Override
public void mouseReleased(MouseEvent e) {
System.out.println("鼠标按键被释放");
int i=e.getButton();//获取你释放的键,返回一个int值
if (i==MouseEvent.BUTTON1)//1
System.out.println("释放了左键1111");
if (i==MouseEvent.BUTTON2)//2
System.out.println("释放中键2222");
if (i==MouseEvent.BUTTON3)//3
System.out.println("释放右键3333");
}
//mouseEntered(移入)
//mouseExited(移除)
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("光标移入组件");
}
@Override
public void mouseExited(MouseEvent e) {
System.out.println("光标移出组件");
}
});
getContentPane().add(jLabel, BorderLayout.CENTER);
}
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class KeyEventText extends JFrame {
public static void main(String[] args) {
new KeyEventText();
}
public KeyEventText(){
super();
setTitle("键盘事件示例");
setBounds(100,100,500,375);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container container = this.getContentPane();
final JLabel jLabel = new JLabel();
jLabel.setText("备注:");
container.add(jLabel, BorderLayout.WEST);
final JScrollPane jScrollPane = new JScrollPane();
container.add(jScrollPane, BorderLayout.CENTER);
final JTextArea jTextArea = new JTextArea();
jTextArea.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {//发生键盘事件
System.out.println("此次输入的是“"+e.getKeyChar()+"”");
}
@Override
public void keyPressed(KeyEvent e) {
//getKeyCode获取这个键对应的Code码
String keyText = KeyEvent.getKeyText(e.getKeyCode());
if (e.isActionKey()){//是否是动作键
System.out.println("你按下的是动作键");
}else {
System.out.println("你按下的是非动作键“"+keyText+"”");
//getKeyChar 返回每次敲击的字符,其实看单词就能看出来了
char keyChar = e.getKeyChar();
switch (keyChar){
case KeyEvent.VK_CONTROL:
System.out.println("你按下了Ctrl");
break;
case KeyEvent.VK_SHIFT:
System.out.println("你按下了SHIFT");
break;
case KeyEvent.VK_ALT:
System.out.println("你按下了ALT");
break;
}
}
}
@Override
public void keyReleased(KeyEvent e) {//键盘键被释放
String KeyText = KeyEvent.getKeyText(e.getKeyCode());
System.out.println("你释放的是“"+KeyText+"”键");
System.out.println();
}
});
jTextArea.setLineWrap(true);//设置自动换行
jTextArea.setRows(3);
jTextArea.setColumns(15);
jScrollPane.setViewportView(jTextArea);
}
}
ps:不知道怎么回事,运行出来窗体控件不会显示,得拖动一下窗口边框大小才可以,如果有看到知道怎么回事的朋友,还请回复告诉我一下下,嘻嘻。。