This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision | Previous revision Next revision Both sides next revision | ||
|
swing:text_fields [2018/03/27 19:40] |
swing:text_fields [2018/03/27 20:40] gthanos [Η κλάση Document] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Text Fields & Text Areas ====== | ||
| + | |||
| + | <WRAP info 70% round center> | ||
| + | Σε αυτή την ενότητα θα εξετάσουμε τα πεδία κειμένου text field και text area στο οποία το περιεχόμενο κείμενο έχει ενιαία μορφοποίηση, | ||
| + | </ | ||
| + | |||
| + | Ένα text field (υλοποιείται από την κλάση [[http:// | ||
| + | |||
| + | <code java> | ||
| + | int NUMBER_OF_CHAR = 20; | ||
| + | JTextField textField = new JTextField(NUMBER_OF_CHAR); | ||
| + | or | ||
| + | JTextField textField = new JTextField(" | ||
| + | </ | ||
| + | |||
| + | Οι παραπάνω ορισμοί σημαίνουν τα εξής: | ||
| + | - Δημιουργούμε ένα text field στο οποίο θα πρέπει να είναι ορατοί τουλάχιστον 20 χαρακτήρες (μπορεί να είναι και περισσότεροι). | ||
| + | - Ο 2ος κατασκευαστής δημιουργεί το παραπάνω text field που περιέχει το String **" | ||
| + | |||
| + | Εκτός του component JTextField υπάρχει και το component [[http:// | ||
| + | |||
| + | Σε αναλογία με το text field, ένα text area (υλοποιείται από την κλάση [[http:// | ||
| + | |||
| + | <code java> | ||
| + | int NUMBER_OF_CHAR = 20; | ||
| + | int NUMBER_OF_ROWS = 5; | ||
| + | JTextArea textArea = new JTextArea(NUMBER_OF_ROWS, | ||
| + | OR | ||
| + | JTextArea textArea = new JTextArea(" | ||
| + | </ | ||
| + | |||
| + | <WRAP tip 80% center round > | ||
| + | Τόσο η κλάση **JTextArea** όσο και η κλάση **JTextField** είναι απόγονοι της κλάσης [[http:// | ||
| + | </ | ||
| + | |||
| + | ===== Μέθοδοι που κληρονομούνται από την κλάση JTextComponent ===== | ||
| + | |||
| + | ==== set/get text content ==== | ||
| + | |||
| + | Μπορείτε να λάβετε ή να θέσετε το περιεχόμενο ενός text field ή text area μέσα από τις μεθόδους '' | ||
| + | <code java> | ||
| + | String text = textField.getText(); | ||
| + | textField.setText(text + " | ||
| + | </ | ||
| + | |||
| + | Εάν θέλετε να λάβετε το κείμενο που έχει πιθανόν μαρκάρει ο χρήστης μπορείτε να χρησιμοποιήσετε την μέθοδο | ||
| + | <code java> | ||
| + | public String getSelectedText(); | ||
| + | </ | ||
| + | |||
| + | ==== Editable or Non-editable field ==== | ||
| + | |||
| + | Μπορείτε να ορίσετε ένα text component να είναι non-editable ως εξής: | ||
| + | <code java> | ||
| + | textArea.setEditable(false); | ||
| + | textArea.setEditable(true); | ||
| + | </ | ||
| + | |||
| + | ==== Λάβετε την θέση του κέρσορα ή θέστε την θέση αυτή ==== | ||
| + | |||
| + | <code java> | ||
| + | int pos = textArea.getCaretPosition(); | ||
| + | textArea.setCaretPosition(textArea.getText().length()-10);// | ||
| + | </ | ||
| + | |||
| + | ==== Μαρκάρετε περιεχόμενο ==== | ||
| + | |||
| + | <code java> | ||
| + | //sets caret position 10 characters before the end. | ||
| + | textArea.setCaretPosition(textArea.getText().length()-10); | ||
| + | //sets caret position 10 characters by 10 characters from its current position. | ||
| + | textArea.moveCaretPosition(10); | ||
| + | |||
| + | OR | ||
| + | |||
| + | //marks the last 10 characters of textArea. | ||
| + | textArea.select(textArea.getText().length()-10, | ||
| + | </ | ||
| + | |||
| + | ==== Αλλάξτε το χρώμα των χαρακτήρων ή το χρώμα στο background ==== | ||
| + | |||
| + | Η αλλαγή στο χρώμα των χαρακτήρων μπορεί να γίνει μέσα από την μέθοδο '' | ||
| + | <code java> | ||
| + | textArea.setForeground(Color.RED); | ||
| + | </ | ||
| + | |||
| + | Αντίστοιχα, | ||
| + | <code java> | ||
| + | textArea.setBackground(Color.BLUE); | ||
| + | </ | ||
| + | |||
| + | ===== Μέθοδοι των κλάσεων JTextField και JTextArea ===== | ||
| + | |||
| + | Είναι πιθανό σε ένα text field ή text area να θέλετε να ορίσετε την δική σας γραμματοσειρά. Αυτό μπορείτε να το κάνετε με την βοήθεια της κλάσης [[http:// | ||
| + | |||
| + | <code java> | ||
| + | void setFont(Font f); | ||
| + | </ | ||
| + | |||
| + | ==== Line Wrap σε text area ==== | ||
| + | |||
| + | Σας δίνεται η δυνατότητα να ορίσετε σε ένα text area να αναδιπλώνει τις γραμμές του περιεχομένου προσαρμοζόμενο στο μέγεθος διαθέσιμων στηλών. Η default συμπεριφορά του text area είναι να μην κάνει αναδίπλωση γραμμών. Εάν δεν γίνεται αναδίπλωση, | ||
| + | <code java> | ||
| + | textArea.setLineWrap(true); | ||
| + | textArea.setWrapStyleWord(true); | ||
| + | </ | ||
| + | |||
| + | ===== Η κλάση Document ===== | ||
| + | |||
| + | Τόσο τα **TextFields** όσο και τα **TextAreas** περιέχουν ένα αντικείμενο της κλάσης [[https:// | ||
| + | |||
| + | Οι μέθοδοι του interface [[http:// | ||
| + | <code java> | ||
| + | //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); | ||
| + | </ | ||
| + | |||
| + | Μπορείτε να δείτε το παρακάτω παράδειγμα χρήσης [[http:// | ||
| + | |||
| + | <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 | ||
| + | | ||
| + | JTextField textField; | ||
| + | JTextArea textArea; | ||
| + | JTextArea displayArea; | ||
| + | |||
| + | public DocumentEventDemo() { | ||
| + | super(new GridBagLayout()); | ||
| + | GridBagLayout gridbag = (GridBagLayout)getLayout(); | ||
| + | GridBagConstraints c = new GridBagConstraints(); | ||
| + | |||
| + | JButton button = new JButton(" | ||
| + | button.addActionListener(this); | ||
| + | |||
| + | textField = new JTextField(20); | ||
| + | textField.addActionListener(new MyTextActionListener()); | ||
| + | textField.getDocument().addDocumentListener(new MyDocumentListener()); | ||
| + | textField.getDocument().putProperty(" | ||
| + | |||
| + | textArea = new JTextArea(); | ||
| + | textArea.getDocument().addDocumentListener(new MyDocumentListener()); | ||
| + | textArea.getDocument().putProperty(" | ||
| + | textArea.setLineWrap(true); | ||
| + | |||
| + | JScrollPane scrollPane = new JScrollPane(textArea); | ||
| + | scrollPane.setPreferredSize(new Dimension(200, | ||
| + | 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, | ||
| + | |||
| + | c.gridx = 0; | ||
| + | c.gridy = 0; | ||
| + | c.weightx = 1.0; | ||
| + | c.fill = GridBagConstraints.HORIZONTAL; | ||
| + | gridbag.setConstraints(textField, | ||
| + | add(textField); | ||
| + | |||
| + | c.gridx = 0; | ||
| + | c.gridy = 1; | ||
| + | c.weightx = 0.0; | ||
| + | c.gridheight = 2; | ||
| + | c.fill = GridBagConstraints.BOTH; | ||
| + | gridbag.setConstraints(scrollPane, | ||
| + | add(scrollPane); | ||
| + | |||
| + | c.gridx = 1; | ||
| + | c.gridy = 0; | ||
| + | c.weightx = 1.0; | ||
| + | c.weighty = 1.0; | ||
| + | gridbag.setConstraints(displayScrollPane, | ||
| + | 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, | ||
| + | add(button); | ||
| + | |||
| + | setPreferredSize(new Dimension(450, | ||
| + | setBorder(BorderFactory.createEmptyBorder(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( | ||
| + | " | ||
| + | action + changeLength + " character" | ||
| + | ((changeLength == 1) ? " | ||
| + | " | ||
| + | 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(" | ||
| + | frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
| + | |||
| + | //Create and set up the content pane. | ||
| + | JComponent newContentPane = new DocumentEventDemo(); | ||
| + | newContentPane.setOpaque(true); | ||
| + | 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' | ||
| + | javax.swing.SwingUtilities.invokeLater(new Runnable() { | ||
| + | public void run() { | ||
| + | createAndShowGUI(); | ||
| + | } | ||
| + | }); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | | Προηγούμενο: | ||