HeadFirstJava学习心得——javaGUI编程
一切都从window开始:
将组建加到window上:
import javax.swing.JButton;
import javax.swing.JFrame;public class GUIDemo01 {public static void main(String[] args) {// 1.创建FrameJFrame frame = new JFrame();// 2.创建widgetJButton button = new JButton("有种就点击我!");// 3.把widget添加到frame上/*组件不会直接加到frame上,你可以把frame想象成window的框,* 组件是加到window的pane上面*/frame.getContentPane().add(button); // 4.显示出来frame.setSize(300, 300);frame.setVisible(true);}}
以上程序的效果:
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
则无论用户怎么点击(除非用taskmgr强制关闭,否则怎么关闭都关不掉,我想有些流氓软件大致就是采用的这种思路吧)。
如果想要知道按钮的事件,就会监听事件的接口
监听:
事件源:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;public class GUIDemo implements ActionListener { //实现ActionListener接口JButton button;public static void main(String[] args) {GUIDemo gui = new GUIDemo();gui.go();}public void go() {JFrame frame = new JFrame();button = new JButton("你有种你就点击我!");button.addActionListener(this); // 向按钮注册frame.getContentPane().add(button);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(640, 320);frame.setVisible(true);}@Overridepublic void actionPerformed(ActionEvent e) {button.setText("我被点击了!");}}
效果图:
import java.awt.BorderLayout;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;public class SimpleGUI implements ActionListener {JFrame frame;JButton button,button2; Label label;public static void main(String[] args) {SimpleGUI gui = new SimpleGUI();gui.go();}private void go() {frame = new JFrame();frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);button = new JButton("按钮一");button2 = new JButton("按钮二");label = new Label("显示相关信息");button.addActionListener(this);//给按钮添加监听器,该类要实现ActionListener接口button2.addActionListener(this);frame.getContentPane().add(BorderLayout.NORTH,button);frame.getContentPane().add(BorderLayout.SOUTH,button2);frame.getContentPane().add(BorderLayout.CENTER,label);frame.setSize(300, 300);frame.setVisible(true);} Overridepublic void actionPerformed(ActionEvent arg0) {if (arg0.getSource()==button) {label.setText("按钮一被点击了!");else {label.setText("按钮二被点击了!");}}}
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">用单一的事件处理程序来对付不同的东西就意味着要执行太多种不同工作的方法。如果想要改变某个工作,很可能会把全部工作都弄乱,这样的解决会对程序的可读性和维护性产生危害。有一点偏离了面向对象。</span>
方式二:使用匿名内部类:
import java.awt.BorderLayout;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;public class SimpleGUI {JFrame frame;Label label;public static void main(String[] args) {SimpleGUI gui = new SimpleGUI();gui.go();}private void go() {frame = new JFrame();frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JButton button = new JButton("按钮一");JButton button2 = new JButton("按钮二");label = new Label("显示相关信息");button.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {label.setText("按钮一被点击了!");}});button2.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {label.setText("按钮二被点击了!");}});frame.getContentPane().add(BorderLayout.NORTH, button);frame.getContentPane().add(BorderLayout.SOUTH, button2);frame.getContentPane().add(BorderLayout.CENTER, label);frame.setSize(300, 300);frame.setVisible(true);}}
布局管理器(LayoutManager)
BorderLayout:
FlowLayout:
import java.awt.FlowLayout;import javax.swing.JButton;
import javax.swing.JFrame;public class SimpleGUI {JFrame frame;public static void main(String[] args) {SimpleGUI gui = new SimpleGUI();gui.go();}private void go() {frame = new JFrame("FlowLayout布局");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setLayout(new FlowLayout(FlowLayout.LEFT)); //流式布局并左对齐JButton []b = new JButton[10];for (int i = 0; i < b.length; i++) {b[i] = new JButton(i+"");frame.getContentPane().add(b[i]);}frame.setVisible(true);}}
运行结果:
import java.awt.BorderLayout;
import java.awt.Color;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;public class SimpleGUI {JFrame frame;public static void main(String[] args) {SimpleGUI gui = new SimpleGUI();gui.go();}private void go() {frame = new JFrame("BorderLayout布局");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JPanel panel = new JPanel();panel.setBackground(Color.BLUE);JButton button1 = new JButton("第一个按钮");JButton button2 = new JButton("第二个按钮");panel.add(button1); //将按钮加入面板panel.add(button2);frame.getContentPane().add(BorderLayout.EAST, panel); //将面板加入到窗体上frame.setSize(300, 300);frame.setVisible(true);}}
运行结果:
BoxLayout:
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;public class SimpleGUI {JFrame frame;public static void main(String[] args) {SimpleGUI gui = new SimpleGUI();gui.go();}private void go() {frame = new JFrame("BoxLayout布局");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Box box = Box.createVerticalBox();JButton []b = new JButton[10];for (int i = 0; i < b.length; i++) {b[i] = new JButton(i+"");box.add(b[i]);}frame.getContentPane().add(box);frame.setVisible(true);}}
运行结果:
为按钮上的文字设置样式(字体、风格、大小)
import javax.swing.JButton;
import javax.swing.JFrame;public class SimpleGUI {JFrame frame;public static void main(String[] args) {SimpleGUI gui = new SimpleGUI();gui.go();}private void go() {frame = new JFrame("BorderLayout布局");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JButton button = new JButton("不悔梦归处,只恨太匆匆");button.setFont(new Font("楷体", Font.BOLD, 20));frame.getContentPane().add(BorderLayout.NORTH, button);frame.setSize(300, 300);frame.setVisible(true);}}
运行结果:
强制使面板使用BoxLayout(默认的面板使用FlowLayout).
import java.awt.BorderLayout;
import java.awt.Color;import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;public class SimpleGUI {JFrame frame;public static void main(String[] args) {SimpleGUI gui = new SimpleGUI();gui.go();}private void go() {frame = new JFrame("BorderLayout布局");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JPanel panel = new JPanel();panel.setBackground(Color.BLUE);panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));//将Panel的布局改为垂直的 JButton button1 = new JButton("第一个按钮");JButton button2 = new JButton("第二个按钮");JButton button3 = new JButton("第三个按钮");JButton button4 = new JButton("第四个按钮");panel.add(button1); //将按钮加入面板panel.add(button2);panel.add(button3);panel.add(button4);frame.getContentPane().add(BorderLayout.EAST, panel); //将面板加入到窗体上frame.setSize(300, 300);frame.setVisible(true);}}
运行结果:
HeadFirstJava学习心得——javaGUI编程相关推荐
- openfoam学习心得——openfoam编程进阶
openfoam学习心得--openfoam编程重新学 1.OpenFOAM编程入门:setRootCase都干了些啥? setRootCase都干了些啥 2.blockMesh > log.b ...
- 计算机编程老鸟的心得,java入门123——一个老鸟java学习心得.docx
java入门123--一个老鸟的java学习心得 学习Java心得体会 学习了一学期的Java课程,觉得是该总结自己的心得体会了.开始学习任何一门课(包括java),兴趣最重要.一直觉得自己在学计算机 ...
- c语言编程基础心得,C语言编程学习心得体会
C语言是在国内外广泛使用的一种计算机语言.其语言功能丰富.表达能力强.使用灵活方便.既具有高级语言的优点,又具有低级语言的许多特点,适合编写系统软件.本文是C语言编程学习心得,希望对大家有帮助. C语 ...
- c语言程序培训,C语言编程培训学习心得
说到C语言学习真的是千言万语,可以说C语言在世界语言排行榜中位居前列,像一些操作系统.驱动软件.多媒体软件.大型游戏. 杀毒软件等等软件操作系统,都是C\C++的特区,对于其他语言来讲真的是望尘莫及. ...
- c语言编程培训心得体会,编程培训个人心得体会 编程学习心得
<编程培训个人心得体会 编程学习心得>由会员分享,可在线阅读,更多相关<编程培训个人心得体会 编程学习心得(4页珍藏版)>请在人人文库网上搜索. 1.编程培训个人心得体会 编程 ...
- 学计算机编程200字感想,计算机学习心得体会
你们现在是在用电脑教学吗?本文是出国留学网特意为你准备的<课堂计算机学习心得体会>,希望对你能够提供帮助,如果还有更多需要了解的,欢迎访问出国留学网主页了解更多.https://www.l ...
- Java EE学习心得
–Java EE学习心得 1. 称为编程专家的秘诀是: 思考-----编程--------思考------编程--.. 编程不能一步到位,不能一上来就编,必须先思考如何写,怎样写?然后再编程 ...
- [转]verilog语法学习心得
verilog语法学习心得 1.数字电路基础知识: 布尔代数.门级电路的内部晶体管结构.组合逻辑电路分析与设计.触发器.时序逻辑电路分析与设计 2.数字系统的构成: 传感器 AD 数字处理器 D ...
- Opne GL ES 学习心得!
好久都更新!接下来将更新自己学习Open GL ES 的学习心得,或者说是笔记. OpenGL ES 1.0使用一个固定的管道,通过它内建的functions来设置诸如灯光.,vertexes(图形的 ...
- Java入门1.2.3—一个老鸟的Java学习心得
Java入门1.2.3-一个老鸟的Java学习心得 基本信息 作者: 臧萌 出版社:清华大学出版社 ISBN:9787302217831 上架时间:2010-3-30 出版日期:2010 年3月 ...
最新文章
- c#调用java开发的webservice_用C#.NET调用Java开发的WebService传递int,double问题
- Oracle 中count(1) 和count(*) 的区别
- 谈大数据里各子项目搭建时的环境变量配置(深入)
- vuescroll使用文档
- 移动平台WEB前端开发技巧汇总
- ContOS网络连接及简单的ssh Xshell连接!
- Oracle学习总结(2)——Oracle数据库设计总结(三大范式)
- “开发者有奖大调查”第二批中奖名单公布,还有更多好礼等你来拿~
- python安装pytesser模块
- 蒙特卡洛方法习题_蒙特卡洛方法
- XRecyclerView+Retrofit+RXjava+Fresco请求网络数据
- 吴文俊应用计算机进行几何定理的证明,吴文俊先生的吴方法怎么用?如何用吴方法证明几何定理?...
- epsfallback_广东移动通过EPS Fallback方式成功完成了5G高清语音和视频呼叫
- 使用jupyter做数据分析与挖掘
- IMF传奇行动第85课:Spark Streaming第四课:基于HDFS的Spark Streaming案例实战和内幕源码解密
- 抖音限流处理方法和封号原因
- python搭建qt开发环境_QT开发环境搭建(Windows)
- Django(10)-模板层的变量和标签
- 咖说 | 揭秘佳士得首次拍卖的区块链艺术品Portraits of a Mind
- TOJ 3498.Differences