Я новичок в сворачивании основных функций. У меня есть опыт в веб-дизайне. id
уникальности и class
для общности.
<div class="x" id="div1"></div>
<div class="x" id="div2"></div>
Если я хочу установить свойство для всех div, я использую класс x.
.x
{
} or via javascript or jquery
Если я хочу получить доступ к одному div, я буду использовать id. Потому что он уникален.
Точно так же есть что-нибудь в кнопках java swing? Предположим, у меня есть 2D-массив jbuttons.
Пробовал до сих пор
Я нашел putClientProperty
и getClientproperty
. Он устанавливает и возвращает id.
btnName.putClientproperty('id',value);
Мой первый вопрос:
Правильно ли установить уникальный идентификатор? Есть ли другие способы?
JButton[][] btns = new JButton[5][5];
for(int i=0; i<5; i++)
{
for(int j=0;j<5;j++)
{
btns[i][j] = new JButton("Button"+i+j);
}
}
В приведенном выше коде будут созданы 25 кнопок с именами.
Мой второй вопрос: я не знаю об этом. Как установить классы, чтобы я мог включать или отключать их с помощью одного кода строки? Я имел в виду, что All the 25 buttons has a common class let it be tiles
JButton.find('tiles').setEnabled(false);
Есть ли что-то подобное в java? Я знаю способ итерации и делать это. Но я хочу уменьшить количество строк, вызовы функций. Вот почему я разместил этот вопрос. пожалуйста, дайте мне знать
В вашем примере кода...
JButton[][] btns = new JButton[5][5];
for(int i=0; i<5; i++)
{
for(int j=0;j<5;j++)
{
btns[i][j] = new JButton("Button"+i+j);
}
}
Ты говоришь...
В приведенном выше коде будут созданы 25 кнопок с именами.
Это не совсем так, это создает 25 кнопок с текстом Button"+i+j
, это может звучать как нит-кик, но важно, поскольку кнопки не имеют имен и пока что единственное их дифференцирование - это текст, который отображается на экране.
Несколько кнопок могут иметь один и тот же текст, поэтому на самом деле это не создает уникальность, отличную от их индивидуальной (памяти) ссылки.
"Уникальные идентификаторы" также неоднозначны. Каждая созданная вами кнопка уникальна, но может иметь сходные свойства, такие как name
, text
и actionCommand
, поэтому единственное, что делает ее уникальной, - это местоположение в памяти.
Если это то, что вы имеете в виду, тогда да, это было бы началом...
Мой второй вопрос: я не знаю об этом. Как установить классы, чтобы я мог включать или отключать их с помощью одного кода строки? Я имел в виду, что все 25 кнопок имеют общий класс, пусть это будут плитки
С точки зрения API, нет. Вам нужно будет перебирать кнопки и управлять ими по отдельности. Однако, сказав это, вы можете воспользоваться API Action
.
Action
как правило, является автономной единицей работы, что упрощает применение к нескольким кнопкам, пунктам меню и привязкам клавиш... но в вашем случае мы заинтересованы только в том, чтобы манипулировать enabled
состоянием, например, начиная с...
public class GroupAction extends AbstractAction {
@Override
public void actionPerformed(ActionEvent evt) {
}
}
Тогда вы могли бы сделать что-то вроде...
GroupAction groupAction = new GroupAction();
JButton[][] btns = new JButton[5][5];
for(int i=0; i<5; i++)
{
for(int j=0;j<5;j++)
{
btns[i][j] = new JButton(groupAction);
// This is important as the button will want
// to use the Action properties to configure itself
btns[i][j].setText("Button"+i+j);
}
}
Тогда вы можете использовать что-то вроде...
groupAction.setEnabled(false);
отключить все кнопки с помощью GroupAction
экземпляра GroupAction
Посмотрите, как использовать действия для получения более подробной информации.
Вы всегда можете сделать карту Object → Integer или String с вашим идентификатором. Напр.:
Map<JButton, Integer> buttonToIdMap = new TreeMap<JButton, Integer>();
И введите на карту свои идентификаторы:
buttonToIdMap.put(button, 123);
Когда вам нужен идентификатор кнопки:
int id = buttonToIdMap.get(button);
JButton#setName
(иgetName
) и илиJButton#setActionCommand
(иgetActionName
), который, вероятно, является типичным механизмом, используемым для уникальной идентификации кнопки ... очевидно, что сводится к вашим уникальным именам создания;)Action
или их коллекции. « Мой второй вопрос: « Каждая тема здесь должна быть сфокусирована на одном вопросе, надеемся, по крайней мере, на один хороший и принятый ответ. Но я даже не понимаю понятие «отключение классов».