Рефакторинг дублирование кода так же textarea это не использовать в 4 разных классах


Ищу лучший способ сделать это. В настоящее время в 4 разных классах у меня:

textArea = new JTextArea(10, 55) {
    {
        setOpaque(false);
    }

    @Override
    protected void paintComponent(Graphics g) {
        for (int i = 0; i < list.size(); i++) {
            if(i == lineIndex) 
                g.setColor(Color.black);          
                g.drawRect(0, 20, 750, 20);
        }
        super.paintComponent(g);
    }
};

Я упрощал все, что я есть на самом деле. Как вы можете видеть, что есть дублирование. Единственное, что отличается то, что есть в списке. Список передается в каждом из этих классов Есть некоторые другие вещи в классе, которая зависит от textarea и lineIndex величина изменяется в зависимости от того, что делает пользователь. Я называю перекрашивать() метод textarea, когда я нуждаюсь в textarea, чтобы нарисовать что-то еще. В paintcomponent не просто рисовать.

Я не уверен, что лучший способ для каждого из классов, чтобы содержать текстовое поле, поэтому я не имеют дублирования. В каждом из классов у меня есть списке addlist(список) метод, который переключателей нужно использовать.

Надеюсь, что я объяснил это хорошо.

Спасибо



197
6
задан 13 декабря 2011 в 08:12 Источник Поделиться
Комментарии
1 ответ

Написать свой собственный класс:

class MyTextArea extends JTextArea{

private final List<Foo> list;

MyTextArea(int row, int col, List<Foo> list) {
super(row, col);
this.list = list;
setOpaque(false);
}

@Override
protected void paintComponent(Graphics g) {
for (int i = 0; i < list.size(); i++) {
if(i == lineIndex)
g.setColor(Color.black);
g.drawRect(0, 20, 750, 20);
//use list...
}
super.paintComponent(g);
}
}

5
ответ дан 14 декабря 2011 в 01:12 Источник Поделиться