這是幾年前寫的,放上來:
package phase10; import java.io.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.text.*; import com.borland.dbswing.*; import org.newboy.io.MyFileFilter; import org.newboy.io.FileOperator; import org.newboy.util.FDate; import java.awt.Font; import java.awt.BorderLayout; public class FrameEdit extends JFrame { JPanel contentPane = (JPanel)this.getContentPane(); JLabel status = new JLabel(); JMenuBar mbDefault = new JMenuBar(); JMenu mnuFile = new JMenu(); JMenu mnuEdit = new JMenu(); JMenuItem mnuNew = new JMenuItem(); JMenuItem mnuOpen = new JMenuItem(); JMenuItem mnuExit = new JMenuItem(); JMenuItem mnuFont = new JMenuItem(); JMenu mnuColor = new JMenu(); JRadioButtonMenuItem mnuFore = new JRadioButtonMenuItem("Fore Color"); JRadioButtonMenuItem mnuBack = new JRadioButtonMenuItem("Back Color"); JFileChooser fcSelect = new JFileChooser(); JColorChooser colorChoose = new JColorChooser(); FontChooser fc = new FontChooser(this, "Select Fonts"); ButtonGroup bg = new ButtonGroup(); JMenuItem mnuSave = new JMenuItem(); JMenu mnuTools = new JMenu(); JMenuItem mnuDate = new JMenuItem(); JCheckBoxMenuItem mnuLock = new JCheckBoxMenuItem(); JScrollPane jspEdit = new JScrollPane(); BorderLayout borderLayout = new BorderLayout(); JMenu mnuHelp = new JMenu(); JMenuItem mnuTopics = new JMenuItem(); JMenuItem mnuAbout = new JMenuItem(); JTextArea txaEdit = new JTextArea(); JCheckBoxMenuItem mnuWrap = new JCheckBoxMenuItem(); JRadioButtonMenuItem mnuDefault = new JRadioButtonMenuItem("Default Color"); JMenuItem mnuCopy = new JMenuItem(); JMenuItem mnuCut = new JMenuItem(); JMenuItem mnuPaste = new JMenuItem(); public FrameEdit() { try { setDefaultCloseOperation(EXIT_ON_CLOSE); jbInit(); } catch (Exception exception) { exception.printStackTrace(); } } /** * Component initialization. * * @throws java.lang.Exception */ private void jbInit() throws Exception { contentPane.setLayout(new BorderLayout(5, 5)); setPreferredSize(new Dimension(640, 480)); //設置過濾器,不能每次都設置 fcSelect.setFileFilter(new MyFileFilter("*.txt", "Text Files (*.txt)")); setTitle("Edit Pro - Untitled.txt"); mnuFile.setText("File"); mnuEdit.setText("Edit"); mnuNew.setText("New"); mnuTools.setText("Tools"); mnuDate.setText("Date/Time"); mnuNew.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { mnuNew_actionPerformed(e); } }); mnuOpen.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { mnuOpen_actionPerformed(e); } }); // this.setResizable(false); mnuExit.setText("Exit"); mnuExit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { mnuExit_actionPerformed(e); } }); mnuFont.setText("Font"); mnuFont.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { mnuFont_actionPerformed(e); } }); mnuColor.setText("Color"); mnuFore.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { mnuFore_actionPerformed(e); } }); mnuBack.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { mnuBack_actionPerformed(e); } }); mnuSave.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { mnuSave_actionPerformed(e); } }); mnuSave.setText("Save..."); mnuDate.setText("Insert Date/Time"); mnuDate.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { mnuDate_actionPerformed(e); } catch (Exception ex) { ex.printStackTrace(); } } }); mnuLock.setText("Lock"); mnuLock.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { mnuLock_actionPerformed(e); } }); borderLayout.setHgap(5); borderLayout.setVgap(5); mnuOpen.setText("Open..."); mnuHelp.setText("Help"); mnuTopics.setText("Help Topics"); mnuAbout.setText("About Me"); txaEdit.addCaretListener(new CaretListener() { public void caretUpdate(CaretEvent e) { txaEdit_caretUpdate(e); } }); txaEdit.setFont(new java.awt.Font("Dialog", Font.PLAIN, 14)); txaEdit.setLineWrap(true); mnuWrap.setText("Auto Wrap"); mnuWrap.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { mnuWrap_actionPerformed(e); } }); mnuDefault.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { mnuDefault_actionPerformed(e); } }); mnuCopy.setMnemonic('C'); mnuCopy.setText("Copy"); mnuCut.setMnemonic('T'); mnuCut.setText("Cut"); mnuPaste.setMnemonic('P'); mnuPaste.setText("Paste"); mbDefault.add(mnuFile); mnuFile.setMnemonic('F'); mbDefault.add(mnuEdit); mnuEdit.setMnemonic('E'); mbDefault.add(mnuTools); mnuTools.setMnemonic('T'); mbDefault.add(mnuHelp); mnuHelp.setMnemonic('H'); mnuFile.add(mnuNew); mnuNew.setMnemonic('N'); mnuFile.add(mnuOpen); mnuOpen.setMnemonic('O'); mnuFile.add(mnuSave); mnuSave.setMnemonic('S'); mnuFile.addSeparator(); mnuFile.add(mnuExit); mnuExit.setMnemonic('X'); mnuEdit.add(mnuCopy); mnuEdit.add(mnuCut); mnuEdit.add(mnuPaste); mnuEdit.addSeparator(); mnuEdit.add(mnuFont); mnuFont.setMnemonic('F'); mnuEdit.add(mnuColor); mnuColor.setMnemonic('L'); mnuEdit.addSeparator(); mnuEdit.add(mnuWrap); mnuEdit.add(mnuLock); mnuLock.setMnemonic('K'); mnuColor.add(mnuDefault); mnuDefault.setMnemonic('D'); mnuColor.add(mnuFore); mnuFore.setMnemonic('F'); mnuColor.add(mnuBack); mnuBack.setMnemonic('B'); bg.add(mnuBack); bg.add(mnuFore); mnuTools.add(mnuDate); mnuDate.setMnemonic('I'); contentPane.add(jspEdit, java.awt.BorderLayout.CENTER); jspEdit.getViewport().add(txaEdit); mnuHelp.add(mnuTopics); mnuTopics.setMnemonic('T'); mnuWrap.setSelected(true); mnuHelp.addSeparator(); mnuHelp.add(mnuAbout); mnuWrap.setMnemonic('W'); mnuAbout.setMnemonic('A'); contentPane.add(status, BorderLayout.SOUTH); status.setText("Status Bar:"); setJMenuBar(mbDefault); } void txaEdit_caretUpdate(CaretEvent e) { int row = 0; int col = 0; int count = 0; try { int pos = txaEdit.getCaretPosition(); row = txaEdit.getLineOfOffset(pos) + 1; //得到行的起始偏移 int lineStart = txaEdit.getLineStartOffset(row - 1); //確定給定行起始處的偏移量 col = pos - lineStart; //得到列號 count = txaEdit.getLineCount(); } catch (BadLocationException ex) { ex.printStackTrace(); } status.setText("Rows: " + row + " , Cols: " + col + " Count Line: " + count); } /** * File | Exit action performed. * * @param actionEvent ActionEvent */ void mnuExit_actionPerformed(ActionEvent actionEvent) { System.exit(0); } /** * 打開文本文件 * @param fileName 文件名 * @return 打開的文件內容 */ public boolean mnuOpen_actionPerformed(ActionEvent e) { fcSelect.showOpenDialog(this); File file = fcSelect.getSelectedFile(); if (file == null) { return false; } String fileName = null; try { //包含了文件名 fileName = file.getAbsolutePath(); txaEdit.setText(FileOperator.openFile(fileName)); this.setTitle("Edit Pro - " + fileName); } catch (FileNotFoundException ex) { JOptionPane.showMessageDialog(this, "Cannot find file: [" + fileName + "]."); return false; } catch (IOException ex) { JOptionPane.showMessageDialog(this, "[" + fileName + "] I/O error!"); ex.printStackTrace(); return false; } return true; } public void mnuFont_actionPerformed(ActionEvent e) { if (fc.showDialog()) { txaEdit.setFont(fc.getSelectedFont()); } } public void mnuNew_actionPerformed(ActionEvent e) { if (txaEdit.getText().equals("")) { return; } String fileName = JOptionPane.showInputDialog("Please input the new file name:"); //點的取消按鈕 if (fileName == null) { return; } if (fileName.equals("")) { fileName = "Untitled.txt"; } txaEdit.setText(""); this.setTitle("Edit Pro - " + fileName); } public void mnuBack_actionPerformed(ActionEvent e) { Color newColor = colorChoose.showDialog(this, "Back Color", txaEdit.getBackground()); if (newColor != null) { txaEdit.setBackground(newColor); } } public void mnuFore_actionPerformed(ActionEvent e) { Color newColor = colorChoose.showDialog(this, "Fore Color", txaEdit.getForeground()); if (newColor != null) { txaEdit.setForeground(newColor); } } public void mnuSave_actionPerformed(ActionEvent e) { if (fcSelect.showSaveDialog(this) != JFileChooser.APPROVE_OPTION) { return; } //包含文件名 String fileName = fcSelect.getSelectedFile().getAbsolutePath(); try { FileOperator.saveToFile(fileName, txaEdit.getText()); this.setTitle("Edit Pro - " + fileName); } catch (IOException ex) { ex.printStackTrace(); } } public void mnuDate_actionPerformed(ActionEvent e) throws BadLocationException { //插入日期的樣式,出現對話框 //TOTAL_STYLE代表日期的種類,從0到TOTAL_STYLE-1 String dateStyle[] = new String[4]; for (int i = 0; i < dateStyle.length; i++) { dateStyle[i] = FDate.getFormatDate(i); } //插入不同的類型 String selectedDate = (String) JOptionPane.showInputDialog(contentPane, "Please select a style:", "Date/Time", JOptionPane.INFORMATION_MESSAGE, null, dateStyle, dateStyle[3]); //得到光標當前的位置插入 if (selectedDate != null) { int pos = txaEdit.getCaretPosition(); txaEdit.insert(selectedDate, pos); } } public void mnuLock_actionPerformed(ActionEvent e) { if (txaEdit.isEditable()) { txaEdit.setEditable(false); } else { txaEdit.setEditable(true); } } public void mnuWrap_actionPerformed(ActionEvent e) { txaEdit.setLineWrap(!txaEdit.getLineWrap()); } public void mnuDefault_actionPerformed(ActionEvent e) { txaEdit.setBackground(Color.WHITE); txaEdit.setForeground(Color.BLACK); } }
一共只有2個類:
package phase10; import java.awt.Toolkit; import javax.swing.SwingUtilities; import javax.swing.UIManager; import java.awt.Dimension; public class EditApp { boolean packFrame = true; /** * Construct and show the application. */ public EditApp() { FrameEdit frame = new FrameEdit(); // Validate frames that have preset sizes // Pack frames that have useful preferred size info, e.g. from their layout if (packFrame) { frame.pack(); } else { frame.validate(); } // Center the window Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = frame.getSize(); if (frameSize.height > screenSize.height) { frameSize.height = screenSize.height; } if (frameSize.width > screenSize.width) { frameSize.width = screenSize.width; } frame.setLocation( (screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2); frame.setVisible(true); } /** * Application entry point. * * @param args String[] */ public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { try { //改變外觀 javax.swing.JFrame.setDefaultLookAndFeelDecorated(true); UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); } catch (Exception exception) { exception.printStackTrace(); } new EditApp(); } }); } }
Vite 預構建的核心原理 1. 兼容性與性能的雙重目標 Vite 的預構建旨在解決兩個主要問題:兼容性和性能。對於兼容性,由於 Vite 在開發階段將所有代碼視爲原生 ES 模塊,因此需要將 CommonJS 或 UMD 格式的依賴轉
自動裝配原理分析 條件註冊機制 spring-context模塊中有兩個組件:Condition接口和@Conditional註解,在@Conditional註解中可以指定一組Condition實現, 通常@Conditional是和@Co
@EnableXxx註解 Spring有很多@EnableXxx這種形式的註解,類似於可以一鍵打開某項功能,相當於暴露給用戶的一種便捷的配置API,例如 @EnableAsync 激活異步執行能力,@EnableTransactionMan
條件註冊 Spring 4.0 引入條件註冊機制,暴露給用戶的API是@Conditional和Condition接口,把@Conditional聲明在一個 @Component類上,並接受一組條件(Condition實現),容器初始化期間
本文分享自華爲雲社區《Python函數與模塊的精髓與高級特性》,作者:檸檬味擁抱。 Python 是一種功能強大的編程語言,擁有豐富的函數和模塊,使得開發者能夠輕鬆地構建複雜的應用程序。本文將介紹 Python 中函數和模塊的基本使用方法,
一.Vue文件內容 <template> </template> <script> </script> <style> </style>
第六屆·2024 MindSpore量子計算黑客松火熱進行中。本次大賽由量子信息網絡產業聯盟主辦,昇思MindSpore Quantum社區承辦,多所高校和單位聯合舉辦。開發者將全面體驗全新一代通用量子計算框架MindSpore Quant
Ai technology 前言 AppBuilder上線了低代碼製作組件功能,可以通過工作流的方式構建自定義組件,完成簡單Agent無法完成的複雜功能,使得生成的文本更加定製化,
最近在刷一些問題的時候看到有下面一個問題 上面問的是當輸入的字符串爲什麼的時候返回 True 總結 在做題目的時候,第一次還做錯了。 這是因爲解答這個題目的時間只有 3 分鐘,沒有自己看題目 後來拿着程序跑了下。 p
一、簡單介紹: CaffeineCache和Guava的Cache是應用廣泛的本地緩存。 在開發中,爲了達到降低依賴、提高訪問速度的目的。會使用它存儲一些維表接口的返回值和數據庫查詢結果,在有些場景下也會在分佈式緩存上再加上一層本地緩存,
作者:vivo 互聯網大前端團隊 - Ma Lian 本文主要描述了FileProvider,startAnyWhere實現,Parcel不對稱漏洞以及這三者結合產生的漏洞利用實戰,另外闡述了漏洞利用的影響和修復預防措施,這個漏洞波及了
本文分享自華爲雲社區《GaussDB SQL基本語法示例-CASE表達式》,作者:Gauss松鼠會小助手2。 一、前言 SQL是用於訪問和處理數據庫的標準計算機語言。GaussDB支持SQL標準(默認支持SQL2、SQL3和SQL4的主要
Impala目前支持Hadoop中幾種常見的文件格式 Parquet 、 ORC 、 Text 、 Avro 、 RCFile 和 SequenceFile 。下面簡要說明各種格式的使用、限制和一些注意事項。 不同的文件格式有着不同的適用場
本文分享自華爲雲社區《GaussDB SQL基礎語法示例-BOOLEAN表達式》,作者:Gauss松鼠會小助手2。 一、前言 SQL是用於訪問和處理數據庫的標準計算機語言。GaussDB支持的SQL標準(默認支持SQL2、SQL3和SQL
一、文件屬性 下文中,“文件”一詞默認代指廣義的數據類型,跟“目錄”等詞對比使用時,則專指普通文件(File)這一特定數據類型。 Linux系統中,我們可以使用命令“ls -al”來查看當前目錄