Replaced game configuration dialog by a JOptionPane
This commit is contained in:
		| @@ -10,11 +10,11 @@ import java.util.function.BiConsumer; | |||||||
| import java.util.function.Consumer; | import java.util.function.Consumer; | ||||||
|  |  | ||||||
| import javax.swing.DefaultComboBoxModel; | import javax.swing.DefaultComboBoxModel; | ||||||
| import javax.swing.JButton; |  | ||||||
| import javax.swing.JComboBox; | import javax.swing.JComboBox; | ||||||
| import javax.swing.JDialog; |  | ||||||
| import javax.swing.JFileChooser; | import javax.swing.JFileChooser; | ||||||
| import javax.swing.JLabel; | import javax.swing.JLabel; | ||||||
|  | import javax.swing.JOptionPane; | ||||||
|  | import javax.swing.JPanel; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Project: <strong>Chess</strong><br> |  * Project: <strong>Chess</strong><br> | ||||||
| @@ -33,17 +33,8 @@ public class DialogUtil { | |||||||
| 			action.accept(fileChooser.getSelectedFile()); | 			action.accept(fileChooser.getSelectedFile()); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	public static void showGameConfigurationDialog(BiConsumer<String, String> action) { | 	public static void showGameConfigurationDialog(Component parent, BiConsumer<String, String> action) { | ||||||
| 		new JDialog() { | 		JPanel dialogPanel = new JPanel(); | ||||||
|  |  | ||||||
| 			private static final long serialVersionUID = -5768339760489440385L; |  | ||||||
|  |  | ||||||
| 			{ |  | ||||||
| 				setTitle("Game Configuration"); |  | ||||||
| 				setBounds(100, 100, 281, 142); |  | ||||||
| 				setModal(true); |  | ||||||
| 				setLocationRelativeTo(null); |  | ||||||
| 				getContentPane().setLayout(null); |  | ||||||
|  |  | ||||||
| 		List<String> options = new ArrayList<>(Arrays.asList("Natural Player", "AI Player")); | 		List<String> options = new ArrayList<>(Arrays.asList("Natural Player", "AI Player")); | ||||||
| 		EngineUtil.getEngineInfos().forEach(info -> options.add(info.name)); | 		EngineUtil.getEngineInfos().forEach(info -> options.add(info.name)); | ||||||
| @@ -51,37 +42,24 @@ public class DialogUtil { | |||||||
| 		JLabel lblWhite = new JLabel("White:"); | 		JLabel lblWhite = new JLabel("White:"); | ||||||
| 		lblWhite.setFont(new Font("Tahoma", Font.PLAIN, 14)); | 		lblWhite.setFont(new Font("Tahoma", Font.PLAIN, 14)); | ||||||
| 		lblWhite.setBounds(10, 11, 49, 14); | 		lblWhite.setBounds(10, 11, 49, 14); | ||||||
| 				getContentPane().add(lblWhite); | 		dialogPanel.add(lblWhite); | ||||||
|  |  | ||||||
| 		JComboBox<Object> cbWhite = new JComboBox<>(); | 		JComboBox<Object> cbWhite = new JComboBox<>(); | ||||||
| 		cbWhite.setModel(new DefaultComboBoxModel<Object>(options.toArray())); | 		cbWhite.setModel(new DefaultComboBoxModel<Object>(options.toArray())); | ||||||
| 		cbWhite.setBounds(98, 9, 159, 22); | 		cbWhite.setBounds(98, 9, 159, 22); | ||||||
| 				getContentPane().add(cbWhite); | 		dialogPanel.add(cbWhite); | ||||||
|  |  | ||||||
| 		JLabel lblBlack = new JLabel("Black:"); | 		JLabel lblBlack = new JLabel("Black:"); | ||||||
| 		lblBlack.setFont(new Font("Tahoma", Font.PLAIN, 14)); | 		lblBlack.setFont(new Font("Tahoma", Font.PLAIN, 14)); | ||||||
| 		lblBlack.setBounds(10, 38, 49, 14); | 		lblBlack.setBounds(10, 38, 49, 14); | ||||||
| 				getContentPane().add(lblBlack); | 		dialogPanel.add(lblBlack); | ||||||
|  |  | ||||||
| 		JComboBox<Object> cbBlack = new JComboBox<>(); | 		JComboBox<Object> cbBlack = new JComboBox<>(); | ||||||
| 		cbBlack.setModel(new DefaultComboBoxModel<Object>(options.toArray())); | 		cbBlack.setModel(new DefaultComboBoxModel<Object>(options.toArray())); | ||||||
| 		cbBlack.setBounds(98, 36, 159, 22); | 		cbBlack.setBounds(98, 36, 159, 22); | ||||||
| 				getContentPane().add(cbBlack); | 		dialogPanel.add(cbBlack); | ||||||
|  |  | ||||||
| 				JButton btnStart = new JButton("Start"); | 		JOptionPane.showMessageDialog(parent, dialogPanel, "Game configuration", JOptionPane.QUESTION_MESSAGE); | ||||||
| 				btnStart.addActionListener((evt) -> { |  | ||||||
| 					dispose(); |  | ||||||
| 		action.accept(options.get(cbWhite.getSelectedIndex()), options.get(cbBlack.getSelectedIndex())); | 		action.accept(options.get(cbWhite.getSelectedIndex()), options.get(cbBlack.getSelectedIndex())); | ||||||
| 				}); |  | ||||||
| 				btnStart.setBounds(20, 73, 89, 23); |  | ||||||
| 				getContentPane().add(btnStart); |  | ||||||
|  |  | ||||||
| 				JButton btnCancel = new JButton("Cancel"); |  | ||||||
| 				btnCancel.addActionListener((evt) -> dispose()); |  | ||||||
| 				btnCancel.setBounds(157, 73, 89, 23); |  | ||||||
| 				getContentPane().add(btnCancel); |  | ||||||
|  |  | ||||||
| 			} |  | ||||||
| 		}.setVisible(true); |  | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|   | |||||||
| @@ -37,7 +37,7 @@ public class FENDropTarget extends DropTargetAdapter { | |||||||
| 				try (BufferedReader br = new BufferedReader(new FileReader(file))) { | 				try (BufferedReader br = new BufferedReader(new FileReader(file))) { | ||||||
| 					final GamePane	gamePane	= mainWindow.addGamePane(); | 					final GamePane	gamePane	= mainWindow.addGamePane(); | ||||||
| 					final String	fen			= br.readLine(); | 					final String	fen			= br.readLine(); | ||||||
| 					DialogUtil.showGameConfigurationDialog((whiteName, blackName) -> { | 					DialogUtil.showGameConfigurationDialog(null, (whiteName, blackName) -> { | ||||||
| 						final Game game = new Game(gamePane.getBoardPane(), whiteName, blackName, new Board(fen)); | 						final Game game = new Game(gamePane.getBoardPane(), whiteName, blackName, new Board(fen)); | ||||||
| 						gamePane.setGame(game); | 						gamePane.setGame(game); | ||||||
| 						game.start(); | 						game.start(); | ||||||
|   | |||||||
| @@ -2,6 +2,7 @@ package dev.kske.chess.ui; | |||||||
|  |  | ||||||
| import java.awt.Toolkit; | import java.awt.Toolkit; | ||||||
| import java.awt.datatransfer.StringSelection; | import java.awt.datatransfer.StringSelection; | ||||||
|  | import java.io.File; | ||||||
| import java.nio.charset.StandardCharsets; | import java.nio.charset.StandardCharsets; | ||||||
| import java.nio.file.Files; | import java.nio.file.Files; | ||||||
|  |  | ||||||
| @@ -40,7 +41,8 @@ public class MenuBar extends JMenuBar { | |||||||
| 		JMenu gameMenu = new JMenu("Game"); | 		JMenu gameMenu = new JMenu("Game"); | ||||||
|  |  | ||||||
| 		JMenuItem newGameMenuItem = new JMenuItem("New Game"); | 		JMenuItem newGameMenuItem = new JMenuItem("New Game"); | ||||||
| 		newGameMenuItem.addActionListener((evt) -> DialogUtil.showGameConfigurationDialog((whiteName, blackName) -> { | 		newGameMenuItem | ||||||
|  | 			.addActionListener((evt) -> DialogUtil.showGameConfigurationDialog(mainWindow, (whiteName, blackName) -> { | ||||||
| 			GamePane	gamePane	= mainWindow.addGamePane(); | 			GamePane	gamePane	= mainWindow.addGamePane(); | ||||||
| 			Game		game		= new Game(gamePane.getBoardPane(), whiteName, blackName); | 			Game		game		= new Game(gamePane.getBoardPane(), whiteName, blackName); | ||||||
| 			gamePane.setGame(game); | 			gamePane.setGame(game); | ||||||
| @@ -49,66 +51,7 @@ public class MenuBar extends JMenuBar { | |||||||
| 		gameMenu.add(newGameMenuItem); | 		gameMenu.add(newGameMenuItem); | ||||||
|  |  | ||||||
| 		JMenuItem loadFileMenu = new JMenuItem("Load game file"); | 		JMenuItem loadFileMenu = new JMenuItem("Load game file"); | ||||||
| 		loadFileMenu.addActionListener((evt) -> DialogUtil.showFileSelectionDialog(mainWindow, (file) -> { | 		loadFileMenu.addActionListener((evt) -> DialogUtil.showFileSelectionDialog(mainWindow, this::loadFile)); | ||||||
| 			final String	name		= file.getName().substring(0, file.getName().lastIndexOf('.')); |  | ||||||
| 			final String	extension	= file.getName().substring(file.getName().lastIndexOf('.')).toLowerCase(); |  | ||||||
| 			switch (extension) { |  | ||||||
| 				case ".fen": |  | ||||||
| 					try { |  | ||||||
| 						final GamePane	gamePane	= mainWindow.addGamePane(name); |  | ||||||
| 						final String	fen			= new String(Files.readAllBytes(file.toPath()), |  | ||||||
| 								StandardCharsets.UTF_8); |  | ||||||
| 						DialogUtil.showGameConfigurationDialog((whiteName, blackName) -> { |  | ||||||
| 							final Game game = new Game(gamePane.getBoardPane(), whiteName, blackName, new Board(fen)); |  | ||||||
| 							gamePane.setGame(game); |  | ||||||
| 							game.start(); |  | ||||||
| 						}); |  | ||||||
| 					} catch (Exception e) { |  | ||||||
| 						e.printStackTrace(); |  | ||||||
| 						JOptionPane.showMessageDialog(mainWindow, |  | ||||||
| 								"Failed to load the file " + file.getName() + ": " + e.toString(), |  | ||||||
| 								"File loading error", |  | ||||||
| 								JOptionPane.ERROR_MESSAGE); |  | ||||||
| 					} |  | ||||||
| 					break; |  | ||||||
| 				case ".pgn": |  | ||||||
| 					try { |  | ||||||
| 						final GamePane	gamePane	= mainWindow.addGamePane(name); |  | ||||||
| 						PGNDatabase		pgnDB		= new PGNDatabase(); |  | ||||||
| 						pgnDB.load(file); |  | ||||||
| 						if (pgnDB.getGames().size() > 0) { |  | ||||||
| 							String[]	gameNames	= new String[pgnDB.getGames().size()]; |  | ||||||
| 							for (int i = 0; i < gameNames.length; i++) { |  | ||||||
| 								final PGNGame game = pgnDB.getGames().get(i); |  | ||||||
| 								gameNames[i] = String.format("%s vs %s: %s", |  | ||||||
| 										game.getTag("White"), |  | ||||||
| 										game.getTag("Black"), |  | ||||||
| 										game.getTag("Result")); |  | ||||||
| 							} |  | ||||||
| 							JComboBox<String>	comboBox	= new JComboBox<>(gameNames); |  | ||||||
| 							JOptionPane |  | ||||||
| 								.showMessageDialog(mainWindow, comboBox, "Select a game", JOptionPane.QUESTION_MESSAGE); |  | ||||||
| 							DialogUtil.showGameConfigurationDialog((whiteName, blackName) -> { |  | ||||||
| 								final Game game = new Game(gamePane.getBoardPane(), whiteName, blackName, |  | ||||||
| 										pgnDB.getGames().get(comboBox.getSelectedIndex()).getBoard()); |  | ||||||
| 								game.start(); |  | ||||||
| 							}); |  | ||||||
| 						} |  | ||||||
| 					} catch (Exception e) { |  | ||||||
| 						e.printStackTrace(); |  | ||||||
| 						JOptionPane.showMessageDialog(mainWindow, |  | ||||||
| 								"Failed to load the file " + file.getName() + ": " + e.toString(), |  | ||||||
| 								"File loading error", |  | ||||||
| 								JOptionPane.ERROR_MESSAGE); |  | ||||||
| 					} |  | ||||||
| 					break; |  | ||||||
| 				default: |  | ||||||
| 					JOptionPane.showMessageDialog(mainWindow, |  | ||||||
| 							"The file extension '" + extension + "' is not supported!", |  | ||||||
| 							"File loading error", |  | ||||||
| 							JOptionPane.ERROR_MESSAGE); |  | ||||||
| 			} |  | ||||||
| 		})); |  | ||||||
| 		gameMenu.add(loadFileMenu); | 		gameMenu.add(loadFileMenu); | ||||||
|  |  | ||||||
| 		add(gameMenu); | 		add(gameMenu); | ||||||
| @@ -149,7 +92,7 @@ public class MenuBar extends JMenuBar { | |||||||
| 		loadFromFENMenuItem.addActionListener((evt) -> { | 		loadFromFENMenuItem.addActionListener((evt) -> { | ||||||
| 			final GamePane	gamePane	= mainWindow.addGamePane(); | 			final GamePane	gamePane	= mainWindow.addGamePane(); | ||||||
| 			final String	fen			= JOptionPane.showInputDialog("Enter a FEN string: "); | 			final String	fen			= JOptionPane.showInputDialog("Enter a FEN string: "); | ||||||
| 			DialogUtil.showGameConfigurationDialog((whiteName, blackName) -> { | 			DialogUtil.showGameConfigurationDialog(mainWindow, (whiteName, blackName) -> { | ||||||
| 				final Game game = new Game(gamePane.getBoardPane(), whiteName, blackName, new Board(fen)); | 				final Game game = new Game(gamePane.getBoardPane(), whiteName, blackName, new Board(fen)); | ||||||
| 				gamePane.setGame(game); | 				gamePane.setGame(game); | ||||||
| 				game.start(); | 				game.start(); | ||||||
| @@ -159,4 +102,68 @@ public class MenuBar extends JMenuBar { | |||||||
|  |  | ||||||
| 		add(toolsMenu); | 		add(toolsMenu); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	private void loadFile(File file) { | ||||||
|  | 		final String	name		= file.getName().substring(0, file.getName().lastIndexOf('.')); | ||||||
|  | 		final String	extension	= file.getName().substring(file.getName().lastIndexOf('.')).toLowerCase(); | ||||||
|  | 		switch (extension) { | ||||||
|  | 			case ".fen": | ||||||
|  | 				try { | ||||||
|  | 					final GamePane	gamePane	= mainWindow.addGamePane(name); | ||||||
|  | 					final String	fen			= new String(Files.readAllBytes(file.toPath()), StandardCharsets.UTF_8); | ||||||
|  | 					DialogUtil.showGameConfigurationDialog(mainWindow, (whiteName, blackName) -> { | ||||||
|  | 						final Game game = new Game(gamePane.getBoardPane(), whiteName, blackName, new Board(fen)); | ||||||
|  | 						gamePane.setGame(game); | ||||||
|  | 						game.start(); | ||||||
|  | 					}); | ||||||
|  | 				} catch (Exception e) { | ||||||
|  | 					e.printStackTrace(); | ||||||
|  | 					JOptionPane.showMessageDialog(mainWindow, | ||||||
|  | 							"Failed to load the file " + file.getName() + ": " + e.toString(), | ||||||
|  | 							"File loading error", | ||||||
|  | 							JOptionPane.ERROR_MESSAGE); | ||||||
|  | 				} | ||||||
|  | 				break; | ||||||
|  | 			case ".pgn": | ||||||
|  | 				try { | ||||||
|  | 					final GamePane	gamePane	= mainWindow.addGamePane(name); | ||||||
|  | 					PGNDatabase		pgnDB		= new PGNDatabase(); | ||||||
|  | 					pgnDB.load(file); | ||||||
|  | 					if (pgnDB.getGames().size() > 0) { | ||||||
|  | 						String[] gameNames = new String[pgnDB.getGames().size()]; | ||||||
|  | 						for (int i = 0; i < gameNames.length; i++) { | ||||||
|  | 							final PGNGame game = pgnDB.getGames().get(i); | ||||||
|  | 							gameNames[i] = String.format("%s vs %s: %s", | ||||||
|  | 									game.getTag("White"), | ||||||
|  | 									game.getTag("Black"), | ||||||
|  | 									game.getTag("Result")); | ||||||
|  | 						} | ||||||
|  | 						JComboBox<String> comboBox = new JComboBox<>(gameNames); | ||||||
|  | 						JOptionPane | ||||||
|  | 							.showInputDialog(mainWindow, comboBox, "Select a game", JOptionPane.QUESTION_MESSAGE); | ||||||
|  | 						DialogUtil.showGameConfigurationDialog(mainWindow, (whiteName, blackName) -> { | ||||||
|  | 							final Game game = new Game(gamePane.getBoardPane(), whiteName, blackName, | ||||||
|  | 									pgnDB.getGames().get(comboBox.getSelectedIndex()).getBoard()); | ||||||
|  | 							game.start(); | ||||||
|  | 						}); | ||||||
|  | 					} | ||||||
|  | 				} catch (Exception e) { | ||||||
|  | 					e.printStackTrace(); | ||||||
|  | 					JOptionPane.showMessageDialog(mainWindow, | ||||||
|  | 							"Failed to load the file " + file.getName() + ": " + e.toString(), | ||||||
|  | 							"File loading error", | ||||||
|  | 							JOptionPane.ERROR_MESSAGE); | ||||||
|  | 				} | ||||||
|  | 				break; | ||||||
|  | 			default: | ||||||
|  | 				JOptionPane.showMessageDialog(mainWindow, | ||||||
|  | 						"The file extension '" + extension + "' is not supported!", | ||||||
|  | 						"File loading error", | ||||||
|  | 						JOptionPane.ERROR_MESSAGE); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	public void loadFENFile(File file) { | ||||||
|  |  | ||||||
|  | 	} | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user