Пропадает центрирование текста

233
11 июня 2018, 14:10

Впервые столкнулся с такой проблемой что когда сохраняю текст и загружаю его заново в JTextPane, центрирование сохраняется в положении в котором первый раз был сохранен текст. То есть если при первом разе я сделал выравнивание по центру и сохранил текст, тогда все подальшие попытки изменить любой фрагмент текста окончатся тем что текст в любом случае сохранится по центру.

Сохраняю текст в БД, выгружаю текст с БД с помощью unescapeJava что-бы сохранить переходы на новую строку

setText(unescapeJava(rs.getString("Text"));

В результате первого сохранение получаю

    <html>
  <head>
  </head>
  <body>
    <p style="margin-top: 0">
      Left
    </p>
    <p align="center" style="margin-top: 0">
      Centr
    </p>
    <p align="right" style="margin-top: 0">
      Right
    </p>
  </body>
</html>

В результате второго

   <html>
  <head>
  </head>
  <body>
    <p align="right" style="margin-top: 0">
      Left
    </p>
    <p align="right" style="margin-top: 0">
      Center
    </p>
    <p align="right" style="margin-top: 0">
      Right
    </p>
    <p align="right" style="margin-top: 0">
      Лево
    </p>
    <p align="right" style="margin-top: 0">
      Центр
    </p>
    <p align="right" style="margin-top: 0">
      Право
    </p>
  </body>
</html>

Причем, если изменять только первый три строки где "Left, Center, Right" то все будет работать, если что-то добавить все собьется. В TextPane при редактировании все отображается как нужно, при сохранении сами видите как записывает.

Вот код моего текстового редактора

    import javax.swing.*;
import javax.swing.text.*;
import java.awt.*;
import java.awt.event.*;
import static org.apache.commons.lang3.StringEscapeUtils.unescapeJava;

public class TextEditor extends JFrame {
    private JPanel panel = new JPanel(new BorderLayout());
    private JTextPane textPane = new JTextPane();
    private int id = 0;
    private String nameAutor = "";
    private String date = "";
    public TextEditor(String edit, int id, String date, String nameAutor) {
        textPane.setContentType("text/html");
        edit = edit.replaceAll("&lt;", "<");
        edit = edit.replaceAll("&gt;", ">");
        textPane.setText(edit);
        this.id = id;
        this.date = date;
        this.nameAutor = nameAutor;
        initComponent();
        this.setSize(600, 500);
        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        this.setLocationRelativeTo(null);
        this.setResizable(true);
        this.getContentPane().add(panel);
        this.setVisible(true);
    }
    public void initComponent() {
        panel.setBackground(Color.GRAY);
        JScrollPane scrollPane = new JScrollPane(textPane);
        scrollPane.setBorder(null);
        nameAutor = nameAutor + "       " + date;
        panel.add(new JLabel(nameAutor) {{
            setForeground(Color.WHITE);
        }}, BorderLayout.PAGE_END);
        panel.add(new toolBar(), BorderLayout.PAGE_START);
        panel.add(scrollPane, BorderLayout.CENTER);
    }
    class toolBar extends JToolBar {
        public toolBar() {
            final String iconCenter = "/icons/AlignCenterHK.png";
            final String iconLeft = "/icons/AlignLeftHK.png";
            final String iconRight = "/icons/AlignRightHK.png";
            final String iconKursiv = "/icons/ItalicHK.png";
            final String iconUnder = "/icons/UnderlineHK.png";
            final String iconJirniy = "/icons/BoldHK.png";
            final String iconFind = "/icons/FindHK.png";
            final String iconSave = "/icons/SaveHK.png";
            setFloatable(false);
            setIgnoreRepaint(true);
            add(new JButton() {{
                setAction(kursiv());
                setText("");
                setOpaque(false);
                setFocusPainted(false);
                setIcon(new ImageIcon(this.getClass().getResource(iconKursiv)));
            }});
            add(new JButton() {{
                setAction(jirnyi());
                setText("");
                setOpaque(false);
                setFocusPainted(false);
                setIcon(new ImageIcon(this.getClass().getResource(iconJirniy)));
            }});
            add(new JButton() {{
                setAction(normal());
                setText("");
                setOpaque(false);
                setFocusPainted(false);
                setIcon(new ImageIcon(this.getClass().getResource(iconUnder)));
            }});
            add(new JButton() {{
                setAction(left());
                setOpaque(false);
                setFocusPainted(false);
                setIcon(new ImageIcon(this.getClass().getResource(iconLeft)));
            }});
            add(new JButton() {{
                setAction(center());
                setOpaque(false);
                setFocusPainted(false);
                setIcon(new ImageIcon(this.getClass().getResource(iconCenter)));
            }});
            add(new JButton() {{
                setAction(right());
                setOpaque(false);
                setFocusPainted(false);
                setIcon(new ImageIcon(this.getClass().getResource(iconRight)));
                //setIcon(new ImageIcon());
            }});
            add(new JButton() {{
                setOpaque(false);
                setFocusPainted(false);
                setIcon(new ImageIcon(this.getClass().getResource(iconFind)));
            }});

            add(new JButton("img") {{
            }});
            add(new JButton() {{
                addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        DataBase db = new DataBase();
                        db.DBConnect();
                        System.out.println(textPane.getText());
                        db.setArticle("Text", unescapeJava(textPane.getText()), String.valueOf(id));
                    }
                });
                setOpaque(false);
                setFocusPainted(false);
                setIcon(new ImageIcon(this.getClass().getResource(iconSave)));
            }});
        }
    }

    private Action left() {
        return new StyledEditorKit.AlignmentAction("", 3);
    }
    private Action center() {
        return new StyledEditorKit.AlignmentAction("", 1);
    }
    private Action right() {
        return new StyledEditorKit.AlignmentAction("", 2);
    }
    private Action kursiv() {
        return new StyledEditorKit.ItalicAction();
    }
    private Action jirnyi() {
        return new StyledEditorKit.BoldAction();
    }
    private Action normal() {
        return new StyledEditorKit.UnderlineAction();
    }
}

UPDATE: Упрощенный вариант программы, результат выдает такой же: (1-3 Кнопка(Лево, Центр, Право) 4 кнопка(Сохранить))

 import javax.swing.*;
import javax.swing.text.*;
import java.awt.*;
import java.awt.event.*;
public class Main extends JFrame {
    private static String str = "";
    public static void main(String[] args) {
        TextEditor te = new TextEditor(str);
    }
}
class TextEditor extends JFrame {
    private JPanel panel = new JPanel(new BorderLayout());
    private JTextPane textPane = new JTextPane();
    private String text = "";
    public TextEditor(String edit) {
        this.text = edit;
        textPane.setContentType("text/html");
        text = edit.replaceAll("&lt;", "<");
        text = edit.replaceAll("&gt;", ">");
        textPane.setText(text);
        initComponent();
        this.setSize(600, 500);
        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        this.setLocationRelativeTo(null);
        this.setResizable(true);
        this.getContentPane().add(panel);
        this.setVisible(true);
    }
    public void initComponent() {
        panel.setBackground(Color.GRAY);
        JScrollPane scrollPane = new JScrollPane(textPane);
        scrollPane.setBorder(null);
        panel.add(new toolBar(), BorderLayout.PAGE_START);
        panel.add(scrollPane, BorderLayout.CENTER);
    }
    class toolBar extends JToolBar {
        public toolBar() {
            setFloatable(false);
            setIgnoreRepaint(true);
            add(new JButton() {{
                setAction(left());
                setOpaque(false);
                setFocusPainted(false);
            }});
            add(new JButton() {{
                setAction(center());
                setOpaque(false);
                setFocusPainted(false);
            }});
            add(new JButton() {{
                setAction(right());
                setOpaque(false);
                setFocusPainted(false);
            }});
            add(new JButton() {{
                addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        text = textPane.getText();
                        dispose();
                        TextEditor te = new TextEditor(text);
                    }
                });
                setOpaque(false);
                setFocusPainted(false);
            }});
        }
    }

    private Action left() {
        return new StyledEditorKit.AlignmentAction("", 3);
    }
    private Action center() {
        return new StyledEditorKit.AlignmentAction("", 1);
    }
    private Action right() {
        return new StyledEditorKit.AlignmentAction("", 2);
    }
}
READ ALSO
Ошибка заполнения RecyclerView

Ошибка заполнения RecyclerView

Из приложения заполняю данные на сервер Firebase, и тут же отображаю их в RecyclerView, по при первом запуске когда происходит запись на сервер в RecyclerView...

208
Бэкап MySQL базы через Java приложение

Бэкап MySQL базы через Java приложение

Делаю бэкапы базы данный MySQL в Java приложенииВот код:

178
Автозамена атрибута в теге с помощью редактора кода

Автозамена атрибута в теге с помощью редактора кода

Хочу заменить в тегах <img> все атрибуты src на data-src, по всему проекту, но чтобы не затрагивались теги script, js-код и тп

193
Создание ячеек для игры &ldquo;Сапер&rdquo; на javascript

Создание ячеек для игры “Сапер” на javascript

Не знаю как создать ячейки для сапера в html/css/javascriptС помощью div'ов или как? Мне не хватает знаний для этого

209