Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаб. 6 Java (Вариант 3)

.docx
Скачиваний:
3
Добавлен:
31.08.2024
Размер:
40.53 Кб
Скачать

SimpleNotepad

package lab_3;

import javax.swing.*;

import javax.swing.event.CaretEvent;

import javax.swing.event.CaretListener;

import javax.swing.event.DocumentEvent;

import javax.swing.event.DocumentListener;

import javax.swing.text.*;

import java.awt.*;

import java.awt.datatransfer.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

//Реализация интерфейса

public class SimpleNotepad implements ActionListener {

private JFrame frame;

private JTextArea textArea;

private JTextPane textPane;

private JCheckBox lineWrapCheckBox;

private JComboBox<String> fontComboBox;

private JLabel cursorLabel;

private JButton copyButton;

private JButton pasteButton;

public SimpleNotepad() {

frame = new JFrame("Simple Notepad"); //Инициализация фрейма

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Завершение при закрытии

frame.setSize(600, 400);

//Создание панели инструментов

JPanel toolbarPanel = new JPanel(); //Пространстводля размещения других элементов

lineWrapCheckBox = new JCheckBox("Перенос строк"); //Создание флажка

lineWrapCheckBox.addActionListener(this); //Добавление слушателя, который будет реагировать на изменения флажка

toolbarPanel.add(lineWrapCheckBox); //Добавление флажка на панель

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); //Получение доступных шрифтов

String[] fontNames = ge.getAvailableFontFamilyNames();

fontComboBox = new JComboBox<>(fontNames); //Добавление шрифтов в комбинированный список

fontComboBox.addActionListener(this); //Установка слушателя, который будет реагировать на выбор шрифта

toolbarPanel.add(fontComboBox);

copyButton = new JButton("Копировать"); //Создание кнопки копировать

copyButton.addActionListener(this);

toolbarPanel.add(copyButton);

pasteButton = new JButton("Вставить"); //Создание кнопки вставить

pasteButton.addActionListener(this);

toolbarPanel.add(pasteButton);

frame.add(toolbarPanel, BorderLayout.NORTH); //Установка панели на северную часть окна

textArea = new JTextArea(); //Создание текстового компонента

textPane = new JTextPane();

//Установка слушателя, который реагирует на изменение расположения курсора

textArea.addCaretListener(new CaretListener() {

//@Override

public void caretUpdate(CaretEvent e) {

try {

updateCursorPosition(false);

} catch (BadLocationException ex) {

ex.printStackTrace();

}

}

});

//Установка слушателей к текстовой компоненте

textArea.getDocument().addDocumentListener(new DocumentListener() {

//Событие при добавлении текста в документ, реагирует метод, который меняет данные о расположении курсора

//@Override

public void insertUpdate(DocumentEvent e) {

try {

if (isNewLineInserted(e)) {

updateCursorPosition(true);

} else {

updateCursorPosition(false);

}

} catch (BadLocationException ex) {

ex.printStackTrace();

}

}

//Событие при удалении текста, также реагирует метод, который меняет данные расположения курсора

//@Override

public void removeUpdate(DocumentEvent e) {

try {

updateCursorPosition(false);

} catch (BadLocationException e1) {

e1.printStackTrace();

}

}

//Событие при изменении атрибутов текста (напрмер, стиля)

//@Override

public void changedUpdate(DocumentEvent e) {

try {

updateCursorPosition(false);

} catch (BadLocationException e1) {

e1.printStackTrace();

}

}

});

JScrollPane scrollPane = new JScrollPane(textArea); //Добавление скрола для текстового пространства

frame.add(scrollPane, BorderLayout.CENTER);

/*

//Создание нижней панели статуса

statusLabel = new JLabel("Строка: 1 Колонка: 1");

frame.add(statusLabel, BorderLayout.SOUTH);

*/

//Создание панели с текущим положение курсора в юго-восточную часть

JPanel cursorPanel = new JPanel(new BorderLayout());

cursorLabel = new JLabel("Курсор: 1:1");

cursorPanel.add(cursorLabel, BorderLayout.EAST);

frame.add(cursorPanel, BorderLayout.SOUTH);

/*

//Создание панели с текущим положением курсора

cursorLabel = new JLabel("Курсор: 1:1");

frame.add(cursorLabel, BorderLayout.WEST);

*/

frame.setVisible(true);

}

//Метод для обновления информации о расположении курсора

private void updateCursorPosition(boolean isNewLineInserted) throws BadLocationException {

//int caretPosition = textArea.getCaretPosition();

int caretPosition = textArea.getDocument().getLength();

int lineNumber = textArea.getLineOfOffset(caretPosition) + 1;

int columnNumber;

//Если новая строка, то столбец = 1

if (isNewLineInserted) {

columnNumber = 1;

//lineNumber += 1;

} else { //Иначе столбец вычисляется путём вычитания смещения начала строки из текущнй позиции курсора

int lineStartOffset = textArea.getLineStartOffset(lineNumber - 1);

columnNumber = caretPosition - lineStartOffset + 1;

}

cursorLabel.setText("Курсор: " + lineNumber + ":" + columnNumber);

}

//Метод проверяющий, была ли использована новая строка

private boolean isNewLineInserted(DocumentEvent e) throws BadLocationException {

Document doc = e.getDocument();

int offset = e.getOffset();

int length = e.getLength();

String text = doc.getText(offset, length); //получение текста с указанного месторасположения

return text.contains("\n"); //если новая строка, то тру

}

//Метод обрабатывает события от элементов интерфейса

//@Override

public void actionPerformed(ActionEvent e) {

if (e.getSource() == lineWrapCheckBox) { //Если флажок переноса строк поднят, то строки переносятся

textArea.setLineWrap(lineWrapCheckBox.isSelected());

} else if (e.getSource() == fontComboBox) { //Если список шрифтов, то к тексту применяется выбранный шрифт

String selectedFontName = (String) fontComboBox.getSelectedItem();

Font font = new Font(selectedFontName, Font.PLAIN, 12);

textArea.setFont(font);

}

/*

else if (e.getSource() == copyButton) {

String selectedText = textArea.getSelectedText();

if (selectedText != null) {

StringSelection selection = new StringSelection(selectedText);

Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();

clipboard.setContents(selection, null);

}

}

*/

else if (e.getSource() == copyButton) { //Если использована кнопка копировать, то копируется текст в юуфер обмена

String selectedText = textArea.getSelectedText();

if (selectedText == null) {

selectedText = textArea.getText(); //Получить весь текст из текстовой области

}

StringSelection selection = new StringSelection(selectedText);

Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();

clipboard.setContents(selection, null);

}

else if (e.getSource() == pasteButton) { //Если использована кнопка вставить, то текст из буфера обмена вставляется в текстовый компонент

Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();

Transferable contents = clipboard.getContents(null);

if (contents != null && contents.isDataFlavorSupported(DataFlavor.stringFlavor)) {

try {

String text = (String) contents.getTransferData(DataFlavor.stringFlavor);

textArea.replaceSelection(text);

} catch (Exception ex) {

ex.printStackTrace();

}

}

}

}

}

Main

public static void main(String[] args) {

new SimpleNotepad();

/*

SwingUtilities.invokeLater(new Runnable() {

public void run() {

new SimpleNotepad();

}

});

*/

}

Соседние файлы в предмете Основы языка Java