Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как убрать повторы при отрисовке таблиц JTable? / 7 сообщений из 7, страница 1 из 1
19.12.2013, 22:30:34
    #38507198
djfedor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как убрать повторы при отрисовке таблиц JTable?
Всем привет)

Решаю простенькую задачку: нарисовать SWING-овое окошко с кнопкой и табличкой. Нажимаем на кнопку - в табличке появляется некий список имен файлов (книг) из определенной директории, подходящих по маске. Путь и маску читаю в конфиге.

Все реализовал, все работает... НО! при нажатии на кнопку более 1 раза начинают появляться в этом же окошке дубли таблицы, если его немного расширить по границам .



Как это можно убрать?



Поочередно добавлять ко всем методам и классам static замучаюсь и решение наверное не самое правильное...

Если недостаточно описания проблемы - предоставлю пример.

Спасибо большое заранее!
...
Рейтинг: 0 / 0
19.12.2013, 22:33:12
    #38507200
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как убрать повторы при отрисовке таблиц JTable?
djfedor, вы по нажатию на кнопку заново таблицу создаете и в контейнер кладете чтоли?
...
Рейтинг: 0 / 0
19.12.2013, 22:41:15
    #38507203
djfedor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как убрать повторы при отрисовке таблиц JTable?
javapeckerdjfedor, вы по нажатию на кнопку заново таблицу создаете и в контейнер кладете чтоли?

да.

есть класс View, в нем рисуется сама форма и добавляется кнопка.

есть отдельно метод1 рисующий саму табличку

также есть метод2 добавляющий actionListener на кнопку

в другом классе Controller вычисляется список выводимой инфы, вызывается метод2 и метод1
...
Рейтинг: 0 / 0
19.12.2013, 23:04:51
    #38507210
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как убрать повторы при отрисовке таблиц JTable?
djfedor, так не создавайте новую таблицу каждый раз.
...
Рейтинг: 0 / 0
21.12.2013, 02:44:05
    #38508617
djfedor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как убрать повторы при отрисовке таблиц JTable?
javapecker, спасибо. С этой проблемой разобрался.

Осталось понять почему теперь при каждом нажатии кнопки выводимая таблица все время увеличивается (данные дублируются).

Как в моем примере добавить в нужных местах listener-ов? Я ведь правильно понимаю что надо делать removeTableModelListener?

Вот код:

Main.java - здесь все запускаем.

Код: java
1.
2.
3.
4.
5.
6.
public class Main {
    public static void main(String[] args) {
        JTableExample jTableExample = new JTableExample();
        Controller controller = new Controller(jTableExample);
    }
}



Human.java - наша сущность.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
public class Human {
    String name;
    String surname;
    String telephone;
    public Human(String name, String surname, String telephone) {
        this.name = name;
        this.surname = surname;
        this.telephone = telephone;
    }
    public String getName() {
        return name;
    }
    public String getSurname() {
        return surname;
    }
    public String getTelephone() {
        return telephone;
    }
}



Controller.java - здесь создаются данные и идет проверка.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

public class Controller {
    private JTableExample jTableExample;
    ArrayList<Human> humans;
    public Controller(JTableExample jTableExample) {
        this.jTableExample = jTableExample;
        this.jTableExample.addButtonListener(new ButtonListener());
    }

    private class ButtonListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {

            jTableExample.humans.add(new Human("Vasya", "Pupkin", "12300123"));

            jTableExample.tModel.fireTableDataChanged();

       }
    }
}



JTableExample.java - ну и сама форма разумеется.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import javax.swing.*;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;

public class JTableExample {

    //Объект таблицы
    JTable jTabPeople;
    MyTableModel tModel;
    ArrayList<Human> humans;
    JButton btnPress;

    JTableExample() {
        //Создаем новый контейнер JFrame
        JFrame jfrm = new JFrame("JTableExample");
        //Устанавливаем диспетчер компоновки
        jfrm.getContentPane().setLayout(new FlowLayout());
        //Устанавливаем размер окна
        jfrm.setSize(300, 250);
        //Устанавливаем завершение программы при закрытии окна
        jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //Создаем новую таблицу на основе двумерного массива данных и заголовков
        //Создадим список из сущностей класса Human
        humans = new ArrayList<Human>();
        //Создадим модель таблицы
        tModel = new MyTableModel(humans);
        //На основе модели, создадим новую JTable
        jTabPeople = new JTable(tModel);
        //Создаем панель прокрутки и включаем в ее состав нашу таблицу
        JScrollPane jscrlp = new JScrollPane(jTabPeople);
        //Устанавливаем размеры прокручиваемой области
        jTabPeople.setPreferredScrollableViewportSize(new Dimension(250, 100));
        //Добавляем в контейнер нашу панель прокрути и таблицу вместе с ней
        jfrm.getContentPane().add(jscrlp);
        btnPress = new JButton("Click!");
        jfrm.add(btnPress);
        //Отображаем контейнер
        jfrm.setVisible(true);
    }

    void addButtonListener(ActionListener listenForButton) {
        btnPress.addActionListener(listenForButton);
    }

    public class MyTableModel extends AbstractTableModel {

        ArrayList<Human> humans;

        private Set<TableModelListener> listeners = new HashSet<TableModelListener>();

        MyTableModel(ArrayList<Human> humans) {
            super();
            this.humans = humans;
        }

        @Override
        public int getColumnCount() {
            return 3;
        }

        @Override
        public int getRowCount() {
            return humans.size();
        }


        @Override
        public String getColumnName(int c) {
            String result = "";
            switch (c) {
                case 0:
                    result = "Name";
                    break;
                case 1:
                    result = "Surname";
                    break;
                case 2:
                    result = "Telephone";
                    break;
            }
            return result;
        }

        @Override
        public Object getValueAt(int r, int c) {
            switch (c) {
                case 0:
                    return humans.get(r).getName();
                case 1:
                    return humans.get(r).getSurname();
                case 2:
                    return humans.get(r).getTelephone();
                default:
                    return "";
            }
        }

    }
}



Подскажите пожалуйста
...
Рейтинг: 0 / 0
21.12.2013, 03:10:21
    #38508624
djfedor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как убрать повторы при отрисовке таблиц JTable?
Т.е. короче говоря нужно чтобы добавилась всего одна запись о Human и все. На этом рисование таблицы должно прекратиться.
...
Рейтинг: 0 / 0
21.12.2013, 11:24:51
    #38508709
djfedor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как убрать повторы при отрисовке таблиц JTable?
Проблема решена.

Помощь уже не нужна)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как убрать повторы при отрисовке таблиц JTable? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]