前言:通过一个简单实例来实现Java的GUI编程,对于新手较为友好,且有一定的实用性,正在学习Java的同学看过来!!包教包会,如有疑问欢迎私信询问!
目录
实例展示
一、GUI编程基本概念
二、布局方式
三、构建流程
1、编写一个Windows类
2、功能选择
3、 窗口的构造方法及初始化
3、init()方法的实现
1、布局方式
2、控件初始化
3、设置布局
4、设置监听器
5、实现监听器:
6、图片文件的选择和插入
四、完整源码
实例展示
一、GUI编程基本概念
GUI,即图形用户界面,可以更好的实现用户与软件的交互,而不是单纯的黑色输出界面。既增强了软件的美观性,同时也便于操作。而实现Java的可视化窗口,一般需要导入Swing和AWT两个包来实现,里面包含丰富的相关方法来设置相关控件的属性等。
import javax.swing.*;import java.awt.*;
二、布局方式
本实例采用Box盒子布局,即将每个组件按照一定顺序和规律进行放置,再进行嵌套!
即把按钮、复选框、菜单、文本域等组件装在一个box里,再将有序的box放置在一个BigBox大盒子里,而最大的则是底层容器!再把BigBox添加进容器即可!
三、构建流程
1、编写一个Windows类
该Wiondow类为static,且实现了监听器,首先对所需的控件进行初始化!
2、功能选择
ColorChoice:颜色选择复选框CharacterChoice:字体大小选择复选框Fomat:字体样式选择复选框ShowArea:文本域Box:盒子布局的盒子fileChooser:文件选择器B_Imge:选择图片按钮3、 窗口的构造方法及初始化
构造方法,即创建实例后自动运行的一个方法,将窗体初始化方法以及窗体基本性质的设定写在构造方法里。
init()方法实现窗口功能设置窗口位置、大小设置窗口名称(默认左上角)设置窗口关闭时的方法(默认无操作)设置窗口为可见3、init()方法的实现
1、布局方式
将起始几个盒子设置为水平布局方式,即添加的控件为水平分布
设置两个盒子为垂直分布,即把三个小box按从上到下的顺序排布
2、控件初始化
即实例化控件并初始化:(部分代码)
3、设置布局
即将控件一个个放进对应的盒子中,有序排放:
tips:还需注意间隔,因此Box.createHorizontalStrut()即添加平行距离且为10个像素?
有时是添加垂直距离Box.createVerticalStrut()
4、设置监听器
为控件设置对应的监听器,即选择不同的样式会有什么结果:
5、实现监听器:
监听器的实现才是最为关键的部分,通过获取监听源的数据来作出相应的反应,可以简单的用switch语句实现:(更改文本域字体颜色)
6、图片文件的选择和插入
通过Java内置的FileChooser文件选择器,打开一个文件选择窗口来进行文件的选择,并设定为只有Png格式的图片才能插入!
点击文件选择按钮,触发监听器打开文件选择窗口选择文件,且扩展名必须为.Png(可更改)如果以选择好图片文件,将其添到一个JLable标签内将该标签添加到BigBox中即可其实我尝试过很多设法将图片可以插入文本域内,但是都失败了,只能退而求其次插入到文本域后!
四、完整源码
package FileTree_Test;import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.File;public class GUITest_1 { public static void main(String[] args) { new Window2() ; } static class Window2 extends JFrame implements ActionListener { private JComboBox<String> ColourChoice, CharacterSize,Format; private JTextArea ShowArea; private JLabel tag2, tag3, tag4; private Box box2, box3, boxAll,box4, BigBox; JFileChooser fileChooser ; JButton B_Imge; public Window2() { init(); setBounds(400, 400, 360, 350); setVisible(true); setTitle("WPS简化版"); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); setResizable(true); } void init() { box2 = Box.createHorizontalBox(); box3 = Box.createHorizontalBox(); box4=Box.createHorizontalBox(); boxAll = Box.createVerticalBox(); BigBox = Box.createVerticalBox(); setLayout(new FlowLayout()); tag2 = new JLabel("颜色选择"); tag3 = new JLabel("字体大小"); tag4=new JLabel("字体格式"); Format = new JComboBox(); ShowArea = new JTextArea(15,15); ColourChoice = new JComboBox<String>(); ColourChoice.addItem("红色"); ColourChoice.addItem("蓝色"); ColourChoice.addItem("绿色"); CharacterSize = new JComboBox<String>(); CharacterSize.addItem("三号"); CharacterSize.addItem("四号"); CharacterSize.addItem("五号"); Format=new JComboBox<String>(); Format.addItem("华文行楷"); Format.addItem("幼圆"); Format.addItem("仿宋"); B_Imge=new JButton("选择图片"); fileChooser=new JFileChooser(); box2.add(tag2); box2.add(ColourChoice); box3.add(tag3); box3.add(CharacterSize); box4.add(tag4) ; box4.add(Format); box4.add(Box.createHorizontalStrut(10)); box4.add(B_Imge); boxAll.add(Box.createVerticalStrut(10)); boxAll.add(box2); boxAll.add(Box.createVerticalStrut(10)); boxAll.add(box3); boxAll.add(Box.createVerticalStrut(10)); boxAll.add(box4); BigBox.add(boxAll); BigBox.add(Box.createVerticalStrut(10)); BigBox.add(ShowArea); add(BigBox); ColourChoice.addActionListener(this); CharacterSize.addActionListener(this); Format.addActionListener(this); B_Imge.addActionListener(this); } @Override public void actionPerformed(ActionEvent e) { int x = ColourChoice.getSelectedIndex(); switch (x) { case 0: ShowArea.setForeground(Color.RED); break; case 1: ShowArea.setForeground(Color.blue); break; case 2: ShowArea.setForeground(Color.green); break; default:ShowArea.setForeground(Color.BLACK); } int y=CharacterSize.getSelectedIndex(); int Size; switch (y) { case 0: Size=25;break; case 1: Size=20;break; case 2: Size=15;break; default: Size=10 ;break; } int z = Format.getSelectedIndex(); switch (z) { case 0: ShowArea.setFont(new Font("华文行楷",Font.PLAIN,Size)); break; case 1: ShowArea.setFont(new Font("幼圆",Font.PLAIN,Size)); break; case 2: ShowArea.setFont(new Font("仿宋",Font.PLAIN,Size)); break; default:ShowArea.setFont(new Font("宋体",Font.CENTER_BASELINE,Size)); } if(e.getSource()==B_Imge){ JFileChooser fileChooser=new JFileChooser(); fileChooser.showOpenDialog(null); File Imgefile=new File(fileChooser.getSelectedFile().getPath()); JLabel JL=new JLabel(new ImageIcon(Imgefile.getPath())); if(Imgefile.getName().endsWith(".png")&&Imgefile!=null){ System.out.println("Insert"); BigBox.add(JL); } else System.out.println("False"); } } }}
发文不易,恳请大佬们高抬贵手!
点赞:随手点赞是种美德,是大佬们对于本人创作的认可!
评论:往来无白丁,是你我交流的的开始!
收藏:愿君多采撷,是大佬们对在下的赞赏!