User Tools

Site Tools


swing:text_fields

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
swing:text_fields [2018/03/27 16:31] gthanosswing:text_fields [Unknown date] (current) – external edit (Unknown date) 127.0.0.1
Line 1: Line 1:
-====== Text FieldsText Areas ======+====== Text Fields Text Areas ======
  
 <WRAP info 70% round center> <WRAP info 70% round center>
Line 106: Line 106:
 </code> </code>
  
-===== Document Listeners =====+===== Η κλάση Document =====
  
-Κάθε component ή κάθε κατηγορία component συνδέεται με κάποιο Listener InterfaceΤα παραπάνω text related components συνδέονται με το interface [[http://docs.oracle.com/javase/7/docs/api/javax/swing/event/DocumentListener.html|javax.swing.event.DocumentListener]]. Οι μέθοδοι του συγκεκριμένου interface δίνονται παρακάτω.+Τόσο τα **TextFields** όσο και τα **TextAreas** περιέχουν ένα αντικείμενο της κλάσης [[https://docs.oracle.com/javase/8/docs/api/javax/swing/text/Document.html|Document]]. Η κλάση **Document** διαχειρίζεται το περιεχόμενο κείμενο όλων των κλάσεων αυτού του τύπου και μπορεί να σας επιστρέψει όλο ή μέρος από το περιεχόμενο του //component//. Ένα από τα βασικά χαρακτηριστικά του **Document** είναι ότι σε κάθε μεταβολή του περιεχομένου παράγει //events// του τύπου [[https://docs.oracle.com/javase/8/docs/api/javax/swing/event/DocumentEvent.html|DocumentEvent]], τα οποία μπορείτε να "πιάσετε" μέσω ενός αντικειμένου τύπου [[https://docs.oracle.com/javase/8/docs/api/javax/swing/event/DocumentListener.html|DocumentListener]] (//interface//). 
 + 
 +Οι μέθοδοι του interface [[http://docs.oracle.com/javase/7/docs/api/javax/swing/event/DocumentListener.html|javax.swing.event.DocumentListener]] δίνονται παρακάτω.
 <code java> <code java>
-void changedUpdate(DocumentEvent e); 
 //Gives notification that an attribute or set of attributes changed. //Gives notification that an attribute or set of attributes changed.
- +void changedUpdate(DocumentEvent e);
-void insertUpdate(DocumentEvent e);+
 //Gives notification that there was an insert into the document. //Gives notification that there was an insert into the document.
- +void insertUpdate(DocumentEvent e);
-void removeUpdate(DocumentEvent e);+
 //Gives notification that a portion of the document has been removed. //Gives notification that a portion of the document has been removed.
 +void removeUpdate(DocumentEvent e);
 </code> </code>
  
 +Μπορείτε να δείτε το παρακάτω παράδειγμα χρήσης [[http://docs.oracle.com/javase/7/docs/api/javax/swing/event/DocumentListener.html|DocumentEventListeners]] από το [[https://docs.oracle.com/javase/tutorial/uiswing/events/documentlistener.html|site της Oracle]] (παραλλαγμένο ελαφρά).
 +
 +<code java DocumentEventDemo.java>
 +import javax.swing.*;
 +import javax.swing.text.*;
 +import javax.swing.event.*;
 +
 +import java.awt.Dimension;
 +import java.awt.BorderLayout;
 +import java.awt.GridBagLayout;
 +import java.awt.GridBagConstraints;
 +
 +import java.awt.event.*;
 +
 +public class DocumentEventDemo extends JPanel 
 +                               implements ActionListener {
 +    JTextField textField;
 +    JTextArea textArea;
 +    JTextArea displayArea;
 +
 +    public DocumentEventDemo() {
 +        super(new GridBagLayout());
 +        GridBagLayout gridbag = (GridBagLayout)getLayout();
 +        GridBagConstraints c = new GridBagConstraints();
 +
 +        JButton button = new JButton("Clear");
 +        button.addActionListener(this);
 +
 +        textField = new JTextField(20);
 +        textField.addActionListener(new MyTextActionListener());
 +        textField.getDocument().addDocumentListener(new MyDocumentListener());
 +        textField.getDocument().putProperty("name", "Text Field");
 +
 +        textArea = new JTextArea();
 +        textArea.getDocument().addDocumentListener(new MyDocumentListener());
 +        textArea.getDocument().putProperty("name", "Text Area");
 +        textArea.setLineWrap(true);
 +
 +        JScrollPane scrollPane = new JScrollPane(textArea);
 +        scrollPane.setPreferredSize(new Dimension(200, 75));
 +        scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
 +        scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
 +
 +        displayArea = new JTextArea();
 +        displayArea.setEditable(false);
 +        JScrollPane displayScrollPane = new JScrollPane(displayArea);
 +        displayScrollPane.setPreferredSize(new Dimension(200, 75));
 +
 +        c.gridx = 0;
 +        c.gridy = 0;
 +        c.weightx = 1.0;
 +        c.fill = GridBagConstraints.HORIZONTAL;
 +        gridbag.setConstraints(textField, c);
 +        add(textField);
 +
 +        c.gridx = 0;
 +        c.gridy = 1;
 +        c.weightx = 0.0;
 +        c.gridheight = 2;
 +        c.fill = GridBagConstraints.BOTH;
 +        gridbag.setConstraints(scrollPane, c);
 +        add(scrollPane);
 +
 +        c.gridx = 1;
 +        c.gridy = 0;
 +        c.weightx = 1.0;
 +        c.weighty = 1.0;
 +        gridbag.setConstraints(displayScrollPane, c);
 +        add(displayScrollPane);
 +
 +        c.gridx = 1;
 +        c.gridy = 2;
 +        c.weightx = 0.0;
 +        c.gridheight = 1;
 +        c.weighty = 0.0;
 +        c.fill = GridBagConstraints.HORIZONTAL;
 +        gridbag.setConstraints(button, c);
 +        add(button);
 +
 +        setPreferredSize(new Dimension(450, 250));
 +        setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
 +    }
 +
 +    class MyDocumentListener implements DocumentListener {
 +        
 +        public void insertUpdate(DocumentEvent e) {
 +            updateLog(e, "+");
 +        }
 +        public void removeUpdate(DocumentEvent e) {
 +            updateLog(e, "-");
 +        }
 +        public void changedUpdate(DocumentEvent e) {
 +            //Plain text components don't fire these events.
 +        }
 +
 +        public void updateLog(DocumentEvent e, String action) {
 +            Document doc = (Document)e.getDocument();
 +            int changeLength = e.getLength();
 +            displayArea.append(
 +                "["+doc.getProperty("name")+"] " + 
 +                action + changeLength + " character"
 +                ((changeLength == 1) ? "\n" : "s\n") +
 +                "  Text length = " + doc.getLength() + "\n");
 +            displayArea.setCaretPosition(displayArea.getDocument().getLength());
 +        }
 +    }
 +
 +    class MyTextActionListener implements ActionListener {
 +        /** Handle the text field Return. */
 +        public void actionPerformed(ActionEvent e) {
 +            int selStart = textArea.getSelectionStart();
 +            int selEnd = textArea.getSelectionEnd();
 +
 +            textArea.replaceRange(textField.getText(),
 +                                  selStart, selEnd);
 +            textField.selectAll();
 +        }
 +    }
 +
 +    /** Handle button click. */
 +    public void actionPerformed(ActionEvent e) {
 +        displayArea.setText("");
 +        textField.requestFocus();
 +    }
 +
 +    /**
 +     * Create the GUI and show it.  For thread safety,
 +     * this method should be invoked from the
 +     * event-dispatching thread.
 +     */
 +    private static void createAndShowGUI() {
 +        //Create and set up the window.
 +        JFrame frame = new JFrame("DocumentEventDemo");
 +        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 +
 +        //Create and set up the content pane.
 +        JComponent newContentPane = new DocumentEventDemo();
 +        newContentPane.setOpaque(true); //content panes must be opaque
 +        frame.setContentPane(newContentPane);
 +
 +        //Display the window.
 +        frame.pack();
 +        frame.setVisible(true);
 +    }
 +
 +    public static void main(String[] args) {
 +        //Schedule a job for the event-dispatching thread:
 +        //creating and showing this application's GUI.
 +        javax.swing.SwingUtilities.invokeLater(new Runnable() {
 +            public void run() {
 +                createAndShowGUI();
 +            }
 +        });
 +    }
 +}
 +
 +</code>
  
 +| Προηγούμενο: [[:swing:buttons | Buttons, CheckBoxes & RadioButtons ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:swing:jscrollpane | Η κλάση JScrollPane ]] |
  
swing/text_fields.1522168315.txt.gz · Last modified: 2018/03/27 15:31 (external edit)