欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaFX实现对话框

程序员文章站 2022-07-13 23:25:12
...

  第一次写博客,听别人说多把学的知识做笔记,以后忘了容易复习,现在来试试。

正在边学边用JavaFX, JavaFX是否自带对话框目前还不清楚,不过我试着自己实现了一下,虽然很丑,但还是可以实现。

public class Main extends Application
{    
	public static void main(String[] args) throws Exception
	{
		Application.launch(args);
	}
	
	@Override
	public void start(Stage primaryStage) throws Exception 
	{
		Pane pane = new Pane();
		
		ButtonPane b = new ButtonPane(pane, "启动", 80, 40);
		b.button.setOnAction(new EventHandler<ActionEvent>()
		{
			@Override
			public void handle(ActionEvent arg0)
			{
				
			}
		});
		b.setLayoutXY(200, 200);
		b.addToPane();
		
		// 背景颜色
		pane.setBackground(new Background(new BackgroundFill(Color.rgb(200, 200, 200), null, null)));
		
		// ---------------------------窗口----------------------------
		Scene scene = new Scene(pane, 800, 600);
		primaryStage.setTitle("JavaFX");
		primaryStage.setScene(scene);
		primaryStage.show();
		
		// 右上角点击关闭时, 结束子线程
		primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() 
		{
		    public void handle(WindowEvent event) 
		    {
		        System.exit(0);
		    }
		});
		
		// 两次ESC退出程序
		primaryStage.addEventHandler(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() 
		{
			int count = 0;
			
			@Override
			public void handle(KeyEvent event)
			{
				if (event.getCode() == KeyCode.ESCAPE)
				{
					++count;
					if (count == 2)
					{
						System.exit(0);
					}
				}
			}
		});
		
		primaryStage.setResizable(false);
		// -----------------------------------------------------------
	}
}

这样的就有一个窗口了,还有一个按钮

JavaFX实现对话框

 

接下来要实现的就是点击按钮,弹出一个对话框

		b.button.setOnAction(new EventHandler<ActionEvent>()
		{
			@Override
			public void handle(ActionEvent arg0)
			{
				
			}
		});

点击按钮后,会执行handle()方法里面的代码,所以从这里开始

Dialog d = new Dialog(500, 200);

创建一个对话框对象d, 这个对话框宽500,高200

d.setStageInitStyle(StageStyle.DECORATED);

这个是用来设置对话框的样式

d.setBackround("FF9764");

设置对话框的背景颜色

d.setPromptStr("是否关机?", 210, 30);

设置对话框的提示内容和显示的位置

d.addButton("OK", 60, 30, 160, 130, 1);

添加一个宽60,高30的名为"OK"的按钮,位置是160,130。如果点击了按钮,设置按钮值为1

d.addButton("Cancel", 60, 30, 260, 130, 2);

添加一个宽60,高30的名为"Cancel"的按钮,位置是260,130。如果点击了按钮,设置按钮值为2

d.show();

显示标题栏

-----------------------------------------------

运行效果:

JavaFX实现对话框

修改一下标题样式

d.setStageInitStyle(StageStyle.UTILITY);

JavaFX实现对话框

或者可以修改为无标题栏的样式

d.setStageInitStyle(StageStyle.TRANSPARENT);

JavaFX实现对话框

 

以下是对话框类的代码:

/**
 * 对话框
 */
class Dialog
{
	public Stage stage;
	public Scene scene;
	public Pane pane;
	
	public TextPane prompt;
	
	public int buttonValue;
	
	public Dialog(double width, double height)
	{
		stage = new Stage();
		stage.setWidth(width);
		stage.setHeight(height);
		
		pane = new Pane();
		
		scene = new Scene(pane, width, height);
		stage.setScene(scene);
		
		buttonValue = 0;
	}
	
	/**
	 * 设置窗口样式
	 */
	public void setStageInitStyle(StageStyle stageStyle)
	{
		stage.initStyle(stageStyle);
	}
	
	/**
	 * 设置对话框背景颜色
	 */
	public void setBackround(String hexColorStr)
	{
		pane.setBackground(new Background(new BackgroundFill(Color.valueOf(hexColorStr), null, null)));
	}
	
	/**
	 * 设置对话框提示内容
	 */
	public void setPromptStr(String str, int x, int y)
	{
		prompt = new TextPane(pane, str);
		prompt.setFont("Courier New", 16);
		prompt.setLayoutXY(x, y);
		
		prompt.addToPane();
	}
	
	/**
	 * 添加按钮
	 */
	public void addButton(String name, double width, double height, int x, int y, int returnValue)
	{
		ButtonPane bp = new ButtonPane(pane, name, width, height);
		bp.button.setOnAction(new EventHandler<ActionEvent>()
		{
			@Override
			public void handle(ActionEvent arg0)
			{
				buttonValue = returnValue;
				stage.close();
			}
		});
		bp.setLayoutXY(x, y);
		bp.addToPane();
	}
	
	/**
	 * 显示
	 */
	public void show()
	{
		stage.show();
	}

	/**
	 * 获取按钮值
	 */
	public int getButtonValue()
	{
		return buttonValue;
	}
}

其实写的垃圾,仅仅只是实现了一下,有了这么个效果而已,完全不能使用...反正是第一次写博客,就当体验一下,也希望以后能继续坚持,以上。

相关标签: Java