⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 textfielddemo.java

📁 java tutorial.sun公司官方出品。java入门书籍。最新版
💻 JAVA
字号:
/* * Copyright (c) 1995 - 2008 Sun Microsystems, Inc.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * *   - Redistributions of source code must retain the above copyright *     notice, this list of conditions and the following disclaimer. * *   - Redistributions in binary form must reproduce the above copyright *     notice, this list of conditions and the following disclaimer in the *     documentation and/or other materials provided with the distribution. * *   - Neither the name of Sun Microsystems nor the names of its *     contributors may be used to endorse or promote products derived *     from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package components;/* * TextFieldDemo.java requires one additional file: * content.txt */import java.awt.Color;import java.awt.event.ActionEvent;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import javax.swing.*;import javax.swing.text.*;import javax.swing.event.*;import javax.swing.GroupLayout.*;public class TextFieldDemo extends JFrame                           implements DocumentListener {        private JTextField entry;    private JLabel jLabel1;    private JScrollPane jScrollPane1;    private JLabel status;    private JTextArea textArea;        final static Color  HILIT_COLOR = Color.LIGHT_GRAY;    final static Color  ERROR_COLOR = Color.PINK;    final static String CANCEL_ACTION = "cancel-search";        final Color entryBg;    final Highlighter hilit;    final Highlighter.HighlightPainter painter;            public TextFieldDemo() {        initComponents();                InputStream in = getClass().getResourceAsStream("content.txt");        try {            textArea.read(new InputStreamReader(in), null);        } catch (IOException e) {            e.printStackTrace();        }                hilit = new DefaultHighlighter();        painter = new DefaultHighlighter.DefaultHighlightPainter(HILIT_COLOR);        textArea.setHighlighter(hilit);                entryBg = entry.getBackground();        entry.getDocument().addDocumentListener(this);                InputMap im = entry.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);        ActionMap am = entry.getActionMap();        im.put(KeyStroke.getKeyStroke("ESCAPE"), CANCEL_ACTION);        am.put(CANCEL_ACTION, new CancelAction());    }        /** This method is called from within the constructor to     * initialize the form.     */    private void initComponents() {        entry = new JTextField();        textArea = new JTextArea();        status = new JLabel();        jLabel1 = new JLabel();        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);        setTitle("TextFieldDemo");        textArea.setColumns(20);        textArea.setLineWrap(true);        textArea.setRows(5);        textArea.setWrapStyleWord(true);        textArea.setEditable(false);        jScrollPane1 = new JScrollPane(textArea);        jLabel1.setText("Enter text to search:");        GroupLayout layout = new GroupLayout(getContentPane());        getContentPane().setLayout(layout);        	//Create a parallel group for the horizontal axis	ParallelGroup hGroup = layout.createParallelGroup(GroupLayout.Alignment.LEADING);		//Create a sequential and a parallel groups	SequentialGroup h1 = layout.createSequentialGroup();	ParallelGroup h2 = layout.createParallelGroup(GroupLayout.Alignment.TRAILING);		//Add a container gap to the sequential group h1	h1.addContainerGap();		//Add a scroll pane and a label to the parallel group h2	h2.addComponent(jScrollPane1, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 450, Short.MAX_VALUE);	h2.addComponent(status, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 450, Short.MAX_VALUE);		//Create a sequential group h3	SequentialGroup h3 = layout.createSequentialGroup();	h3.addComponent(jLabel1);	h3.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED);	h3.addComponent(entry, GroupLayout.DEFAULT_SIZE, 321, Short.MAX_VALUE);	 	//Add the group h3 to the group h2	h2.addGroup(h3);	//Add the group h2 to the group h1	h1.addGroup(h2);	h1.addContainerGap();		//Add the group h1 to the hGroup	hGroup.addGroup(GroupLayout.Alignment.TRAILING, h1);	//Create the horizontal group	layout.setHorizontalGroup(hGroup);	        	//Create a parallel group for the vertical axis	ParallelGroup vGroup = layout.createParallelGroup(GroupLayout.Alignment.LEADING);	//Create a sequential group v1	SequentialGroup v1 = layout.createSequentialGroup();	//Add a container gap to the sequential group v1	v1.addContainerGap();	//Create a parallel group v2	ParallelGroup v2 = layout.createParallelGroup(GroupLayout.Alignment.BASELINE);	v2.addComponent(jLabel1);	v2.addComponent(entry, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE);	//Add the group v2 tp the group v1	v1.addGroup(v2);	v1.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED);	v1.addComponent(jScrollPane1, GroupLayout.DEFAULT_SIZE, 233, Short.MAX_VALUE);	v1.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED);	v1.addComponent(status);	v1.addContainerGap();		//Add the group v1 to the group vGroup	vGroup.addGroup(v1);	//Create the vertical group	layout.setVerticalGroup(vGroup);	pack();    }    public void search() {        hilit.removeAllHighlights();                String s = entry.getText();        if (s.length() <= 0) {            message("Nothing to search");            return;        }                String content = textArea.getText();        int index = content.indexOf(s, 0);        if (index >= 0) {   // match found            try {                int end = index + s.length();                hilit.addHighlight(index, end, painter);                textArea.setCaretPosition(end);                entry.setBackground(entryBg);                message("'" + s + "' found. Press ESC to end search");            } catch (BadLocationException e) {                e.printStackTrace();            }        } else {            entry.setBackground(ERROR_COLOR);            message("'" + s + "' not found. Press ESC to start a new search");        }    }    void message(String msg) {        status.setText(msg);    }    // DocumentListener methods        public void insertUpdate(DocumentEvent ev) {        search();    }        public void removeUpdate(DocumentEvent ev) {        search();    }        public void changedUpdate(DocumentEvent ev) {    }        class CancelAction extends AbstractAction {        public void actionPerformed(ActionEvent ev) {            hilit.removeAllHighlights();            entry.setText("");            entry.setBackground(entryBg);        }    }            public static void main(String args[]) {        //Schedule a job for the event dispatch thread:        //creating and showing this application's GUI.	SwingUtilities.invokeLater(new Runnable() {            public void run() {                //Turn off metal's use of bold fonts                UIManager.put("swing.boldMetal", Boolean.FALSE);		new TextFieldDemo().setVisible(true);            }        });    }       }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -