Ей там! Като доставчик на суинг екрани, имах моя справедлив дял от опит, занимаващ се с всякакви технически аспекти, свързани с тези изящни устройства. Един въпрос, който се появява доста често, е как да се справят с събитията за избор на клетъчни клетки на екран за люлеене. В този блог ще ви преведа през процеса стъпка по стъпка и ще споделя някои съвети и трикове, които съм взел по пътя.
Първо, нека поговорим за това защо е важна обработката на събитията за избор на клетки на масата. Когато работите с екран за люлеене, може да имате таблица, която показва куп данни. И понякога искате да направите нещо, когато потребителят избира определена клетка в тази таблица. Може би искате да покажете по -подробна информация за данните в тази клетка или искате да извършите някакво действие въз основа на избора. Каквато и да е причината, да можете да се справите ефективно с тези събития, може значително да подобри потребителското изживяване на вашето приложение.
И така, как да продължим да обработваме събития за избор на клетъчни клетки? Е, първото нещо, което трябва да направите, е да разберете основната структура на таблицата в приложението за люлеене. В Java Swing таблиците са представени отJtableклас. Този клас предоставя много функционалност за създаване и управление на таблици, включително обработка на събития за подбор.
За да се справите с събитията за избор на клетъчни клетки, трябва да добавите aListSelectionListenerкъм модела за избор на таблицата. Моделът за подбор е отговорен за проследяването на кои клетки са избрани в момента в таблицата. Ето един прост пример за това как можете да направите това:
импортиране на javax.swing.*; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; Public Class TableLectionExample {public static void main (string [] args) {// създаване на нов jTable низ [] columnNames = {"name", "age", "city"}; Object [] [] data = {{"John", 25, "New York"}, {"Jane", 30, "Los Angeles"}, {"Bob", 35, "Chicago"}}; JTable таблица = нов JTable (данни, имена на колони); // Вземете модела за избор на таблицата listeslectionmodel selectionModel = table.getSelectionModel (); // Добавете listElectionListener към селекционния модел selectionmodel.addlistselectionlistener (нов listElectionListener () {@Override public void ValueChanged (listEslectionEvent e) {if (! E.getValueIsAdjusting ()) {int selectedrow = tabledelectedrow (); (SelectedRow! = -1 && SelectedColumn! = -1) {Object selectedValue = table.getValueat (SelectedRow, SelectedColumn); // Създайте jframe и добавете таблицата към него jframe frame = new jframe ("Пример за избор на таблица"); frame.add (нов JScrollpane (таблица)); frame.SetDefaultCloseOperation (jframe.exit_on_close); frame.pack (); frame.setvisible (вярно); }}
В този пример първо създаваме новJtableс някои примерни данни. След това получаваме модела за избор на таблицата и добавяме aListSelectionListenerкъм него. TheValuchangedметод наListSelectionListenerсе извиква всеки път, когато изборът в таблицата се промени. Вътре в този метод проверяваме дали селекцията все още се коригира (за да избегнем множество повиквания, когато потребителят влачи мишката, за да избере множество клетки). Ако изборът не се коригира, получаваме избраните индекси на ред и колони и след това извличаме стойността на избраната клетка, като използватеgetValueatметод наJtableклас.
Сега, да кажем, че искате да направите нещо по -сложно, когато е избрана клетка. Например, може да искате да покажете диалогов прозорец с по -подробна информация за данните в избраната клетка. Ето как можете да промените предишния пример, за да постигнете това:
импортиране на javax.swing.*; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; Public Class TableLectionExample {public static void main (string [] args) {// създаване на нов jTable низ [] columnNames = {"name", "age", "city"}; Object [] [] data = {{"John", 25, "New York"}, {"Jane", 30, "Los Angeles"}, {"Bob", 35, "Chicago"}}; JTable таблица = нов JTable (данни, имена на колони); // Вземете модела за избор на таблицата listeslectionmodel selectionModel = table.getSelectionModel (); // Добавете listElectionListener към селекционния модел selectionmodel.addlistselectionlistener (нов listElectionListener () {@Override public void ValueChanged (listEslectionEvent e) {if (! E.getValueIsAdjusting ()) {int selectedrow = tabledelectedrow (); (SelectedRow! = -1 && SelectedColumn! = -1) {Object SelectedValue = Table.getValueat (SelectedRow, SelectedColumn); // Създайте jframe и добавете таблицата към него jframe frame = new jframe ("Пример за избор на таблица"); frame.add (нов JScrollpane (таблица)); frame.SetDefaultCloseOperation (jframe.exit_on_close); frame.pack (); frame.setvisible (вярно); }}
В този модифициран пример използвамеJoptionpaneКлас за показване на диалогов прозорец с избраната стойност, когато е избрана клетка.
Друго нещо, което може да искате да направите, е да се справите с множество селекции на клетки. По подразбиране,JtableПозволява на потребителя да избира множество клетки, като държи надолуCtrlключ (на прозорци) илиКомандаКлюч (на Mac), докато щракнете върху клетките. За да се справите с множество селекции на клетките, можете да прегледате избраните редове и колони и да извършите желаното действие за всяка избрана клетка. Ето пример:
импортиране на javax.swing.*; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; Public Class TableLectionExample {public static void main (string [] args) {// създаване на нов jTable низ [] columnNames = {"name", "age", "city"}; Object [] [] data = {{"John", 25, "New York"}, {"Jane", 30, "Los Angeles"}, {"Bob", 35, "Chicago"}}; JTable таблица = нов JTable (данни, имена на колони); // Вземете модела за избор на таблицата listeslectionmodel selectionModel = table.getSelectionModel (); // Добавете listElectionListener към Selection Model SelectionModel.AddListSelectionListener (нов listElectionListener () {@Override public void ValueChanged (listEslectionEvent e) {if (! E.getValueIsAdjusting ()) {int [] selectedRows = table.getlectectedRows (); table.getSelectedColumns (); // Създайте jframe и добавете таблицата към него jframe frame = new jframe ("Пример за избор на таблица"); frame.add (нов JScrollpane (таблица)); frame.SetDefaultCloseOperation (jframe.exit_on_close); frame.pack (); frame.setvisible (вярно); }}
В този пример използвамеGetSelectedRowsиGetSelectedColumnsметоди наJtableКлас за получаване на масиви от избраните индекси на ред и колони. След това преминаваме през тези масиви и извличаме стойността на всяка избрана клетка.


Като доставчик на екрана на люлеенето открих, че тези техники за обработка на събития за избор на клетки могат да бъдат много полезни в различни приложения. Независимо дали изграждате система за управление на данни, инструмент за отчитане или друго приложение, което използва таблици, възможността да се справи ефективно с събитията за избор, може да направи приложението ви по-удобно и мощно.
Ако сте на пазара на хартиено целулозно оборудване, предлагаме и страхотни продукти катоДвойна мрежа ротационна барабанна пулп преса, TheМашина за разкъсване на хартияиХоризонтален реактор. Тези продукти са проектирани така, че да отговарят на нуждите на хартиената пулп индустрия и могат да ви помогнат да подобрите ефективността на производството си.
Ако се интересувате да научите повече за нашите суинг екрани или някой от другите ни продукти, не се колебайте да се свържете с нас за преговори за покупка. Винаги сме щастливи да помогнем и очакваме с нетърпение да работим с вас!
Референции:
- „Урок за суинг на Java“ - Документация на Oracle
- "Ефективна Java" - Джошуа Блок
