Advertisement
Guest User

Untitled

a guest
Jan 17th, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.22 KB | None | 0 0
  1. import org.omg.CORBA.Environment;
  2.  
  3. import javax.swing.*;
  4. import javax.swing.event.ListSelectionEvent;
  5. import javax.swing.event.ListSelectionListener;
  6. import javax.swing.text.Position;
  7. import javax.swing.text.SimpleAttributeSet;
  8. import javax.swing.text.StyleConstants;
  9. import javax.swing.text.StyledDocument;
  10. import java.awt.*;
  11. import java.awt.event.*;
  12. import java.beans.PropertyChangeListener;
  13. import java.io.*;
  14.  
  15. public class mainForm {
  16.     private static JFrame frame;
  17.     private JPanel panelMain;
  18.     private JComboBox comboBox1;
  19.     private JComboBox comboBox2;
  20.     private JTextPane textPane;
  21.     private Font[] fonts;
  22.  
  23.     Font defaultFont;
  24.     Font forChangingFont;
  25.  
  26.     DefaultListModel<Integer> startIndexesModel;
  27.     DefaultListModel<Integer> lengthsModel;
  28.     DefaultListModel<Integer> IgnoreStartIndexesModel;
  29.     JList<Integer> startIndexes;
  30.     JList<Integer> lengths;
  31.     JList<Integer> IgnoreStartIndexes;
  32.  
  33.  
  34.     public mainForm() {
  35.  
  36.         // Инициализация массивов
  37.         startIndexesModel = new DefaultListModel<>();
  38.         lengthsModel = new DefaultListModel<>();
  39.         IgnoreStartIndexesModel = new DefaultListModel<>();
  40.         startIndexes = new JList<>(startIndexesModel);
  41.         lengths = new JList<>(lengthsModel);
  42.         IgnoreStartIndexes = new JList<>(IgnoreStartIndexesModel);
  43.  
  44.         GraphicsEnvironment graphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment();
  45.         fonts = graphicsEnvironment.getAllFonts();
  46.  
  47.         frame = new JFrame("");
  48.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  49.         frame.setLayout(null);
  50.         textPane = new JTextPane();
  51.         comboBox1 = new JComboBox<>(fonts);
  52.         comboBox2 = new JComboBox<>(fonts);
  53.         JLabel label = new JLabel();
  54.         JLabel label2 = new JLabel();
  55.  
  56.         textPane.setBounds(10,10, 300, 100);
  57.         textPane.setText("В стране проживает 1434577 студента. 146 из которых в вашем городе. 1444 в соседнем.");
  58.         comboBox1.setBounds(10,50+70,150,26);
  59.         comboBox2.setBounds(10,50+70+36,150,26);
  60.         label.setBounds(150+20, 50+70, 150,20);
  61.         label.setText("Шрифт всего текста");
  62.         label2.setBounds(150+20, 50+70+36, 200,20);
  63.         label2.setText("Шрифт текста для изменения");
  64.  
  65.         textPane.setFont(new Font("Segoe UI", Font.PLAIN, 18));
  66.         frame.add(textPane);
  67.         frame.add(comboBox1);
  68.         frame.add(comboBox2);
  69.         frame.add(label);
  70.         frame.add(label2);
  71.         frame.setBounds(0,0, 380, 250);
  72.  
  73.         DefaultListCellRenderer defRenderer = new DefaultListCellRenderer() {
  74.             @Override
  75.             public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
  76.                 if(value != null)
  77.                     value = ((Font)value).getFontName();
  78.                 return super.getListCellRendererComponent(list, value, index,
  79.                         isSelected, cellHasFocus);
  80.             }
  81.         };
  82.  
  83.  
  84.         comboBox1.setRenderer(defRenderer );
  85.         for(int i = 0; i < fonts.length; i++)
  86.             if(fonts[i].getFontName().equals("Segoe UI")) {
  87.                 comboBox1.setSelectedIndex(i);
  88.                 comboBox2.setSelectedIndex(i);
  89.                 break;
  90.             }
  91.  
  92.         comboBox2.setRenderer(defRenderer );
  93.  
  94.         frame.setVisible(true);
  95.  
  96.  
  97.         comboBox1.addActionListener(new ActionListener() {
  98.             @Override
  99.             public void actionPerformed(ActionEvent e) {
  100.                 Font font = (Font)comboBox1.getSelectedItem();
  101.                 defaultFont = new Font(font.getFontName(), font.getStyle(), 18);
  102.                 textPane.setFont(defaultFont);
  103.             }
  104.         });
  105.         comboBox2.addActionListener(new ActionListener() {
  106.             @Override
  107.             public void actionPerformed(ActionEvent e) {
  108.                 Font font = (Font)comboBox2.getSelectedItem();
  109.                 forChangingFont = new Font(font.getFontName(), font.getStyle(), 18);
  110.                 parseText();
  111.             }
  112.         });
  113.         textPane.addKeyListener(new KeyAdapter() {
  114.             @Override
  115.             public void keyReleased(KeyEvent e) {
  116.                 if(e.getKeyCode() == KeyEvent.VK_F2)
  117.                     ProcessKey(true);
  118.                 else
  119.                     ProcessKey(false);
  120.                 super.keyReleased(e);
  121.             }
  122.         });
  123.     }
  124.  
  125.     public static void main(String[] args) {
  126.         mainForm form = new mainForm();
  127.     }
  128.  
  129.  
  130.     private void parseText() {
  131.         { // Изменить шрифт всего текста на дефолтный
  132.             SimpleAttributeSet attrSet = new SimpleAttributeSet();
  133.             StyleConstants.setFontFamily(attrSet, defaultFont.getFamily());
  134.             StyleConstants.setBold(attrSet, defaultFont.isBold());
  135.             StyleConstants.setItalic(attrSet, defaultFont.isItalic());
  136.             StyledDocument styledDocument = textPane.getStyledDocument();
  137.             styledDocument.setCharacterAttributes(0, textPane.getText().length(), attrSet, true);
  138.         }
  139.  
  140.         int startIndex = -1;
  141.         int length = 1;
  142.         lengthsModel = new DefaultListModel<>();
  143.         startIndexesModel = new DefaultListModel<>();
  144.         String text = textPane.getText();
  145.         for (int i = text.length() - 1; i > 0; i--) {
  146.             if (text.charAt(i) >= '0' && text.charAt(i) <= '9')
  147.                 if (startIndex == -1)
  148.                     startIndex = i;
  149.                 else length++;
  150.             else {
  151.                 if (length > 3)
  152.                     if (!IgnoreStartIndexesModel.contains(startIndex - length + 1)) {
  153.                         lengthsModel.addElement(length);
  154.                         startIndexesModel.addElement(startIndex - length + 1);
  155.  
  156.                         SimpleAttributeSet attrSet = new SimpleAttributeSet();
  157.                         StyleConstants.setFontFamily(attrSet, forChangingFont.getFamily());
  158.                         StyleConstants.setBold(attrSet, forChangingFont.isBold());
  159.                         StyleConstants.setItalic(attrSet, forChangingFont.isItalic());
  160.                         StyledDocument styledDocument = textPane.getStyledDocument();
  161.                         styledDocument.setCharacterAttributes(startIndex - length + 1, length, attrSet, true);
  162.                     }
  163.                 length = 1;
  164.                 startIndex = -1;
  165.             }
  166.         }
  167.     }
  168.  
  169.     private void ProcessKey(boolean isF2)
  170.     {
  171.         int selectionStart = textPane.getCaretPosition();
  172.         for (int j = 0; j < startIndexesModel.size(); j++)
  173.             if (selectionStart >= startIndexesModel.elementAt(j) &&
  174.                     selectionStart <= (startIndexesModel.elementAt(j) + lengthsModel.elementAt(j)))
  175.                 if (isF2)
  176.                 {
  177.                     int numbersInRow = 0;
  178.                     for (int k = (startIndexesModel.elementAt(j) + lengthsModel.elementAt(j)) - 1; k > startIndexesModel.elementAt(j); k--)
  179.                     {
  180.                         numbersInRow++;
  181.                         if (numbersInRow % 3 == 0)
  182.                         {
  183.                             for (int a = 0; a < IgnoreStartIndexesModel.size(); a++)
  184.                                 if (IgnoreStartIndexesModel.elementAt(a) > k)
  185.                                     IgnoreStartIndexesModel.set(a, IgnoreStartIndexesModel.elementAt(a) + 1);
  186.                             textPane.setText(textPane.getText().substring(0,k) + " " + textPane.getText().substring(k--));
  187.                             lengthsModel.set(j, lengthsModel.elementAt(j) + 1);
  188.                             numbersInRow++;
  189.                         }
  190.                     }
  191.                     parseText();
  192.                     textPane.select(selectionStart,selectionStart);
  193.                     break;
  194.                 }
  195.                 else
  196.                 {
  197.                     IgnoreStartIndexesModel.addElement(startIndexesModel.elementAt(j));
  198.                     parseText();
  199.                     textPane.select(selectionStart,selectionStart);
  200.                     break;
  201.                 }
  202.     }
  203. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement