实验8 javaFX程序设计.docx
- 文档编号:23197312
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:25
- 大小:223.39KB
实验8 javaFX程序设计.docx
《实验8 javaFX程序设计.docx》由会员分享,可在线阅读,更多相关《实验8 javaFX程序设计.docx(25页珍藏版)》请在冰豆网上搜索。
实验8javaFX程序设计
盛年不重来,一日难再晨。
及时宜自勉,岁月不待人。
山西大学计算机与信息技术学院
实验报告
姓名
苏文杰
学号
201601001026
专业班级
计算机科学与技术三班
课程名称
Java实验
实验日期
2017/12/4
成绩
指导教师
杨陟卓
批改日期
实验名称
实验8JAVAFX程序设计
一、实验目的
掌握常用GUI控制组件及其事件处理。
二、实验内容
1.编程包含一个标签和一个按钮,单击按钮时,标签的内容在“你好”和“再见”之间切换。
分别用本类(该类自身),外部类,内部类,匿名内部类,以及lambda表达式完成。
程序代码:
packagesd8;
importjava.awt.GridLayout;
importjava.awt.event.MouseEvent;
importjava.awt.event.MouseListener;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
publicclassTestextendsJFrameimplementsMouseListener{
privateJLabellabel=newJLabel("你好");
privateJButtonbtn=newJButton("OK");
publicTest(){
setLayout(newGridLayout(2,1));
setBounds(200,200,250,250);
add(label);
add(btn);
btn.addMouseListener(this);
super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
pack();
}
publicstaticvoidmain(String[]args){
newTest();
newThread(()->newTest()).start();
}
publicvoidmouseClicked(MouseEvente){
if(label.getText().equals("你好")){
label.setText("再见");
}else{
label.setText("你好");
}
}
publicvoidmouseEntered(MouseEvente){}
publicvoidmouseExited(MouseEvente){}
publicvoidmousePressed(MouseEvente){}
publicvoidmouseReleased(MouseEvente){}
}
运行结果贴图:
2.编程包含一个文本框和一个文本区域,文本框内容改变时,将文本框中的内容显示在文本区域中;在文本框中按回车键时,清空文本区域的内容。
程序代码:
packagesd2;
importjava.awt.Color;
importjava.awt.GridLayout;
importjava.awt.event.KeyEvent;
importjava.awt.event.KeyListener;
importjavax.swing.JFrame;
importjavax.swing.JPanel;
importjavax.swing.JTextArea;
importjavax.swing.JTextField;
importjavax.swing.border.TitledBorder;
publicclassShowTextextendsJFrame{
privatestaticfinallongserialVersionUID=1L;
privateJTextFieldtext1;
privateJTextAreatext2;
publicShowText(){
super("TetxShow");
JPanelp1=newJPanel();
p1.setBackground(Color.WHITE);
p1.setBorder(newTitledBorder("文本框"));
text1=newJTextField(10);
text1.addKeyListener(newTextListener());
p1.add(text1);
JPanelp2=newJPanel();
p2.setBackground(Color.WHITE);
p2.setBorder(newTitledBorder("文本区域"));
text2=newJTextArea("原文本",10,10);
text2.setLineWrap(true);
text2.setEditable(false);
p2.add(text2);
setLayout(newGridLayout(2,1,0,5));
add(p1);
add(p2);
setSize(200,200);
setVisible(true);
this.setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
privateclassTextListenerimplementsKeyListener{
publicvoidkeyPressed(KeyEvente){}
publicvoidkeyReleased(KeyEvente){
if(e.getKeyChar()!
=KeyEvent.VK_ENTER)
text2.setText(text1.getText());
}
publicvoidkeyTyped(KeyEvente){
if(e.getKeyChar()==KeyEvent.VK_ENTER)
text2.setText(null);
}
}
publicstaticvoidmain(String[]args){JFrameframe=newShowText();
}
}
运行结果贴图:
3.编程包含一个复选按钮和一个普通按钮,复选按钮选中时,普通按钮的背景色为青色,未选中时为灰色。
程序代码:
packagesd3;
importjava.awt.Color;
importjava.awt.GridLayout;
importjava.awt.event.ItemEvent;
importjava.awt.event.ItemListener;
importjavax.swing.JButton;
importjavax.swing.JCheckBox;
importjavax.swing.JFrame;
importjavax.swing.JPanel;
publicclassChangeButtonColorextendsJFrame{
privatestaticfinallongserialVersionUID=1L;
privateJButtonbutton;
privateJCheckBoxcheckBox;
publicChangeButtonColor(){
super("改变按钮颜色");
JPanelp1=newJPanel();
p1.setBackground(Color.WHITE);
setLayout(newGridLayout(2,1));
button=newJButton("Hello");
button.setSize(20,20);
button.setBackground(Color.GRAY);
p1.add(button);
JPanelp2=newJPanel();
p2.setBackground(Color.BLUE);
checkBox=newJCheckBox();
checkBox.addItemListener(newcheckBoxListener());
p2.add(checkBox);
add(p1);
add(p2);
setSize(200,200);
setVisible(true);
this.setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
privateclasscheckBoxListenerimplementsItemListener{
publicvoiditemStateChanged(ItemEvente){
if(checkBox.isSelected())
button.setBackground(Color.CYAN);
else
button.setBackground(Color.GRAY);
}
}
publicstaticvoidmain(String[]args){
ChangeButtonColorb=newChangeButtonColor();
}
}
运行结果贴图:
4.编程显示当前鼠标的位置坐标。
程序代码:
packagesd4;
importjava.awt.Color;
importjava.awt.event.MouseEvent;
importjava.awt.event.MouseMotionListener;
importjavax.swing.JButton;
importjavax.swing.JFrame;
publicclassLocateMouseextendsJFrame{
privateJButtonlocation;
publicLocateMouse(){
super("寻找鼠标位置");
location=newJButton("显示鼠标位置");
location.setSize(20,10);
add(location);
location.addMouseMotionListener(newMouseMotionListener(){
publicvoidmouseDragged(MouseEvente){}
publicvoidmouseMoved(MouseEvente){
location.setText("鼠标在("+e.getX()+","+e.getY()+")");
}
});
setSize(300,200);
setLocationRelativeTo(null);
setVisible(true);
location.setBackground(Color.WHITE);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}
publicstaticvoidmain(String[]args){
LocateMousemouse=newLocateMouse();
}
}
运行结果贴图:
5.编写程序,实现使用键盘上的上下左右箭头控制界面上图片的移动。
移动到边界时从界面另一侧出现。
移动过程中显示另一个图片,停止时恢复原来的图片。
程序代码:
packagesd5;
importjava.awt.Color;
importjava.awt.event.KeyEvent;
importjava.awt.event.KeyListener;
importjavax.swing.ImageIcon;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JPanel;
publicclassMoveImageextendsJFrame{
privateImageIcononeIcon=newImageIcon("C:
\\Users\\潘\\Desktop\\timg.jpg");
privateImageIcontwoIcon=newImageIcon("C:
\\Users\\潘\\Pictures\\CameraRoll\\1.jpg");
privateJLabellabel;
JPanelp;
publicMoveImage(){
super("Image移动");
setSize(500,500);
setLocationRelativeTo(null);
label=newJLabel(oneIcon);
p=newJPanel();
setContentPane(p);
p.setLayout(null);
this.addKeyListener(newPanelListener());
label.setBounds(0,0,100,100);
p.add(label);
p.setBackground(Color.WHITE);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}
privateclassPanelListenerimplementsKeyListener{
publicvoidkeyPressed(KeyEvente){
label.setIcon(twoIcon);
intx=label.getX();
inty=label.getY();
intw=p.getWidth();
inth=p.getHeight();
if(e.getKeyCode()==KeyEvent.VK_UP){
--y;
if(y<=0)
y=h;
label.setBounds(x,y,100,100);
}
elseif(e.getKeyCode()==KeyEvent.VK_DOWN){
++y;
if(y>=h)
y=0;
label.setBounds(x,y,100,100);
}
elseif(e.getKeyCode()==KeyEvent.VK_LEFT){
x--;
if(x<=0)
x=w;
label.setBounds(x,y,100,100);
}elseif(e.getKeyCode()==KeyEvent.VK_RIGHT){
x++;
if(x>=w)
x=0;
label.setBounds(x,y,100,100);
}
}
publicvoidkeyReleased(KeyEvente){
if(e.getKeyCode()==KeyEvent.VK_UP||e.getKeyCode()==KeyEvent.VK_DOWN||e.getKeyCode()==KeyEvent.VK_LEFT||e.getKeyCode()==KeyEvent.VK_RIGHT)
label.setIcon(oneIcon);
}
publicvoidkeyTyped(KeyEvente){}
}
publicstaticvoidmain(String[]args){
MoveImagem=newMoveImage();
}
}
运行结果贴图:
移动前
移动中
移动后
移动末尾
6绘制如下形式的一个二叉树。
程序代码:
packagetree;
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Graphics;
importjava.util.List;
importjavax.swing.JPanel;
@SuppressWarnings("serial")
publicclassTreePanelextendsJPanel{
privateNodetree;//保存整棵树
privateintnodeWidth=20;//每个结点的宽度
privateintnodeHeight=20;//每个结点的高度
privateintvDistance=50;//每2个结点的垂直距离
privateinthDIstance=30;//每2个结点的水平距离
privateintstartY=200;//根结点的Y,默认距离顶部200像素
privateintstartX=0;//根结点的X,默认水平居中对齐
privateintchildAlignWays;//子对齐方式
publicstaticintCHILD_ALIGN_ABSOLUTE=0;//相对Panel居中
publicstaticintCHILD_ALIGN_RELATIVE=1;//相对父结点居中
privateFontfont=newFont("微软雅黑",Font.BOLD,20);//描述结点的字体
privateColornodeColor=Color.WHITE;//结点背景颜色
privateColorlinkLineColor=Color.BLACK;//结点连线颜色
privateColorstringColor=Color.BLACK;//结点描述文字的颜色
//默认构造
publicTreePanel(){
this(null,CHILD_ALIGN_ABSOLUTE);
}
//根据传入的Node绘制树,以绝对居中的方式绘制
//@paramn要绘制的树
publicTreePanel(Noden){
this(n,CHILD_ALIGN_ABSOLUTE);
}
/**
1设置要绘制时候的对齐策略
2@paramchildAlignWays对齐策略
3@seetree.TreePanel#CHILD_ALIGN_RELATIVE
4@seetree.TreePanel#CHILD_ALIGN_ABSOLUTE
*/
publicTreePanel(intchildAlignWays){
this(null,childAlignWays);
}
/**
1根据子对齐策略childAlignWays绘制的树的根结点n
2@paramn要绘制的树的根结点
3@paramchildAlignWays对齐策略
*/
publicTreePanel(Noden,intchildAlignWays){
super();
//setTree(n);
this.childAlignWays=childAlignWays;
}
/**
1设置用于绘制的树
2@paramn用于绘制的树的
*/
publicvoidsetTree(Noden){
tree=n;
}
//重写,调用自己的绘制方法
publicvoidpaintComponent(Graphicsg){
startX=(getWidth()-nodeWidth)/2;
super.paintComponent(g);
g.setFont(font);
drawAllNode(tree,startX,g);
}
/**
1递归绘制整棵树
2@paramn被绘制的Node
3@paramxPos根节点的绘制X位置
4@paramg绘图上下文环境
*/
publicStringtoString(){
return"a";
}
publicvoiddrawAllNode(Noden,intx,Graphicsg){
inty=n.getLayer()*(vDistance+nodeHeight)+startY;
intfontY=y+nodeHeight-4;
g.setColor(nodeColor);
g.fillRect(x,y,nodeWidth,nodeHeight);//画结点的格子
g.setColor(stringColor);
g.drawString(n.getName(),x,fontY);//画结点的名字
if(n.hasChild()){
List
intsize=n.getChilds().size();
inttempPosx=childAlignWays==CHILD_ALIGN_RELATIVE
?
x+no
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验8 javaFX程序设计 实验 javaFX 程序设计