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 [2015/05/10 18:51] – [Παράδειγμα 2ο] gthanosswing:text_fields [Unknown date] (current) – external edit (Unknown date) 127.0.0.1
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 5: Line 5:
 </WRAP> </WRAP>
  
-Ένα text field (υλοποιείται από την κλάση [[http://docs.oracle.com/javase/7/docs/api/javax/swing/JTextField.html|javax.swing.JTextField]]) είναι ένα πεδίο κειμένου, στο οποίο ο χρήστης μπορεί να καταχωρήσει κείμενο. Το text field καταλαμβάνει μόνο μία γραμμή και εκτείνεται σε συγκεκριμένο εύρος χαρακτήρων. Το περιεχόμενο όμως που μπορεί να γραφεί μέσα στο text field μπορεί να είναι πολύ μεγαλύτερο από το εύρος χαρακτήρων το οποίο καταλαμβάνει και είναι ορατό ή μπορεί να περιέχει και κείμενο πολλών γραμμών. Ένα text field ορίζεται όπως παρακάτω+Ένα text field (υλοποιείται από την κλάση [[http://docs.oracle.com/javase/7/docs/api/javax/swing/JTextField.html|javax.swing.JTextField]]) είναι ένα πεδίο κειμένου, στο οποίο ο χρήστης μπορεί να καταχωρήσει κείμενο. Το text field καταλαμβάνει μόνο μία γραμμή και εκτείνεται σε συγκεκριμένο εύρος χαρακτήρων. Το περιεχόμενο όμως που μπορεί να γραφεί μέσα στο text field μπορεί να είναι πολύ μεγαλύτερο από το εύρος χαρακτήρων που είναι ορατό και μπορεί να περιέχει και κείμενο πολλών γραμμών. Ένα //text field// ορίζεται όπως παρακάτω
  
 <code java> <code java>
Line 31: Line 31:
  
 <WRAP tip 80% center round > <WRAP tip 80% center round >
-Τόσο η κλάση **JTextArea** όσο και η κλάση **JTextField** είναι απόγονοι της κλάσης [[http://docs.oracle.com/javase/7/docs/api/javax/swing/text/JTextComponent.html|JTextComponent]]. Κατά συνέπεια, κληρονομούν πολλές από τις μεθόδους της κλάσης **JTextComponent**. Παρακάτω θα εξετάσουμε κάποιες μεθόδους που είναι κοινές για τις παραπάνω κλάσεις καθώς προέρχονται από την κλάση **JTextComponent**.+Τόσο η κλάση **JTextArea** όσο και η κλάση **JTextField** είναι απόγονοι της κλάσης [[http://docs.oracle.com/javase/7/docs/api/javax/swing/text/JTextComponent.html|JTextComponent]]. Παρακάτω θα εξετάσουμε κάποιες μεθόδους που είναι κοινές για τις παραπάνω κλάσεις καθώς προέρχονται από την κλάση [[https://docs.oracle.com/javase/7/docs/api/javax/swing/text/JTextComponent.html|JTextComponent]].
 </WRAP> </WRAP>
  
-===== Μέθοδοι της κλάσης JTextComponent =====+===== Μέθοδοι που κληρονομούνται από την κλάση JTextComponent =====
  
 ==== set/get text content ==== ==== set/get text content ====
Line 67: Line 67:
  
 <code java> <code java>
-textArea.setCaretPosition(textArea.getText().length()-10);//sets caret position 10 characters before the end +//sets caret position 10 characters before the end. 
-textArea.moveCaretPosition(10);                           //marks the last 10 characters of textArea.+textArea.setCaretPosition(textArea.getText().length()-10); 
 +//sets caret position 10 characters by 10 characters from its current position. 
 +textArea.moveCaretPosition(10);                           
  
 OR  OR 
  
 +//marks the last 10 characters of textArea.
 textArea.select(textArea.getText().length()-10, textArea.getText().length()); textArea.select(textArea.getText().length()-10, textArea.getText().length());
 </code> </code>
Line 103: Line 106:
 </code> </code>
  
-===== Scroll Panes (Scroll Bars) =====+===== Η κλάση Document =====
  
-Όταν ορίζετε ένα text area ορίζετε ένα ελάχιστο εύρος γραμμών και στηλών στις οποίες εκτείνεται το συγκεκριμένο text area, π.χ.  +Τόσο τα **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//).
-<code java> +
-JTextArea textArea = new JTextArea(NUMBER_OF_ROWS, NUMBER_OF_CHAR); +
-</code> +
-Ο χρήστης μπορεί να εισάγει κείμενο που εκτείνεται έξω από τα παραπάνω όρια. Εάν δεν έχετε ορίσει την ιδιότητα της αναδίπλωσης γραμμών στο text area, το κείμενο που βρίσκεται εκτός των παραπάνω ορίων μπορεί να φανεί μόνο αν ορίσετε  scroll barsώστε να μπορείτε να πλοηγήστε οριζόντια και κατακόρυφα έξω από τα παραπάνω όρια+
  
-Scroll bars ορίζονται από το component [[http://docs.oracle.com/javase/7/docs/api/javax/swing/JScrollPane.html|javax.swing.JScrollPane]]. Μπορείτε να φανταστείτε τα scroll bars σαν ένα κινούμενο παράθυρο πάνω από το συνολικό κείμενο που περιέχεται στο text area ή σε οποιοδήποτε άλλο component. Κάθε φορά που μετακινείτε ένα scroll bar μετακινείτε το παράθυρο ορατότητας πάνω από το component. Στην πραγματικότητα ένα text area με scroll bars είναι ένα παράθυρο ορατότητας (JScrollPane) πάνω από το text area, όπως φαίνεται στο παρακάτω σχήμα, όπου το παράθυρο ορατότητας αναφέρεται ως //View port//. +Οι μέθοδοι του interface [[http://docs.oracle.com/javase/7/docs/api/javax/swing/event/DocumentListener.html|javax.swing.event.DocumentListener]] δίνονται παρακάτω.
- +
-{{ :swing:jscrollpane.png |}} +
- +
-Για να ορίσετε ένα text area μέσα σε ένα JScrollPane απαιτείται μία δήλωση της μορφής+
 <code java> <code java>
-JScrollPane scolledTextArea = new JScrollPane(textArea);+//Gives notification that an attribute or set of attributes changed. 
 +void changedUpdate(DocumentEvent e); 
 +//Gives notification that there was an insert into the document. 
 +void insertUpdate(DocumentEvent e); 
 +//Gives notification that a portion of the document has been removed. 
 +void removeUpdate(DocumentEvent e);
 </code> </code>
  
-Σε κάθε JScrollPane object ορίζεται την συμπεριφορά του οριζόντιου ScrollBar από την παρακάτω μέθοδο οι οποία λαμβάνει ως ορίσματα τις τιμές που ακολουθούν. +Μπορείτε να δείτε το παρακάτω παράδειγμα χρήσης [[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> +
-public void setHorizontalScrollBarPolicy(int policy)  +
- +
-// επιτρεπόμενες τιμές +
-JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS +
-JScrollPane.HORIZONTAL_SCROLLBAR_NEVER +
-JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED +
-</code> +
- +
-Αντίστοιχα για το κάθετο ScrollBar  +
-<code java> +
-public void setVerticalScrollBarPolicy(int policy)  +
- +
-// επιτρεπόμενες τιμές +
-JScrollPane.VERTICAL_SCROLLBAR_ALWAYS +
-JScrollPane.VERTICAL_SCROLLBAR_NEVER +
-JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED +
-</code> +
- +
-===== Παραδείγματα ===== +
- +
-==== Παράδειγμα 1ο ==== +
- +
-Παράδειγμα χρήσης των παραπάνω components δίνεται παρακάτω (__απλουστευμένο__ από το [[http://docs.oracle.com/javase/tutorial/uiswing/components/editorpane.html|site της Oracle]]). +
- +
-<code java TextSamplerDemo.java> +
-package components;+
  
 +<code java DocumentEventDemo.java>
 import javax.swing.*; import javax.swing.*;
 import javax.swing.text.*; import javax.swing.text.*;
 +import javax.swing.event.*;
  
-import java.awt.*       //for layout managers and more +import java.awt.Dimension
-import java.awt.event.*   //for action events+import java.awt.BorderLayout; 
 +import java.awt.GridBagLayout; 
 +import java.awt.GridBagConstraints;
  
-import java.net.URL; +import java.awt.event.*;
-import java.io.IOException;+
  
-public class TextSamplerDemo extends JPanel +public class DocumentEventDemo extends JPanel  
-               implements ActionListener { +                               implements ActionListener { 
-  private String newline = "\n"+    JTextField textField
-  protected static final String textFieldString = "JTextField"+    JTextArea textArea
-  protected static final String passwordFieldString = "JPasswordField";+    JTextArea displayArea;
  
-  protected JLabel actionLabel;+    public DocumentEventDemo() { 
 +        super(new GridBagLayout()); 
 +        GridBagLayout gridbag = (GridBagLayout)getLayout(); 
 +        GridBagConstraints c = new GridBagConstraints();
  
-  public TextSamplerDemo() { +        JButton button = new JButton("Clear"); 
-    setLayout(new BorderLayout());+        button.addActionListener(this);
  
-    //Create a regular text field. +        textField = new JTextField(20); 
-    JTextField textField = new JTextField(10); +        textField.addActionListener(new MyTextActionListener()); 
-    textField.setActionCommand(textFieldString); +        textField.getDocument().addDocumentListener(new MyDocumentListener()); 
-    textField.addActionListener(this);+        textField.getDocument().putProperty("name", "Text Field");
  
-    //Create a password field. +        textArea = new JTextArea(); 
-    JPasswordField passwordField = new JPasswordField(10); +        textArea.getDocument().addDocumentListener(new MyDocumentListener()); 
-    passwordField.setActionCommand(passwordFieldString); +        textArea.getDocument().putProperty("name", "Text Area"); 
-    passwordField.addActionListener(this);    +        textArea.setLineWrap(true);
  
-    //Create some labels for the fields. +        JScrollPane scrollPane = new JScrollPane(textArea); 
-    JLabel textFieldLabel = new JLabel(textFieldString + ": "); +        scrollPane.setPreferredSize(new Dimension(200, 75)); 
-    textFieldLabel.setLabelFor(textField); +        scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
-    JLabel passwordFieldLabel = new JLabel(passwordFieldString + ": "); +        scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
-    passwordFieldLabel.setLabelFor(passwordField);+
  
-    //Create a label to put messages during an action event+        displayArea = new JTextArea(); 
-    actionLabel = new JLabel("Type text in a field and press Enter."); +        displayArea.setEditable(false); 
-    actionLabel.setBorder(BorderFactory.createEmptyBorder(10,0,0,0));+        JScrollPane displayScrollPane = new JScrollPane(displayArea); 
 +        displayScrollPane.setPreferredSize(new Dimension(20075));
  
-    //Lay out the text controls and the labels+        c.gridx = 0; 
-    JPanel textControlsPane new JPanel()+        c.gridy 0
-    GridBagLayout gridbag new GridBagLayout()+        c.weightx 1.0
-    GridBagConstraints c = new GridBagConstraints();+        c.fill = GridBagConstraints.HORIZONTAL; 
 +        gridbag.setConstraints(textField, c); 
 +        add(textField);
  
-    textControlsPane.setLayout(gridbag);+        c.gridx = 0; 
 +        c.gridy = 1; 
 +        c.weightx = 0.0; 
 +        c.gridheight = 2; 
 +        c.fill = GridBagConstraints.BOTH; 
 +        gridbag.setConstraints(scrollPane, c); 
 +        add(scrollPane);
  
-    JLabel[] labels {textFieldLabel, passwordFieldLabel }+        c.gridx 1
-    JTextField[] textFields {textField, passwordField }+        c.gridy 0
-    addLabelTextRows(labelstextFields, gridbag, textControlsPane);+        c.weightx = 1.0; 
 +        c.weighty = 1.0; 
 +        gridbag.setConstraints(displayScrollPanec); 
 +        add(displayScrollPane);
  
-    c.gridwidth GridBagConstraints.REMAINDER//last +        c.gridx 1
-    c.anchor GridBagConstraints.WEST+        c.gridy 2
-    c.weightx = 1.0; +        c.weightx = 0.0; 
-    textControlsPane.add(actionLabel, c)+        c.gridheight = 1
-    textControlsPane.setBorder( +        c.weighty = 0.0; 
-        BorderFactory.createCompoundBorder( +        c.fill = GridBagConstraints.HORIZONTAL; 
-                BorderFactory.createTitledBorder("Text Fields"), +        gridbag.setConstraints(buttonc)
-                BorderFactory.createEmptyBorder(5,5,5,5)));+        add(button);
  
-    //Create a text area. +        setPreferredSize(new Dimension(450, 250)); 
-    JTextArea textArea = new JTextArea( +        setBorder(BorderFactory.createEmptyBorder(20,20,20,20)); 
-        "This is an editable JTextArea. " + +    }
-        "A text area is a \"plain\" text component, " + +
-        "which means that although it can display text " + +
-        "in any font, all of the text is in the same font." +
-    ); +
-    textArea.setFont(new Font("Serif", Font.ITALIC, 16)); +
-    textArea.setLineWrap(true); +
-    textArea.setWrapStyleWord(true); +
-    JScrollPane areaScrollPane = new JScrollPane(textArea); +
-    areaScrollPane.setVerticalScrollBarPolicy( +
-            JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); +
-    areaScrollPane.setPreferredSize(new Dimension(250, 250)); +
-    areaScrollPane.setBorder( +
-      BorderFactory.createCompoundBorder( +
-        BorderFactory.createCompoundBorder( +
-                BorderFactory.createTitledBorder("Plain Text"), +
-                BorderFactory.createEmptyBorder(5,5,5,5)), +
-        areaScrollPane.getBorder()));+
  
-    //Put everything together. +    class MyDocumentListener implements DocumentListener { 
-    JPanel leftPane = new JPanel(new BorderLayout()); +         
-    leftPane.add(textControlsPane,  +        public void insertUpdate(DocumentEvent e) { 
-           BorderLayout.PAGE_START); +            updateLog(e, "+"); 
-    leftPane.add(areaScrollPane, +        } 
-           BorderLayout.CENTER);+        public void removeUpdate(DocumentEvent e) { 
 +            updateLog(e, "-"); 
 +        } 
 +        public void changedUpdate(DocumentEvent e) { 
 +            //Plain text components don't fire these events. 
 +        }
  
-    add(leftPaneBorderLayout.LINE_START); +        public void updateLog(DocumentEvent eString action) { 
-  } +            Document doc = (Document)e.getDocument(); 
- +            int changeLength = e.getLength(); 
-  private void addLabelTextRows(JLabel[] labels, +            displayArea.append
-                  JTextField[] textFields, +                "["+doc.getProperty("name")+"" +  
-                  GridBagLayout gridbag, +                action + changeLength + " character" 
-                  Container container{ +                ((changeLength == 1? "\n" : "s\n") + 
-    GridBagConstraints c new GridBagConstraints(); +                "  Text length " + doc.getLength() + "\n"); 
-    c.anchor = GridBagConstraints.EAST+            displayArea.setCaretPosition(displayArea.getDocument().getLength()); 
-    int numLabels = labels.length;+        } 
 +    }
  
-    for (int i = 0; i < numLabels; i++) +    class MyTextActionListener implements ActionListener 
-      c.gridwidth = GridBagConstraints.RELATIVE; //next-to-last +        /** Handle the text field Return*
-      c.fill GridBagConstraints.NONE   //reset to default +        public void actionPerformed(ActionEvent e) { 
-      c.weightx 0.0;             //reset to default +            int selStart textArea.getSelectionStart()
-      container.add(labels[i], c);+            int selEnd textArea.getSelectionEnd();
  
-      c.gridwidth = GridBagConstraints.REMAINDER;   //end row +            textArea.replaceRange(textField.getText(), 
-      c.fill = GridBagConstraints.HORIZONTAL+                                  selStart, selEnd)
-      c.weightx = 1.0; +            textField.selectAll(); 
-      container.add(textFields[i], c);+        }
     }     }
-  } 
  
-  public void actionPerformed(ActionEvent e) { +    /** Handle button click. */ 
-    String prefix = "You typed \""; +    public void actionPerformed(ActionEvent e) { 
-    if (textFieldString.equals(e.getActionCommand())) { +        displayArea.setText(""); 
-      JTextField source = (JTextField)e.getSource(); +        textField.requestFocus();
-      actionLabel.setText(prefix + source.getText() + "\""); +
-    } else if (passwordFieldString.equals(e.getActionCommand())) { +
-      JPasswordField source = (JPasswordField)e.getSource(); +
-      actionLabel.setText(prefix + new String(source.getPassword()) +
-                + "\"");+
     }     }
-  } 
  
-  /** +    /** 
-   * Create the GUI and show it.  For thread safety, +     * Create the GUI and show it.  For thread safety, 
-   * this method should be invoked from the +     * this method should be invoked from the 
-   * event dispatch thread. +     * event-dispatching thread. 
-   */ +     */ 
-  private static void createAndShowGUI() { +    private static void createAndShowGUI() { 
-    //Create and set up the window. +        //Create and set up the window. 
-    JFrame frame = new JFrame("TextSamplerDemo"); +        JFrame frame = new JFrame("DocumentEventDemo"); 
-    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);+        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  
-    //Add content to the window+        //Create and set up the content pane
-    frame.add(new TextSamplerDemo());+        JComponent newContentPane = new DocumentEventDemo()
 +        newContentPane.setOpaque(true); //content panes must be opaque 
 +        frame.setContentPane(newContentPane);
  
-    //Display the window. +        //Display the window. 
-    frame.pack(); +        frame.pack(); 
-    frame.setVisible(true); +        frame.setVisible(true); 
-  }+    }
  
-  public static void main(String[] args) { +    public static void main(String[] args) { 
-    //Schedule a job for the event dispatching thread: +        //Schedule a job for the event-dispatching thread: 
-    //creating and showing this application's GUI. +        //creating and showing this application's GUI. 
-    SwingUtilities.invokeLater(new Runnable() { +        javax.swing.SwingUtilities.invokeLater(new Runnable() { 
-      public void run() { +            public void run() { 
-         //Turn off metal's use of bold fonts +                createAndShowGUI(); 
- UIManager.put("swing.boldMetal", Boolean.FALSE); +            
- createAndShowGUI(); +        }); 
-      +    }
-    }); +
-  }+
 } }
  
 </code> </code>
-  
-==== Παράδειγμα 2ο ==== 
- 
-Το 2ο παράδειγμα είναι από το βιβλίο του Savitch.  
-<code java ScollBarDemo.java> 
-import javax.swing.*; 
-import java.awt.*; 
-import java.awt.event.*; 
- 
-public class ScrollBarDemo extends JFrame implements ActionListener { 
-  public static final int WIDTH = 600; 
-  public static final int HEIGHT = 400; 
-  public static final int LINES = 15; 
-  public static final int CHAR_PER_LINE = 30; 
-  private JTextArea memoDisplay; 
-  private String memo1; 
-  private String memo2; 
- 
-  public static void main(String[] args)  { 
-    ScrollBarDemo gui = new ScrollBarDemo(); 
-    gui.setVisible(true); 
-  } 
-   
-  public ScrollBarDemo() { 
-    super("Scroll Bars Demo"); 
-    setSize(WIDTH, HEIGHT); 
-    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
-    JPanel buttonPanel = new JPanel(); 
-    buttonPanel.setBackground(Color.LIGHT_GRAY); 
-    buttonPanel.setLayout(new FlowLayout()); 
-    JButton memo1Button = new JButton("Save Memo 1"); 
-    memo1Button.addActionListener(this); 
-    buttonPanel.add(memo1Button); 
-    JButton memo2Button = new JButton("Save Memo 2"); 
-    memo2Button.addActionListener(this); 
-    buttonPanel.add(memo2Button); 
-    JButton clearButton = new JButton("Clear"); 
-    clearButton.addActionListener(this); 
-    buttonPanel.add(clearButton); 
-    JButton get1Button = new JButton("Get Memo 1"); 
-    get1Button.addActionListener(this); 
-    buttonPanel.add(get1Button); 
-    JButton get2Button = new JButton("Get Memo 2"); 
-    get2Button.addActionListener(this); 
-    buttonPanel.add(get2Button); 
-    add(buttonPanel, BorderLayout.SOUTH); 
-    JPanel textPanel = new JPanel(); 
-    textPanel.setBackground(Color.BLUE); 
- 
-    memoDisplay = new JTextArea(LINES, CHAR_PER_LINE); 
-    memoDisplay.setBackground(Color.WHITE); 
-    JScrollPane scrolledText = new JScrollPane(memoDisplay); 
-    scrolledText.setHorizontalScrollBarPolicy( 
-    JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
-    scrolledText.setVerticalScrollBarPolicy( 
-    JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 
-    textPanel.add(scrolledText); 
-    add(textPanel, BorderLayout.CENTER); 
-  } 
-   
-  public void actionPerformed(ActionEvent e) { 
-    String actionCommand = e.getActionCommand(); 
-    if (actionCommand.equals("Save Memo 1")) 
-      memo1 = memoDisplay.getText(); 
-    else if (actionCommand.equals("Save Memo 2")) 
-      memo2 = memoDisplay.getText(); 
-    else if (actionCommand.equals("Clear")) 
-      memoDisplay.setText(""); 
-    else if (actionCommand.equals("Get Memo 1")) 
-      memoDisplay.setText(memo1); 
-    else if (actionCommand.equals("Get Memo 2")) 
-      memoDisplay.setText(memo2); 
-    else 
-      memoDisplay.setText("Error in memo interface"); 
-  } 
-   
-} 
-</code> 
- 
-===== Document Listeners ===== 
- 
-Κάθε 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 δίνονται παρακάτω. 
-<code java> 
-void changedUpdate(DocumentEvent e); 
-//Gives notification that an attribute or set of attributes changed. 
- 
-void insertUpdate(DocumentEvent e); 
-//Gives notification that there was an insert into the document. 
- 
-void removeUpdate(DocumentEvent e); 
-//Gives notification that a portion of the document has been removed. 
-</code> 
- 
  
 +| Προηγούμενο: [[:swing:buttons | Buttons, CheckBoxes & RadioButtons ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:swing:jscrollpane | Η κλάση JScrollPane ]] |
  
swing/text_fields.1431283912.txt.gz · Last modified: 2015/05/10 17:51 (external edit)