zoukankan      html  css  js  c++  java
  • 专注写记事本三十年

      惯例发个JAR

      这么个玩意也加了rr3,我太看得起自己了。

      

      1. 元件JTextField只支持单行内容,要换行得用JTextArea,JTextPane干啥用的我也不知道。

      2. 其实要知道元件都有什么功能,打上setget试试就行了。不过还是记两个吧。

      3. 文本类元件有个方法,setEditable(boolean flag)。如字面意思,决定能不能编辑。在这个软件里用在文件路径显示上,这次就不这么蛋疼让用户自己输入路径了。

      4. 文本区有个方法文本域没有,就是换行(setLineWrap(boolean flag)),因为文本域不能换行。参数用false的话文本区就也不能换行了。

      5. 接上条,还有个补充方法,setWrapStyleWord(boolean flag),决定要不要以空格为分界,也就是以单词为单位换行,true了比较好看。

      6. 布局不是问题,跟Python的基本一致,从小面板开始拼,然后把小面板add进大面板,不过把最后的大面板嵌进框架里的时候默认是没有边距的,也就是说是整个顶在窗口四边上,所以得记得给大面板setBorder(Border border)。新建Border有点麻烦,要用BorderFactory类里的createEmptyBorder(1234)方法,这个方法接受四个参数,就是四个边距,顺序不知道,不过多数时候四个数都一样,所以用得着的时候再研究吧。

      7. setBackground(Color c)方法就不用说了吧,不重用的话直接在参数里边new一个颜色就行了,可惜Color类不能直接用十六进制数定义颜色,只能接受三个0-255的RGB值。

      8. 布局管理器有三种,FlowLayout有点蛋疼,说下GridLayout和BorderLayout。

      9. GridLayout如字面意思,构造的时候用两个参数定好行列数,再加两个参数的话就是横竖方向上的元件间隔,默认是0。

      10. BorderLayout的排列方式是分成东西南北中五块,南北块能左右扩大,东西块能上下扩大,中间的横竖都可以扩大,所以把文本框放在中间。五块的定义是BorderLayout里边的final static变量,中间是BorderLayout.CENTER,东西南北类推。在add的时候多加一个参数指定元件放的位置。

      11. 补一个JFrame实例的方法,setMinimumSize(Dimension d),用来限制窗口的最小大小,Dimension可以直接用横竖像素数来构造。不过setMaximumSize()限制不了最大窗口大小,不知道为啥……

      12. 还有个元件,JFileChooser,用来新建一个文件选择窗口。

      13. setFileSelectionMode(arg)决定是能选文件还是目录还是文件目录都可以。参数是常量,FILES_ONLY,DIRECTORIES_ONLY,FILES_AND_DIRECTORIES,三选一。

      14. setMultiSelectionEnabled(boolean flag),决定能不能多选。

      15. 最后用showXXXXDialog(Component parent),XXXX处用Save或者Open,懂。直接省略的话还能接受第二个参数,字符串表示的按钮文本。这个方法返回一个int,不过其实也就是一个常量。确定选项的常量叫JFileChooser.APPROVE_OPTION,取消的话反正窗口就关了,直接用else就是了。大概就叫CANCEL_OPTION啦……

      16. getSelectedFile()方法返回双击或确定选择的文件,File类型,很方便。

      17. 至于import……直接用星号导入啦……

      18. 对了忘说了,框架类直接就继承JFrame就行了,要用的时候new一下。

      19. new完了还要设置一些基本属性。setTitle(String s)设置标题栏的内容。setSize(int x, int y)设置窗口大小。setLocationRelativeTo(Component c)设置……设置什么我也不知道,反正参数用null就是居中框架。setDefaultCloseOperation(int blah)设置标准关闭时的动作,别想太多,用常量JFrame.EXIT_ON_CLOSE。

      20. 最后用setVisible(boolean flag)使框架可见,就成啦。

      1 package jLowNote;
      2 
      3 import java.awt.*;
      4 import java.awt.event.*;
      5 
      6 import javax.swing.*;
      7 
      8 import java.io.*;
      9 
     10 public class MainFrame extends JFrame {
     11     private static final long serialVersionUID = -5276129912800884818L;
     12     private File fileOpened;
     13     private JTextField filePath;
     14     private JTextArea content;
     15     private JButton newButton;
     16     private JButton openButton;
     17     private JButton saveButton;
     18     private JButton exitButton;
     19     
     20     public MainFrame() {
     21         fileOpened = new File(".");
     22         
     23         //按钮部分面板。
     24         JPanel buttonPanel = new JPanel(new GridLayout(0, 4, 5, 5));
     25         
     26         //布局按钮。
     27         newButton = new JButton("新建");
     28         openButton = new JButton("打开");
     29         saveButton = new JButton("保存");
     30         exitButton = new JButton("退出");
     31         newButton.addActionListener(new NewListener(this));
     32         openButton.addActionListener(new OpenListener(this));
     33         saveButton.addActionListener(new SaveListener(this));
     34         exitButton.addActionListener(new ExitListener());
     35         //等会补上监听器。
     36         
     37         buttonPanel.add(newButton);
     38         buttonPanel.add(openButton);
     39         buttonPanel.add(saveButton);
     40         buttonPanel.add(exitButton);
     41         buttonPanel.setBackground(new Color(66, 204, 255));
     42         
     43         //=================================================
     44         
     45         //文件操作面板。
     46         JPanel filePanel = new JPanel(new BorderLayout(5, 5));
     47         
     48         //布局。
     49         filePath = new JTextField("文件路径");
     50         filePath.setEditable(false);
     51         
     52         filePanel.add(filePath, BorderLayout.CENTER);
     53         filePanel.add(buttonPanel, BorderLayout.EAST);
     54         filePanel.setBackground(new Color(66, 204, 255));
     55         
     56         //=================================================
     57         
     58         //总体面板。
     59         JPanel overallPanel = new JPanel(new BorderLayout(5, 5));
     60         
     61         //布局。
     62         content = new JTextArea();
     63         content.setLineWrap(true);
     64         content.setWrapStyleWord(true);
     65         
     66         overallPanel.add(filePanel, BorderLayout.NORTH);
     67         overallPanel.add(content, BorderLayout.CENTER);
     68         overallPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
     69         overallPanel.setBackground(new Color(66, 204, 255));
     70         
     71         //=================================================
     72         
     73         this.add(overallPanel);
     74         this.setMinimumSize(new Dimension(400, 300));
     75     }
     76     
     77     public JTextField getPathField() {return this.filePath;}
     78     public JTextArea getContentArea() {return this.content;}
     79     public File getFileOpened() {return this.fileOpened;}
     80     public void setFileOpened(File file) {this.fileOpened = file;}
     81 }
     82 
     83 /**新建按钮的事件监听器。*/
     84 class NewListener implements ActionListener {
     85     MainFrame parent;
     86     
     87     NewListener(MainFrame parent) {this.parent = parent;}
     88     
     89     public void actionPerformed(ActionEvent e) {
     90         parent.getPathField().setText("一个新文件(记得保存哦)");
     91         parent.getContentArea().setText("");
     92         parent.setFileOpened(new File("."));
     93     }
     94 }
     95 
     96 /**打开按钮的事件监听器。*/
     97 class OpenListener implements ActionListener {
     98     MainFrame parent;
     99     
    100     OpenListener(MainFrame parent) {this.parent = parent;}
    101     
    102     @Override
    103     public void actionPerformed(ActionEvent e) {
    104         //选择文件。
    105         JFileChooser fileChooser = new JFileChooser();
    106         fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    107         fileChooser.setMultiSelectionEnabled(false);
    108         fileChooser.setCurrentDirectory(parent.getFileOpened());
    109         if (fileChooser.showOpenDialog(parent) == JFileChooser.APPROVE_OPTION) {
    110             parent.setFileOpened(fileChooser.getSelectedFile());
    111         } else {
    112             return;
    113         }
    114         
    115         //读取文件内容后向文本框一次性写入。
    116         parent.getPathField().setText(parent.getFileOpened().getAbsolutePath());
    117         
    118         try {
    119             InputStreamReader in = new InputStreamReader(new FileInputStream(parent.getFileOpened()), "GBK");
    120             BufferedReader reader = new BufferedReader(in);
    121             String s;
    122             StringBuffer sb = new StringBuffer("");
    123             while ((s = reader.readLine()) != null) {
    124                 sb.append(s + "
    ");
    125             }
    126             parent.getContentArea().setText(sb.toString());
    127             reader.close();
    128         } catch (FileNotFoundException ex) {
    129             ex.printStackTrace();
    130         } catch (IOException ioe) {
    131             ioe.printStackTrace();
    132         }
    133     }
    134 }
    135 
    136 /**保存按钮的事件监听器。*/
    137 class SaveListener implements ActionListener {
    138     MainFrame parent;
    139     
    140     SaveListener(MainFrame parent) {this.parent = parent;}
    141     
    142     @Override
    143     public void actionPerformed(ActionEvent e) {
    144         File fileToWrite = null;
    145         
    146         //如果已经打开了文件,要编辑的就是已打开的文件,否则就弹窗让用户选择或新建。
    147         if (parent.getFileOpened().isFile()) {
    148             fileToWrite = parent.getFileOpened();
    149         } else {
    150             JFileChooser fileChooser = new JFileChooser();
    151             fileChooser.setCurrentDirectory(parent.getFileOpened());
    152             fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    153             fileChooser.setMultiSelectionEnabled(false);
    154             if (fileChooser.showSaveDialog(parent) == JFileChooser.APPROVE_OPTION) {
    155                 fileToWrite = fileChooser.getSelectedFile();
    156             } else {
    157                 return;
    158             }
    159             
    160             //可以自行输入文件名来创建新文件。
    161             try {
    162                 if (!fileToWrite.exists())
    163                     fileToWrite.createNewFile();
    164             } catch (IOException ex) {
    165                 ex.printStackTrace();
    166             }
    167         }
    168         
    169         //读取文本框内容并向文件中写入。
    170         try {
    171             OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(fileToWrite));
    172             BufferedWriter writer = new BufferedWriter(out);
    173             writer.write(parent.getContentArea().getText());
    174             writer.close();
    175         } catch (IOException ex) {
    176             ex.printStackTrace();
    177         }
    178         
    179         JOptionPane.showMessageDialog(parent, "文件已保存。", "保存文件", JOptionPane.PLAIN_MESSAGE);
    180     }
    181 }
    182 
    183 /**退出按钮的事件监听器。*/
    184 class ExitListener implements ActionListener {
    185     @Override
    186     public void actionPerformed(ActionEvent e) {
    187         System.exit(0);
    188     }
    189 }
    MainFrame及事件监听器
     1 package jLowNote;
     2 
     3 import javax.swing.JFrame;
     4 
     5 public class Run {
     6     public static void main(String[] args) {
     7         MainFrame frame = new MainFrame();
     8         frame.setTitle("低端笔记本Java版");
     9         frame.setSize(640, 480);
    10         frame.setLocationRelativeTo(null);
    11         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    12         frame.setVisible(true);
    13     }
    14 }
    Run
  • 相关阅读:
    使用MaxCompute Java SDK 执行任务卡住了,怎么办?
    通过编辑文件的方式对DNS服务器进行配置
    2009级计算机应用 嵌入式方向课表
    微软首宗针对中国大企业盗版案宣判:获赔217万
    小數點的運算[討論區- PHP新手區] : 台灣PHP聯盟
    Linux C编程一站式学习
    用wget做站点镜像
    2008级嵌入式方向学生 学习成果(创意)
    Linux领航未来操作系统
    fedora12 微软雅黑
  • 原文地址:https://www.cnblogs.com/chihane/p/3500522.html
Copyright © 2011-2022 走看看