package elte.java2_utikalauz5.swing; /** Szövegmezők használata Swingben.
A felhasználói felület tetején egy sima egysoros szövegmező, alatta egy jelszóbeviteli mező, ezek alatt középen pedig a többsoros naplózó komponens látható. Minden szövegmodell-esemény és kurzorpozíció-változás naplózásra kerül. A soreditor és a jelszómező azonos szövegmodellel rendelkeznek. Ezen saját szövegmodell lehetővé teszi a szövegmező tartalma hosszának maximalizálását, azaz egy adott hosszt soha nem léphet túl a szövegmezők tartalma. Szintén modell szintjén szabályozható a sortörés karakterek szűrése. Ez arra jó, hogy egysoros szövegmezőbe történő többsoros szöveg beszúrásakor megakadályozzuk a szövegmező többsorossá válását. A felhasználói felület alján található vezérlőpanel gombjaival a megjelenítési stílus váltásán kívül állíthatjuk a szövegmezők szerkeszthetőségét, engedélyezettségét, a szöveg igazítását, a szövegmodell hosszkorlátozását, illetve a sortördelés karakter kiszűrését, valamint a többsoros napló szövegtördelését. Közvetlenül a vezérlőpanel felett három formázott szövegmező teszi lehetővé dátum, törtszám, valamint tetszőleges maszkolt szöveg bevitelét. Az alkalmazandó maszkot a legfelső soreditorban kell megadni, majd meg kell nyomni a formázott mezők melletti gombot. Az összes szövegbeviteli mező megjelenítése nyomkövethető. @link.forrásfájl {@docRoot}/../data/swing/src SzovegTeszt.java @link.letöltés {@docRoot}/../data/swing SzovegTeszt.jar @since Java 2 Útikalauz programozóknak */ public class SzovegTeszt extends SwingTeszt implements javax.swing.event. CaretListener,javax.swing.event.DocumentListener,java.awt.event.ItemListener{ /** Verziószám. */ private final static long serialVersionUID = 15L; /** Indítás alkalmazásként. @param argumentumok Az indításkor megadott paraméterek. */ public static void main(String argumentumok[]) { new SzovegTeszt().init(argumentumok); } /** Applet leírása. @return A példaprogram leírása */ @Override public String getAppletInfo() { return "Szövegbeviteli mezők használatát bemutató tesztprogram"; } /** Szövegmodell maximális hossza */ private static final int MAXHOSSZ = 20; /** Szövegbeviteli mező */ private javax.swing.JTextField soreditor; /** Jelszóbeviteli mező */ private javax.swing.JPasswordField jelszó; /** Formázott szövegmező maszkja */ private javax.swing.text.MaskFormatter maszk; /** Formázott szövegmező */ private javax.swing.JFormattedTextField maszkeditor; /** GUI felépítése */ @Override protected void felépít() { final javax.swing.JCheckBox egysoros = //sortöréskorrekció kapcsolója new javax.swing.JCheckBox("egysoros?", true); final javax.swing.JCheckBox korlát = //szöveghosszkorlátozás kapcsolója new javax.swing.JCheckBox("szöveghossz korlátozva?", false); javax.swing.text.PlainDocument modell = new javax.swing.text. PlainDocument() { /** Verziószám. */ private final static long serialVersionUID = 15L; /** Szöveg beszúrása. Hosszellenőrzés és sortörésszűrés. @param pozíció Beszúrási pozíció. @param szöveg Beszúrandó szöveg. @param as Szövegattribútumok. @throws BadLocationException Érvénytelen beszúrási pozíció esetén. */ @Override public void insertString(int pozíció, String szöveg, javax.swing.text.AttributeSet as) throws javax.swing.text.BadLocationException { if (egysoros.isSelected()) szöveg = szöveg.replace('\n', ' '); if (korlát.isSelected() && szöveg.length()+getLength()>MAXHOSSZ) System.out.print((char)7);//hosszkorlátot nem lehet túllépni else super.insertString(pozíció, szöveg, as); } }; soreditor = new javax.swing.JTextField(modell, "", 10); add(soreditor, java.awt.BorderLayout.NORTH); modell.addDocumentListener( this ); //adatváltozás figyelése soreditor.addCaretListener(this); //kurzor figyelése soreditor.addActionListener(this); //Enter figyelése nyomkövetés(soreditor); //nyomkövethető a megjelenítés javax.swing.JPanel panel = new javax.swing.JPanel( new java.awt.BorderLayout()); add(panel); //belső panel panel.add(new javax.swing.JScrollPane(napló)); //többsoros szövegmező napló.setEditable(true); //szerkeszthető nyomkövetés(napló); //nyomkövethető a megjelenítés jelszó = new javax.swing.JPasswordField(); panel.add(jelszó, java.awt.BorderLayout.NORTH); jelszó.setDocument(modell); //jelszómező jelszó.addCaretListener(this); //kurzor figyelése jelszó.addActionListener(this); //Enter figyelése nyomkövetés(jelszó); //nyomkövethető a megjelenítés javax.swing.JPanel panel2 = new javax.swing.JPanel(); //formázott mezők panel.add(panel2, java.awt.BorderLayout.SOUTH); javax.swing.JFormattedTextField formás = new javax.swing. JFormattedTextField(); formás.setColumns(10); formás.setValue(new java.util.Date()); //dátumbeviteli mező nyomkövetés(formás); //nyomkövethető a megjelenítés panel2.add(formás); formás = new javax.swing.JFormattedTextField(); formás.setColumns(10); formás.setValue(new Float(1.2)); //törtszámbeviteli mező nyomkövetés(formás); //nyomkövethető a megjelenítés panel2.add(formás); maszk = new javax.swing.text.MaskFormatter(); maszkeditor = new javax.swing.JFormattedTextField(maszk); //formázott maszkeditor.setColumns(10); panel2.add(maszkeditor); nyomkövetés(maszkeditor); //nyomkövethető a megjelenítés javax.swing.AbstractButton gomb = new javax.swing.JButton("Maszkol"); panel2.add(gomb); gomb.setActionCommand("maszk"); gomb.addActionListener(this); //gomb figyelése panel = new javax.swing.JPanel(); //vezérlő panel add(panel, java.awt.BorderLayout.SOUTH); panel.setPreferredSize(new java.awt.Dimension(480, 180)); gomb = new javax.swing.JCheckBox("engedélyezve?", true); panel.add(gomb); gomb.setToolTipText("JTextComponent.enabled"); gomb.setActionCommand("enable"); gomb.addActionListener(this); //gomb figyelése gomb = new javax.swing.JCheckBox("szerkeszthető?", true); //szerkesztés panel.add(gomb); gomb.setToolTipText("JTextComponent.editable"); gomb.setActionCommand("editable"); gomb.addActionListener(this); //gomb figyelése panel.add(egysoros); //egysoros megjelenítés panel.add(korlát); //hosszkorlátozás korlát.setToolTipText(Integer.toString(MAXHOSSZ)); javax.swing.JLabel címke = new javax.swing.JLabel("szövegigazítás:"); //szövegigazítás panel.add(címke); címke.setToolTipText("JTextField.setHorizontalAlignment"); javax.swing.JComboBox cb=new javax.swing.JComboBox(new Object[] {"LEFT", "CENTER","RIGHT"}); panel.add(cb); cb.setToolTipText("SwingConstants"); cb.addItemListener(this); //kiválasztás figyelése gomb=new javax.swing.JCheckBox("sorok tördelése?", napló.getLineWrap()); panel.add(gomb); //tördelés gomb.setToolTipText("JTextArea.lineWrap"); gomb.setActionCommand("wrap"); gomb.addActionListener(this); //gomb figyelése gomb = new javax.swing.JCheckBox("tördelés csak szavaknál?", napló.getWrapStyleWord()); panel.add(gomb); gomb.setToolTipText("JTextArea.wrapStyleWord"); gomb.setActionCommand("word"); gomb.addActionListener(this); //gomb figyelése for (javax.swing.Action váltás : stílusváltások) //stílusváltó gombok panel.add(new javax.swing.JButton(váltás)); } /** Gombnyomások kezelése. @param ae Gomblenyomási esemény */ public void actionPerformed(java.awt.event.ActionEvent ae) { if (ae.getSource() instanceof javax.swing.JTextField) { //Enter naplóz("ActionEvent: forrás="+ae.getSource().getClass().getName()); return; } javax.swing.AbstractButton gomb = (javax.swing.AbstractButton)ae.getSource(); if (ae.getActionCommand().equals("enable")) { //engedélyezés soreditor.setEnabled(gomb.isSelected()); napló.setEnabled(gomb.isSelected()); jelszó.setEnabled(gomb.isSelected()); } else if (ae.getActionCommand().equals("editable")) { //szerkeszthető soreditor.setEditable(gomb.isSelected()); napló.setEditable(gomb.isSelected()); jelszó.setEditable(gomb.isSelected()); } else if (ae.getActionCommand().equals("wrap")) { //sortörés ki/be napló.setLineWrap(gomb.isSelected()); } else if (ae.getActionCommand().equals("maszk")) try { //maszkbeállítás maszkeditor.setValue(""); maszk.setMask(soreditor.getText()); } catch (Exception e) { naplóz(e.getMessage()); } else if (ae.getActionCommand().equals("word")) //sortörés szavaknál napló.setWrapStyleWord(gomb.isSelected()); } /** Igazítás változtatása. @param ie Kiválasztási esemény */ public void itemStateChanged(java.awt.event.ItemEvent ie) { if (ie.getStateChange()!=java.awt.event.ItemEvent.SELECTED) return; int igazítás = 0; String választás = (String)ie.getItem(); if (választás.equals("LEFT")) igazítás = javax.swing.JTextField.LEFT; //balra else if (választás.equals("CENTER")) igazítás = javax.swing.JTextField.CENTER; //középre else if (választás.equals("RIGHT")) igazítás = javax.swing.JTextField.RIGHT; //jobbra soreditor.setHorizontalAlignment(igazítás); jelszó.setHorizontalAlignment(igazítás); } /** Kurzormozgatás naplózása. @param ce Kurzormozgatási esemény. */ public void caretUpdate(javax.swing.event.CaretEvent ce) { naplóz("CaretEvent: pozíció="+ce.getDot()+ ", kijelölés másik vége="+ce.getMark()); } /** Beszúrás naplózása. @param de Beszúrási esemény. */ public void insertUpdate(javax.swing.event.DocumentEvent de) { naplóz("DocumentEvent: insertUpdate: offset="+de.getOffset()+ ", hossz="+de.getLength()); } /** Törlés naplózása. @param de Törlési esemény. */ public void removeUpdate(javax.swing.event.DocumentEvent de) { naplóz("DocumentEvent: removeUpdate: offset="+de.getOffset()+ ", hossz="+de.getLength()); } /** Változás naplózása. @param de Változási esemény. */ public void changedUpdate(javax.swing.event.DocumentEvent de) { naplóz("DocumentEvent: changedUpdate: offset="+de.getOffset()+ ", hossz="+de.getLength()); } }