📄 mui.java
字号:
settings.saveToFile(saveName); setStatus("Theme File saved: " + saveName); } }else{ settings.saveToFile(saveName); setStatus("Theme File saved: " + saveName); } } } private void saveDefaultMenuEvent(ActionEvent evt){ String dir; dir = System.getProperty("user.home"); if(new File(dir + File.separator +"MUSoSu").exists()){ String fileURI = new String(dir + File.separator + "MUSoSu" + File.separator +"settings.xml"); settings.saveToFile(fileURI); setStatus("Default Settings were successfully set."); }else{ setStatus("Unable to change default settings."); } } private void loadThemeMenuEvent(ActionEvent evt){ String fname; final JFileChooser fc = new JFileChooser(); fc.setFileFilter(new ExtensionFileFilter("xml", "XML Theme Document")); int returnVal = fc.showOpenDialog(this); if(returnVal == JFileChooser.APPROVE_OPTION){ fname = new String(fc.getSelectedFile().getAbsolutePath()); settings.loadFromFile(fname); loadSettings(settings); } } private void loadDefaultThemeMenuEvent(ActionEvent evt){ settings.loadFromFile("default.xml"); loadSettings(settings); } private void prefsMenuEvent(ActionEvent evt){ preferencesDialog pd = new preferencesDialog(this, settings); pd.setVisible(true); settings = pd.getSettings(); loadSettings(settings); } private void hintMenuEvent(ActionEvent evt){ solver.setGame(game); SolvedSquare sq; if((sq = solver.getHint()) != null){ panel.addToGame(sq.getValue(), sq.getIndex()); }else{ this.setStatus("Unable to provide hint"); } } private void solveAtOnceMenuEvent(ActionEvent evt){ if(game.checkFull()){ setStatus("Game already solved."); return; } solver.setGame(game); solver.solve(); Vector<SolvedSquare> ssv= solver.getSolvedSquares(); for(SolvedSquare sq: ssv){ panel.addToGame(sq.getValue(), sq.getIndex()); } if(solver.isCompleted()){ String st = String.valueOf(solver.getTotalTimeMillis()); setStatus("Solution found in " + st + " ms"); }else{ setStatus("Failed to solve this sudoku."); } } private void solveMenuEvent(ActionEvent evt){ if(!msp.isVisible()) showSolvePanelM.doClick(); } private void aboutMenuEvent(ActionEvent evt){ AboutDialog aboutDialog; aboutDialog = new AboutDialog(this, "About MUSoSu", version); aboutDialog.setVisible(true); } // END OF EVENT HANDLING METHODS /** * Sets the value of the message in the status bar. * Possibly not needed */ private void setStatus(String message){ statusPanel.setStatusLabel(message); } private void createMenu(){ setJMenuBar(menuBar); fileMenu = new JMenu("File"); viewMenu = new JMenu("View"); solverMenu = new JMenu("Game"); aboutMenu = new JMenu("Help"); newMenu = new JMenu("New"); menuBar.add(fileMenu); menuBar.add(viewMenu); menuBar.add(solverMenu); menuBar.add(aboutMenu); newCustomM = new JMenuItem(); newCustomM.setText("Custom Game"); newCustomM.addActionListener(this); newM = new JMenuItem(); newM.setText("New Game..."); newM.addActionListener(this); newM.setEnabled(true); newMenu.add(newM); newMenu.add(newCustomM); openM = new JMenuItem(); openM.setText("Open Game..."); openM.addActionListener(this); openPresetM = new JMenu(); openPresetM.setText("Open Preset Game"); preloadGames(); preMenuItems = new JMenuItem[preloaded.size()]; String tmpS, tmpN; for(int i = 0; i < preloaded.size(); i++){ preMenuItems[i] = new JMenuItem(); tmpS = preloaded.get(i); tmpN = preloadedNames.get(i); preMenuItems[i].setText(tmpN); preMenuItems[i].setName(tmpS); preMenuItems[i].addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent evt){ preloadMenuEvent(evt); } }); openPresetM.add(preMenuItems[i]); } saveAsM =new JMenuItem(); saveAsM.setText("Save Game As..."); saveAsM.setEnabled(false); saveAsM.addActionListener(this); restartM = new JMenuItem(); restartM.setText("Restart Game"); restartM.setEnabled(false); restartM.addActionListener(this); closeM = new JMenuItem(); closeM.setText("Close Game"); closeM.setEnabled(false); closeM.addActionListener(this); printM = new JMenuItem(); printM.setText("Print Board..."); printM.setEnabled(false); printM.addActionListener(this); exitM = new JMenuItem(); exitM.setText("Exit"); exitM.addActionListener(this); showSolvePanelM = new JCheckBoxMenuItem(); showSolvePanelM.setText("Show Solve Panel"); showSolvePanelM.setEnabled(false); showSolvePanelM.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent evt){ JCheckBoxMenuItem tmp = (JCheckBoxMenuItem) evt.getSource(); boolean b = tmp.getState(); if(b) showSolverPanel(); else hideSolverPanel(); } }); showTraceM = new JCheckBoxMenuItem(); showTraceM.setText("Show Trace"); showTraceM.addChangeListener(new ChangeListener(){ public void stateChanged(ChangeEvent evt){ showTraceMenuEvent(evt); } }); showTTM = new JCheckBoxMenuItem(); showTTM.setText("Show Possible Values"); showTTM.addChangeListener(new ChangeListener(){ public void stateChanged(ChangeEvent evt){ showTTMenuEvent(evt); } }); clearMarksM = new JMenuItem(); clearMarksM.setText("Clear All Marks"); clearMarksM.addActionListener(this); saveThemeM = new JMenuItem(); saveThemeM.setText("Save Current Settings..."); saveThemeM.addActionListener(this); saveDefaultM = new JMenuItem(); saveDefaultM.setText("Save Current Settings as Default"); saveDefaultM.addActionListener(this); loadThemeM = new JMenuItem(); loadThemeM.setText("Load Settings..."); loadThemeM.addActionListener(this); loadDefaultThemeM = new JMenuItem(); loadDefaultThemeM.setText("Load Default Settings"); loadDefaultThemeM.addActionListener(this); prefsM = new JMenuItem(); prefsM.setText("Preferences..."); prefsM.addActionListener(this); undoM = new JMenuItem(); undoM.setText("Undo (Ctrl-Z)"); undoM.addActionListener(this); redoM = new JMenuItem(); redoM.setText("Redo (Ctrl-R)"); redoM.addActionListener(this); solveAtOnceM = new JMenuItem(); solveAtOnceM.setText("Solve At Once"); solveAtOnceM.setEnabled(false); solveAtOnceM.addActionListener(this); solveM = new JMenuItem(); solveM.setText("Solve..."); solveM.setEnabled(false); solveM.addActionListener(this); hintM = new JMenuItem(); hintM.setText("Hint"); hintM.setEnabled(false); hintM.addActionListener(this); aboutM = new JMenuItem(); aboutM.setText("About..."); aboutM.addActionListener(this); fileMenu.add(newMenu); fileMenu.add(openM); fileMenu.add(openPresetM); fileMenu.addSeparator(); fileMenu.add(restartM); fileMenu.add(closeM); fileMenu.addSeparator(); fileMenu.add(saveAsM); fileMenu.addSeparator(); fileMenu.add(printM); fileMenu.addSeparator(); fileMenu.add(exitM); viewMenu.add(showSolvePanelM); viewMenu.add(showTraceM); viewMenu.add(showTTM); viewMenu.addSeparator(); viewMenu.add(clearMarksM); viewMenu.addSeparator(); viewMenu.add(loadThemeM); viewMenu.add(loadDefaultThemeM); viewMenu.add(saveThemeM); viewMenu.add(saveDefaultM); viewMenu.addSeparator(); viewMenu.add(prefsM); solverMenu.add(undoM); solverMenu.add(redoM); solverMenu.addSeparator(); solverMenu.add(hintM); solverMenu.addSeparator(); solverMenu.add(solveAtOnceM); solverMenu.add(solveM); aboutMenu.add(aboutM); } /** * Initializes all visual components, adds Listeners, * creates Menus, etc. * This method is called by the Constructor only. * */ private void initComponents(){ //this.setPreferredSize(new Dimension(350,400)); this.setPreferredSize(new Dimension(390, 440)); label = new JLabel(".:: MUSoSu ::."); label.setFont(new Font("Courier", Font.BOLD, 24)); label.setForeground(Color.orange); titlePanel = new JPanel(); titlePanel.setLayout(new BorderLayout()); titlePanel.setBackground(Color.DARK_GRAY); titlePanel.add(label, BorderLayout.EAST); newCustomPanel = new JPanel(); newCustomPanel.setLayout(new BorderLayout(1, 1)); JPanel butPan = new JPanel(); getStr = new JButton("Get String"); getStr.setBackground(Color.WHITE); getStr.addActionListener(this); getStr.setMargin(new Insets(1,1,1,1)); save = new JButton("Save"); save.setBackground(Color.WHITE); save.addActionListener(this); save.setMargin(new Insets(1,1,1,1)); savenopen = new JButton("Save and Play"); savenopen.setBackground(Color.WHITE); savenopen.addActionListener(this); savenopen.setMargin(new Insets(1,1,1,1)); cancel = new JButton("Cancel"); cancel.setBackground(Color.WHITE); cancel.addActionListener(this); cancel.setMargin(new Insets(1,1,1,1)); butPan.add(getStr); butPan.add(save); butPan.add(savenopen); butPan.add(cancel); butPan.setVisible(true); newCustomPanel.add(butPan, BorderLayout.EAST); newCustomPanel.setVisible(false); statusPanel = new MStatusPanel(); // I know it's duplicated but GamePanel() needs it middle = new JPanel(); middle.setLayout(new BorderLayout()); panel = new GamePanel(statusPanel); panel.setVisible(false); msp = new MSolvePanel(panel); // for the solver panel // more initialisation in showSolverPanel() msp.setVisible(false); middle.add(msp, BorderLayout.EAST); middle.add(panel, BorderLayout.CENTER); // statusPanel = new MStatusPanel(); statusPanel.setVisible(true); southPanel = new JPanel(); southPanel.setLayout(new BorderLayout()); southPanel.add(newCustomPanel, BorderLayout.NORTH); southPanel.add(statusPanel, BorderLayout.CENTER); southPanel.setVisible(true); // superPanel = new JPanel(); superPanel.setLayout(new BorderLayout()); superPanel.add(titlePanel, BorderLayout.NORTH); superPanel.add(middle, BorderLayout.CENTER); superPanel.add(southPanel, BorderLayout.SOUTH); getContentPane().add(superPanel); } /** * Method to load on preloadedNames and preloaded * the hardcoded games */ private void preloadGames(){ preloaded = new Vector<String>(); preloadedNames = new Vector<String>(); String n = new String(); String s = new String(); n = "Very Easy - 1"; s = "870000015903040706060108020006405200040000050005901600020304090108090504450000062"; preloadedNames.add(n); preloaded.add(s); n = "Medium - 1"; s = "040203000050000093008000700700304009000000000900506008004000900260000040000109080"; preloadedNames.add(n); preloaded.add(s); n = "Medium - 2"; s = "00300040000030800079000001801020306000004000002060507038000002700090700000200090"; preloadedNames.add(n); preloaded.add(s); n = "Hard - 1"; s = "000050070207800600010040050000000030406000105020000000040030010003006908060080000"; preloadedNames.add(n); preloaded.add(s); n = "Very Hard - 1"; s = "00090400000406020003000008020030500609000001010060700805000009000102030000080900"; preloadedNames.add(n); preloaded.add(s); n = "Very Hard - 2"; s = "060000010500406003000503000021000650000000000053000840000102000200705009090000080"; preloadedNames.add(n); preloaded.add(s); n = "Very Hard - 3"; s = "500009004002000800100403006907000400000080000001000203700604009005000700400100002"; preloadedNames.add(n); preloaded.add(s); } private void showSolverPanel(){ msp.setSudoku(game); msp.setVisible(true); if(!((this.getState() & JFrame.MAXIMIZED_BOTH) == JFrame.MAXIMIZED_BOTH)){ setSize(new Dimension(this.getSize().width + 200, this.getSize().height)); } this.validateTree(); } private void hideSolverPanel(){ msp.setVisible(false); if(!((this.getState() & JFrame.MAXIMIZED_BOTH) == JFrame.MAXIMIZED_BOTH)){ setSize(new Dimension(this.getSize().width - 200, this.getSize().height)); } } private void getStrEvent(){ String str = game.getString(); GetStrDialog getStrDlg = new GetStrDialog(this, str); getStrDlg.setVisible(true); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -