Java written notepad

xiaoxiao2021-03-06  21

In fact, Java comes with the Java written notepad, in the DEMO / JFC directory. Import java.io. *; import java.awt. *; import java.awt.event. *; import javax.swing. *; import javax.swing.event. *; import java.net. *; import java.aw .Font; import java.awt.print. *; Import javax.swing.text. *; Import java.awt.datatransfer. *; Public class mynote extends jframe {public boolean change; // Control text domain changes. public JTextArea jta = new JTextArea ( "", 60,60); public JScrollPane jsp = new JScrollPane (jta); public JMenuBar jmb; public JMenu jm, editjm, setjm, viewjm, helpjm; public JMenuItem newjmi, openjmi, savejmi, saveasjmi , printjmi, exitjmi; public JSeparator js1 = new JSeparator (); public JSeparator js2 = new JSeparator (); public ActionListener al = new a (); public String fileName = ""; // definition is stored in the file name public JMenuItem copyjmi, pastejmi, cutjmi, findjmi, findnjmi, deletejmi, selectalljmi, undojmi; public JMenuItem fontjmi, fjmi, bjmi; // font sets the font style public JMenuItem toolsjmi; public JMenuItem aboutjmi; public JSeparator js3 = new JSeparator (); public JSeparator js4 = new Jseparator (); Public JToolBar JTB; Public String Quick [] = new string [] {"new", "open", "save", "saveas", "delete", "copy", "paste", "cut" , "selectall"};

PrinterJob prtMe = PrinterJob.getPrinterJob (); public Mynote () {this.setTitle ( "My Notes"); this.setSize (new Dimension (400,400));. Jta.getDocument () addDocumentListener (new DocumentListener () { public void insertUpdate (DocumentEvent e) {changed = true;} public void removeUpdate (DocumentEvent e) {changed = true;} public void changedUpdate (DocumentEvent e) {changed = true;}}); jta.setBackground (Color.white) JTA.SetForeground (color.black); JTA.SetFont (New Font (", Font.Bold, 12)); JSP.SetViewPortView (JTA); this.getContentPane (). add (jsp, borderlayout.center); This.Compose (); this.setjmenubar (JMB); this.addwindowlistener (new windowadapter () {public void window {if (Changed == true) {INT N; Object [] option = {"Yes" , "No"}; n = joptionpane.showoptionDialog (NULL, "Your file has not been saved, please turn off after saving!", "Please save", joptionpane.yes_no_option, joption, option [] p p [0] ); switch (n) {copy joptionpane.yes_option: DOSAVE (FileName); Break; Case JOPANE.NO_OPTION: BREAK; DEFAULT: BREAK;}} system.exit (0);}});} public void compose ()} PUBLIC VOID Compose ()} // File menu layout Newjmi, Openjmi, Savejmi, saveasjmi, printjmi, exitjmijmb = new jmenubar (); jm = new jufactemo (); editjm = new jMenu (); newjmi = new jmenuitem (); openjmi = new jMenuitem (); Savejmi = new jMenuitem (); saveasjmi = new jMenuItem (); printjmi = new jMenuItem (); exitjmi = new jmenuitem (); js1 = new jseparator (); js2 = new jseparator (); jm.setmnemonic (keyevent.vk_f) ; // Define shortcut key JM.Settext ("file"); newjmi.setmnemonic (keyevent.vk_n); newjmi.settext ("New"); newjmi.setAccelerator (keyStroke.g_n, inputevent.ctrl_mask)) Newjmi.addActionListener (al); jm.add (newjmi); jm.add (js1); // or: jm.addseparator ();

openjmi.setMnemonic (KeyEvent.VK_O); openjmi.setText ( "open"); openjmi.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_O, InputEvent.CTRL_MASK)); openjmi.addActionListener (al); jm.add (openjmi); savejmi.setMnemonic (KeyEvent.VK_S); savejmi.setText ( "save"); savejmi.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_S, InputEvent.CTRL_MASK)); savejmi.addActionListener (al); jm.add (savejmi); saveasjmi.setMnemonic (KeyEvent.VK_A); saveasjmi.setText ( "Save as"); saveasjmi.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_A, InputEvent.CTRL_MASK)); saveasjmi.addActionListener (al); jm.add (saveasjmi) ; printjmi.setMnemonic (KeyEvent.VK_A); printjmi.setText ( "Print"); printjmi.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_P, InputEvent.CTRL_MASK)); printjmi.addActionListener (al); jm.add (printjmi) ; jm.add (js2); exitjmi.setMnemonic (KeyEvent.VK_X); exitjmi.setText ( "exit"); exitjmi.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_X, InputEvent.CTRL_MASK)); exitjmi.addActionListener (al) JM.Add (EXITJMI); // File menu setting ends.

copyjmi, pastejmi, cutjmi, findjmi, findnjmi, deletejmi, selectalljmi, undojmi; editjm.setText ( "Edit"); editjm.setMnemonic (KeyEvent.VK_E); copyjmi = new JMenuItem (); pastejmi = new JMenuItem (); cutjmi = new JMenuItem (); findjmi = new JMenuItem (); findnjmi = new JMenuItem (); deletejmi = new JMenuItem (); selectalljmi = new JMenuItem (); undojmi = new JMenuItem (); copyjmi.setText ( "copy"); copyjmi .setMnemonic (KeyEvent.VK_C); copyjmi.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_C, InputEvent.CTRL_MASK)); copyjmi.addActionListener (al); editjm.add (copyjmi); pastejmi.setText ( "paste"); pastejmi .setMnemonic (KeyEvent.VK_P); pastejmi.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_V, InputEvent.CTRL_MASK)); pastejmi.addActionListener (al); editjm.add (pastejmi); cutjmi.setText ( "cut"); cutjmi.setMnemonic (KeyEvent.VK_X); cutjmi.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_X, InputEvent.CTRL_MASK)); cutjmi.addActionListener (al); editjm.add (cutjmi); editjm.add (js3); findjmi. Settext ("Find"); Findjmi.SetmNemonic (KeyEvent.vk_f); Findjmi.setAccelerator (Keystr OKE.GETKEYSTROKE (keyevent.ctrl_mask); Findjmi.AddActionListener (AL); Findnjmi.Settext ("Find Next"); Findnjmi.AddActionListener (al); editjm.add (findjmi); editjm.add findnjmi); editjm.addSeparator (); deletejmi.setText ( "delete"); deletejmi.setMnemonic (KeyEvent.VK_D); deletejmi.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_D, InputEvent.CTRL_MASK)); deletejmi.addActionListener (new delete ()); selectalljmi.setText ( "Select"); selectalljmi.setMnemonic (KeyEvent.VK_S); selectalljmi.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_S, InputEvent.CTRL_MASK)); selectalljmi.addActionListener (new selectAllL () ); undojmi.settext ("revoke");

undojmi.setMnemonic (KeyEvent.VK_U); undojmi.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_U, InputEvent.CTRL_MASK)); undojmi.addActionListener (al); editjm.add (deletejmi); editjm.add (selectalljmi); editjm. Add (UndoJMI); // Edit menu setting end setjm = new jmenu (); setjm.settext ("set"); setjm.setmnemonic (keyevent.vk_s); fjmi = new jmenuitem (); fjmi.setText ("Font Color ... "); fjmi.setMnemonic (KeyEvent.VK_F); fjmi.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_M, InputEvent.CTRL_MASK)); fjmi.addActionListener (al); fontjmi = new JMenuItem (); fontjmi.setText ( "font style ..."); fontjmi.setMnemonic (KeyEvent.VK_I); fontjmi.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_I, InputEvent.CTRL_MASK)); fontjmi.addActionListener (al); bjmi = new JMenuItem () Bjmi.settext ("Background Color ..."); bjmi.setmnemonic (keyevent.vk_b); bjmi.setAccelerator (keyevent.vk_b, intrutevent.ctrl_mask); bjmi.addActionListener (Al); setjm. Addjm.add (fontjmi); setjm.add (bjmi); viewjm = new jmenu (); viewjm.settext ("view"); viewjm.setmnemonic (KeyEvent.vk_w); Toolsjmi = New JMenuItem (); toolsjmi.setText ( "toolbar"); toolsjmi.setMnemonic (KeyEvent.VK_T); toolsjmi.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_T, InputEvent.CTRL_MASK)); toolsjmi.addActionListener (al); viewjm. Add (Toolsjmi); Helpjm = new jmenu (); Helpjm.Settext ("Help"); Helpjm.SetmNemonic (KeyEvent.vk_h); Aboutjmi = New Jmenuitem (); Aboutjmi.SetText ("Aboutjmi.SetMNemonic) KeyEvent.VK_A); aboutjmi.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_A, InputEvent.CTRL_MASK)); aboutjmi.addActionListener (al); helpjm.add (aboutjmi); jmb.add (jm); jmb.add (editjm) JMB.Add (setjm); jmb.add (viewjm); jmb.add (helpjm); jtb = new jtoolbar (); jtb.setfloatable (false); addbuttons ();

this.getContentPane () add (jtb, BorderLayout.PAGE_START);. definePopupMenu ();} public void definePopupMenu () {JPopupMenu popupjm = new JPopupMenu (); MouseListener ml = new popuplistener (popupjm); JMenuItem jmi = null; jmi = new JMenuItem ( "New"); jmi.addActionListener (new ActionListener () {public void actionPerformed (ActionEvent e) {newactionlistener ();}}); popupjm.add (jmi); popupjm.addSeparator (); jmi = new JMenuItem ("Open"); JMI.AddActionListener (New ActionListener () {public void ActionPerformed (ActionEvent E) {OpenActionListener ();}}); Popupjm.Add (JMI); JMI = New JMenuItem ("Save"; JMI. addActionListener (new ActionListener () {public void actionPerformed (ActionEvent e) {doSave (fileName);}}); popupjm.add (jmi); jmi = new JMenuItem ( "another save"); jmi.addActionListener (new ActionListener () {PUBLIC VOID ACTIONPERFORMED (ActionEvent E) {DOSAVEAS ();}}; popupjm.add (jmi); popupjm.addseParator (); jmi = new jmenuitem ("Find"); jmi.addactionListener (new activityListener () {PUBLIC Void ActionPerformed (ActionEvent E) {New Finder (MyNote.THIS, JTA) .show ();}}; popupjm. Add (JMI); Popupjm.addseParator (); JMI = New JMenuItem ("Replication"); JMI.AddActionListener (New ActionListener () {PUBLIC VOID ActionPerformed (ActionEvent E) {jta.copy ();}}; popupjm. Add (JMI); JMI = New JMenuItem ("Paste"); JMI.AddActionListener (New ActionListener () {public void actionPerformed (ActionEvent E) {jta.paste ();}}); Popupjm.Add (JMI); JMI = New Jmenuitem ("cut"); jmi.addactionListener (new activityListener () {public void actionPerformed (ActionEvent E) {jta.cut ();}}; popupjm.add (jmi); popupjm.addseParetor (); JMI = New Jmenuitem ("text color"); jmi.addactionListener (new actionListener () {public void actionPerformed (ActionEvent E) {color newcolor =

JColorchooser.Showdialog (MyNote.this, "please select text color", jta.getForeground ()); jta.setforeghround (newcolor);}}); Popupjm.add (jmi); jmi = new jMenuitem ("background color") ; jmi.addActionListener (new ActionListener () {public void actionPerformed (ActionEvent e) {color newColor = JColorChooser.showDialog (Mynote.this, "select background color", jta.getBackground ()); jta.setBackground (newColor); }}); popupjm.add (jmi); jta.addMouseListener (ml);} class popuplistener extends MouseAdapter {JPopupMenu popupjm; public popuplistener (JPopupMenu popupjm) {this.popupjm = popupjm;} public void mousePressed (MouseEvent e) {executeTrigger (e); public void mousereleased (mouseEvent E) {EXECUTRIGER (E); PUBLIC VOID EXECUTRIGER (MouseEvent E) {IF (E.Ispopuptrigger ()) popupjm.show (E.GetComponent (), E.GETX () , E.GETY ());}} public void addbuttons ()} public void addbuttons () {jButton JB [] = new jbutton [9]; {JB [0] = new jbutton (); addlisteners (jb [0], quick [0]) JB [0] .SetTooltiptext (Quick [0]); JB [0] .Seticon (CreateImage)); jtb.add (jb [0]);} {JB [1] = new jbutton (); AddListener (JB [1], Quick [1 ]); JB [1] .SetTooltiptext (Quick [1]); JB [1] .Seticon (CreateImage)); JTB.Add (JB [1]);} {JB [2] = New jbutton (); addlisteners (JB [2], Quick [2]); JB [2] .SetTooltiptext (Quick [2]); JB [2] .Seticon (CreateImage); JTB. Add (JB [2]);} {JB [3] = new jbutton (); addlisteners (jb [3], quick [3]); JB [3] .SetTooltiptext (Quick [3]); JB [3] .Seticon ("3.gif"); jtb.add (jb [3]);} {JB [4] = new jbutton (); addlisteners (jb [4], quick [4]); JB [ 4] .SetTooltiptext (Quick [4]); JB [4] .Seticon (CreateImage)); jtb.add (jb [4]);} {JB [5] = new jbutton (); AddListener (JB [5], Quick [5]); JB [5] .SetTooltiptext (Quick [5]);

JB [5] .Seticon (CreateImage)); JTB.Add (JB [5]);} {JB [6] = new jbutton (); addlistener (JB [6], Quick [6] ); JB [6] .Settooltiptext (Quick [6]); JB [6] .Seticon (CreateImage)); jtb.add (jb [6]);} {JB [7] = New JButton (); AddListeners (JB [7], Quick [7]); JB [7] .SetTooltiptext (Quick [7]); JB [7] .Seticon (CreateImage); jtb.add (JB [7]);} {JB [8] = new jbutton (); addlisteners (jb [8], quick [8]); JB [8] .SetTooltiptext (Quick [8]); JB [8]. Seticon (CreateImage)); jtb.add (jb [8]);}}} public void addlisteners (jbutton jb, string actioncommand {if (actioncommand.equals) {JB. addActionListener (new ActionListener () {public void actionPerformed (ActionEvent e) {newactionlistener ();}});} else if (actionCommand.equals (quick [1])) {jb.addActionListener (new ActionListener () {public void actionPerformed (ActionEvent E) {openactionListener ();}});} else if (actioncommand.equals (quick [2])) {jb.addactionListener (new activityListener () {public void AC tionPerformed (ActionEvent e) {doSave (fileName);}});} else if (actionCommand.equals (quick [3])) {jb.addActionListener (new ActionListener () {public void actionPerformed (ActionEvent e) {doSaveAs () }});} Else if (Quick [4])) {jb.addActionListener (new actionListener () {public void actionPerformed (ActionEvent E) {jta.copy ();}} (ActionCommand.equals (Quick [5])) {JB.AddActionListener (New ActionListener () {PUBLIC VOID ActionPerformed (ActionEvent E) {JTA.Paste ();}});} else if (ActionCommand.equals (Quick [6 ])) {JB.AddActionListener (New ActionListener () {Public Void ActionPerformed (ActionEvent E) {jta.cut ();}});

} else if (actioncommand.equals) {jb.addActionListener (new activityListener () {public void actionPerformed (ActionEvent E) {jta.cut ();}});} else f (actioncommand.equals Quick [8])) {JB.AddActionListener (New ActionListener () {public void actionPerformed (ActionEvent E) {jta.selectall ();}})

else {jb.addActionListener (new ActionListener () {public void actionPerformed (ActionEvent e) {jta.cut ();}});}} public ImageIcon createImage (String str) {java.net.URL url = Mynote.class. GetResource (STR); if (URL == NULL) RETURN NULL; Else Return New Imageicon (URL); PUBLIC Static Void Main (String Args [) {new mynote (). show ();} public void newactionListener () {If (change == true) {INT N; Object option [] = {"yes", "no", "ca Zan}}; n = joptionpane.showoptionDialog (null," Your file has not been saved, you want Is saved now? "," Save ", JOPANE.YES_NO_CANCEL_OPTION, JOPTIONPANE.QUESTION_MESSAGE, NULL, OPTION, OPTION [0]); switch (n) {copy joptionpane.yes_option: DOSAVE (FileName); // Save FileName =" "; // Empty the file name JTA.Settext (" "); // Clear the editing area change = false; // After the new file, change the update flag to false; Break; Case JOPANE.NO_OPTION: FILENAME =" "; JTA .SETTEXT (""); Changed = false; Break; Case JOPANE.CANCEL_OPTION: BREAK; DEFAULT: BREAK;}} else {filename = ""; jta.settext ("");}} public void O PenactionListener () {fileDialog fd = new filedialog (MyNote.THIS, "Open ...", FileDialog.Load); fd.show (); if (fd.getfile () == null) // If there is no file, Return Return; filename = fd.getdirectory () file.seParetor fd.getfile (); // get the file name [including the path] fileinputstream fis = null; // First initialization String str1 = null; try {FIS = new fileinputstream (filename); int size = fis.available (); byte bytes [] = new byte [size]; fis.read (bytes); // read file str1 = new string (bytes); // Establish Character string number} catch (ioException e1) {} finally {type {fiS.close ();

} Catch (IOException e2) {}} if (str1 = null!) {Jta.setText (str1);} changed = false;} class A implements ActionListener {public void actionPerformed (ActionEvent e) {Object o = e.getSource ( JMenuitem JMI = (jMenuitem) O; if (jmi == newjmi) {newActionListener ();} else if (jmi == Openjmi) {openactionListener ();} else if (jmi == savejmi) {DOSAVE (FileName) } Else if (jmi == saveasjmi) {dosaVeas ();} else if (jmi == exitjmi) {if (change == true) {int N; object [] option = {"yes", "no"} N = JOPTIONPANE.SHOWOPTIONDIALOG (NULL, "Your file is not saved yet, do you want to save now?", "Save", JOPANE.YES_NO_OPTION, JOPANE.QUESTION_MESSAGE, NULL, OPTION, OPTION [0]); Switch ( n) {CASE JOPANE.YES_OPTION: DOSAVE (FileName); Break; Case JOPANE.NO_OPTION: BREAK; DEFAULT: BREAK;}} system.exit (0);} else if (jmi == copyjmi) {jta.copy () } Else if (jmi == pastejmi) {jta.paste ();} else if (jmi == cutjmi) {jta.cut ();} else if (jmi == findjmi) {new finder (MyNote.This, JTA) .show ();} el SE if (jmi == selectalljmi) {jta.selectall ();} else if (jmi == deletejmi) {jta.cut ();} else if (jmi == fontjmi) {color newcolor = jcolorchooser.showdialog (MyNote. This, "Select Font Color", JTA.GetForeground ()); if (NewColor! = null) jta.setForeground (NewColor);} else if (jmi == fjmi) {color newcolor = jcolorchooser.showdialog (Mynote.This, "Select Font Color", JTA.GetForeground ()); if (NewColor! = NULL) JTA.setForeground (NewColor);} else if (jmi == bjmi) {color newcolor = jcolorchooser.showdialog (mynote.this, "selection Background color, JTA.GetBackground ());

IF (NewColor! = null) jta.setback (newcolor);}

Else if (jmi == aboutjmi) {new about (mynote.this, true);} else;}} public void dosave (String filename) {if (filename == ") {dosaVeas (); return;} fileoutputstream fos = NULL; STRING STR3 = jta.gettext (); try {fos = new fileoutputstream (filename); fos.write (Str3.getbytes ());} catch (ooException E1) {} finally {try {fos.close () } catch (IOEXCEPTION E2) {}} Changed = false;} public void undo (string filename) {if (filename == ") {dosaVeas (); return;} fileoutputstream fos = null; string str3 = jta.gettext (); Try {fos = new fileoutputstream (filename); fos.write (Str3.getbytes ());} catch (ooException E1) {} finally {try {fos.close ();} catch (ooException E2) {} } Changd = false;} public void dosaveas () {fileDialog fd = new filedialog (MyNote.THIS, "Save ...", Filedialog.Save); fd.show (); if (fd.getfile () == NULL Return; filename = fd.getdirectory () file.seParector fd.getFile (); string str4 = jta.getText (); fileoutputstream fos = null; tryoutputstream fos = null; tryoutputstream fos = null; tryoutputstream fos = null; try {fos = new fileoutputstream (Fi Lename); fos.write (Str4.getbytes ());} catch (ooException E1) {} finally {try {fos.close ();} catch (ooException E2) {}} Changed = false;}} Class Jtal Implements ActionListener {public void actionPerformed (ActionEvent e) {}} class print implements ActionListener {PrinterJob prtMe = PrinterJob.getPrinterJob (); public void actionPerformed (ActionEvent e) {try {prtMe.print ();} catch (Exception ew) {} }}} Class Delete Implements ActionListener {JtextArea Jta; Public Void ActionPerformed (ActionEvent E) {String Selection = JTA.GetSelectedText (); JTA.ReplaceRange (""

, Jta.getSelectionStart (), jta.getSelectionEnd ());}} class selectAllL implements ActionListener {JTextArea jta; public void actionPerformed (ActionEvent e) {jta.selectAll ();}} class Finder extends JDialog implements ActionListener {JFrame jf; Jtextarea JTA; JButton Findbutton, CloseButton; JPanel Findpane, ButtonPane; JLabel FindLabel; JTextField JTF; Public Finder (JFRAME JF, JTEXTAREA JTA) {Super (JF, TRUE); // JDIALOG constructor. Must be the first sentence. Super.SetTitle; super.getContentPane (). setLayout (new gridbagLayout ()); this.jf = jf; this.jta = jta; composes (); this.setLocationReTO (JF); this.Pack ); this.requestFocus (); this.addWindowListener (new WindowAdapter () {public void windowClosing (WindowEvent e) {Finder.this.dispose ();}});} public void composes () {GridBagConstraints gbag = new GridBagConstraints ( ); // GridbagLayout is effective with GridbagConstraints. Gbag.Fill = Gridbagconstraints.horizontal; gbag.weightx = 1.0; gbag.insets = new INSETS (0, 5, 0, 0);

findButton = new JButton (); closeButton = new JButton (); findPane = new JPanel (); buttonPane = new JPanel (); findLabel = new JLabel (); jtf = new JTextField (); findPane.setLayout (new GridBagLayout () ); FindLabel.Settext ("Find Content"); FindLabel.SetLabelFor (JTF); FindPane.Add (FindLabel, New GridbagConstRAINTS ()); JTF.AddActionListener (this); // Press Enter the key in the text box. Findpane.Add (JTF, GBAG); GBAG = New Gridbagconstros (); gbag.fill = Gridbagconstraints.both; gbag.insets = new INSETS (11, 12, 0, 11); this.getContentPane (). Add (Findpane, gbag); buttonPane.setLayout (new GridBagLayout ()); findButton.setText ( "Find"); findButton.setMnemonic (KeyEvent.VK_F); findButton.setToolTipText ( "Find"); findButton.addActionListener (this); buttonPane.add (findButton, new GridBagConstraints ()); closeButton.setText ( "Close"); closeButton.setMnemonic (KeyEvent.VK_C); closeButton.setToolTipText ( "Close"); closeButton.addActionListener (this); gbag = new GridBagConstraints (); Gbag.insets = New INSETS (0, 5, 0); ButtonPane.Add (CloseButton, GBAG); GBAG = New GridbagConstros (); gbag.gridx = 0; gbag.gridy = 1; gbag.anchor = gridbagconsts. Southeast; gbag.insets = new INSETS (17, 12, 11, 11); this.getContentPane (). Add (buttonpane, gbag);} public void actionPerformed (ACTIONEvent E) {string text 4tr = jta.getText (); string Findstr = jtf.getText (); if (FindStr.Equals (")); else {int index = text Str.Indexof (FindStr); IF (INDEX! = - 1) // Find the content {JTA.SetCaretPosition (Index);} else Toolkit.getDefaultToolkit (). Beep ();} this.dispose ();}}

转载请注明原文地址:https://www.9cbs.com/read-60377.html

New Post(0)