powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как убрать повторы при отрисовке таблиц JTable?
7 сообщений из 7, страница 1 из 1
Как убрать повторы при отрисовке таблиц JTable?
    #38507198
djfedor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет)

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

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



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



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

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

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

да.

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

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

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

в другом классе Controller вычисляется список выводимой инфы, вызывается метод2 и метод1
...
Рейтинг: 0 / 0
Как убрать повторы при отрисовке таблиц JTable?
    #38507210
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
djfedor, так не создавайте новую таблицу каждый раз.
...
Рейтинг: 0 / 0
Как убрать повторы при отрисовке таблиц JTable?
    #38508617
djfedor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Как убрать повторы при отрисовке таблиц JTable?
    #38508624
djfedor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. короче говоря нужно чтобы добавилась всего одна запись о Human и все. На этом рисование таблицы должно прекратиться.
...
Рейтинг: 0 / 0
Как убрать повторы при отрисовке таблиц JTable?
    #38508709
djfedor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема решена.

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


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