Синонимайзер (Java)Суббота, Апрель 24, 2010 г. Ранее я показывал вам пример синонимайзера реализованного на PyQt4. Довольно простая но тем не менее полезная программа для копирайтера. Простой графический интерфейс с полем для ввода слова и полем для выдачи результата. Простые операции работы с файлом, и разбора текстовой информации. Неплохой набор задач для того чтобы попробовать себя в новом языке :) Для создания интерфейса я использовал Swing. JFrame размером 500х300, JTextField - для ввода слова и JTextArea - для вывода результата поиска. В качестве компоновщика решил использовать GridBagLayout, так как он мне показался в данном случае максимально удобным. Он давал возможность разместить элементы в определённых ячейках, указать им поведение при изменении размера окна а также задать отступы. Компоненту JTextField назначил обработчик событий клавиатуры, для того чтобы выполнить поиск синонимов при нажатии клавиши "Enter". Для чтения из файла при поиске синонимов использовал класс BufferedReader для чтения из файла построчно. Каждую строку в цикле разбивал по разделителю "|" и сравнивал левую часть с искомым словом. Сама база синонимов выглядет так: абитуриент|ученик,претендент,поступающий,выпускник аблактирование|аблактировка,прививка,сращивание,прививание аблактированный|сращенный,привитый аблактироваться|прививаться,сращиваться аблактируемый|прививаемый,сращиваемый аблатив|аблятив,падеж аблаут|абляут,чередование абляция|унос,снос або|альбо,ли,либо,или,аль,разве,нежто Абов|любовь Божия аболиция|прекращение,отмена При удачном совпадении левой части разбитой строки с введённым словом, прекращал поиск в цикле и выводил правую часть в JTextArea. При возникновении исключительной ситуации в JTextArea выводился текст ошибки. Всё просто, вот исходник :) sinonimaiser.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
/**
* Синонимайзер русского языка
* @author demoriz
*/
public class sinonimaiser implements KeyListener {
protected JTextField jtf;
protected JTextArea jtar;
/**
* Конструктор
* Ресует интерфейс.
*/
public sinonimaiser () {
JFrame jfrm = new JFrame("Синонимайзер");
jfrm.setSize(500, 300);
GridBagConstraints gbc = new GridBagConstraints();
jfrm.setLayout(new GridBagLayout());
jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jtf = new JTextField();
jtf.addKeyListener(this);
jtar = new JTextArea();
jtar.setLineWrap(true);
jtar.setWrapStyleWord(true);
JScrollPane scroll = new JScrollPane(jtar);
gbc.gridx=0;
gbc.gridy=0;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets(10, 5, 10, 5);
gbc.weightx = 1.0;
jfrm.add(jtf, gbc);
gbc.gridy=1;
gbc.weighty = 1.0;
gbc.fill = GridBagConstraints.BOTH;
gbc.insets = new Insets(0, 5, 10, 5);
jfrm.add(scroll, gbc);
jfrm.setVisible(true);
}
/**
* Поиск синонимов
*
* @param String sin слово для поиска
* @return String s синонимы или текст ошибки
*/
public String getsinonim(String sin) {
String s;
String para[];
try{
BufferedReader buf = new BufferedReader(new FileReader("sinonim"));
while(true) {
s = buf.readLine();
if (s == null) {
s = " ";
break;
}
para = s.split("\\|", 2);
if(sin.equalsIgnoreCase(para[0])) {
s = para[1];
break;
}
}
} catch (IOException e) {
s = "Ошибка "+e.getMessage();
}
return s;
}
/**
* Ловим собитие с клавиатуры
* переопределённый метод интерфейса KeyListener
*
* @param KeyEvent ke клавиатурное событие
*/
@Override
public void keyReleased(KeyEvent ke) {
if(ke.getKeyCode() == KeyEvent.VK_ENTER) {
String word = jtf.getText();
jtar.setText(this.getsinonim(word.trim()));
}
}
@Override
public void keyPressed(KeyEvent ke) {
}
@Override
public void keyTyped(KeyEvent ke) {
}
public void actionPerformed(ActionEvent ae) {
}
public static void main (String args[]) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new sinonimaiser();
}
});
}
}
Это моя первая программа на Java, буду рад аргументированной критике профессионалов. Скомпилированный бинарник. | ||
Комментарии (2)
04.05.2010 в 10:57
Заходи на http://javaswing.wordpress.com, думаю узнаешь много нового по Java Swing.
ответить
demoriz
04.05.2010 в 13:32
Да конечно, я подписан на RSS твоего блога. Читаю с удовольствием.
ответить
)
