Я пытаюсь создать простой текстовый редактор с динамической текстовой областью в Java.
Приложение вначале имеет только 1 текстовую область. Каждый раз, когда я нажимаю клавишу ENTER, приложение создает новую текстовую область. Это работает! РЖУ НЕ МОГУ. Но когда я пытаюсь изменить предыдущую текстовую область, эта текстовая область не изменилась. И проблема в том, что моя предыдущая текстовая область уже была в контейнере. Итак, мой вопрос: как мы обновляем всю текстовую область в контейнере?
Посмотрите на мой код:
import javax.swing.*;
import javax.swing.text.*;
import java.awt.*;
import java.io.*;
import java.awt.event.*;
public class SimpleEditor extends JFrame {
int count = 0;
Container content = getContentPane();
private JTextComponent[] textComp;
public static void main(String[] args) {
SimpleEditor editor = new SimpleEditor();
editor.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
editor.setVisible(true);
}
// Create an editor.
public SimpleEditor() {
super("Swing Editor");
dinamicTA();
content.setLayout(new FlowLayout());
for(int i=0;i<count;i++) {
content.add(textComp[i]);
}
pack();
content.setSize(content.getPreferredSize());
pack();
}
//create DINAMIC TEXT AREA
public void dinamicTA () {
if(count==0) {
textComp = new JTextComponent[1];
textComp[0] = createTextComponent();
count+=1;
}
else {
JTextComponent[] texttemp;
texttemp = new JTextComponent[count];
for(int i=0;i<count;i++) {
texttemp[i] = createTextComponent();
}
count+=1;
textComp = new JTextComponent[count];
for(int i=0;i<count-1;i++) {
textComp[i] = createTextComponent();
//textComp[i].setText(texttemp[i].getText()+"wow"); <-- not working
}
textComp[count-1] = createTextComponent();
content.add(textComp[count-1]);
}
}
// Create the JTextComponent subclass.
protected JTextComponent createTextComponent() {
JTextArea ta = new JTextArea();
if (count%2==0)
ta.setForeground(Color.red);
else
ta.setForeground(Color.GREEN);
ta.setFont(new Font("Courier New",Font.PLAIN,12));
ta.setLineWrap(true);
ta.setWrapStyleWord(true);
ta.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyReleased(java.awt.event.KeyEvent ev) {
taKeyReleased(ev);
}
});
ta.setColumns(15);
pack();
ta.setSize(ta.getPreferredSize());
pack();
return ta;
}
private void taKeyReleased(java.awt.event.KeyEvent ev) {
int key = ev.getKeyCode();
if (key == KeyEvent.VK_ENTER) {
dinamicTA();
pack();
content.setSize(content.getPreferredSize());
pack();
}
}
}
И еще 2 вопроса. Каждый раз, когда я нажимаю клавишу ENTER, создается текстовая область, а предыдущая текстовая область получает разрывную линию. Есть ли у вас идея удалить линию разрыва? Следующий вопрос: как перейти к следующей текстовой области после нажатия клавиши ENTER, не нажимая новую текстовую область?
Извините, слишком много вопросов.. хахаха. Спасибо раньше :)