swing:text_fields

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
swing:text_fields [2018/03/27 16:29]
gthanos
swing:text_fields [2018/03/27 20:40]
gthanos [Η κλάση Document]
Line 1: Line 1:
-====== Text FieldsText Areas & Scroll Panes (Scroll Bars) ======+====== 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:scrollpane | Η κλάση JScrollPane ]] |
  
swing/text_fields.txt · Last modified: 2018/03/27 19:40 (external edit)