Общее свойство для JButtons

1

Я новичок в сворачивании основных функций. У меня есть опыт в веб-дизайне. 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? Я знаю способ итерации и делать это. Но я хочу уменьшить количество строк, вызовы функций. Вот почему я разместил этот вопрос. пожалуйста, дайте мне знать

  • 0
    Вы можете использовать JButton#setNamegetName ) и или JButton#setActionCommandgetActionName ), который, вероятно, является типичным механизмом, используемым для уникальной идентификации кнопки ... очевидно, что сводится к вашим уникальным именам создания;)
  • 0
    «То есть есть идентификатор для уникальности и класс для общности. Точно так же, есть ли что-нибудь в джава-свинг-кнопках?» Не в том смысле, в котором вы спрашиваете. "Это правильный способ установить уникальные идентификаторы? Есть ли другие способы?" Не идеально, нет. Но тогда, если у вас есть «2D-массив», это легко повторить. Возможно, вы после Action или их коллекции. « Мой второй вопрос: « Каждая тема здесь должна быть сфокусирована на одном вопросе, надеемся, по крайней мере, на один хороший и принятый ответ. Но я даже не понимаю понятие «отключение классов».
Показать ещё 16 комментариев
Теги:
arrays
swing
jbutton

2 ответа

3
Лучший ответ

В вашем примере кода...

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

Посмотрите, как использовать действия для получения более подробной информации.

  • 0
    Спасибо :) Вы действительно MAdProgrammer :) я проверю это.
  • 0
    не согласен JButton # setName / setActionCommand, не говоря уже о координатах внутри массива, все еще есть проблема xy -> где этот элемент действительно размещен, вы можете мультиплеерно использовать этот идентификатор, конечно, не атакуйте свою личность :-), как вы знаете, очень Что ж
Показать ещё 1 комментарий
0

Вы всегда можете сделать карту Object → Integer или String с вашим идентификатором. Напр.:

Map<JButton, Integer> buttonToIdMap = new TreeMap<JButton, Integer>();

И введите на карту свои идентификаторы:

buttonToIdMap.put(button, 123);

Когда вам нужен идентификатор кнопки:

int id = buttonToIdMap.get(button);
  • 0
    Это действительно должен быть комментарий, на данном этапе (путаницы в самом вопросе). Кажется, у вас сейчас достаточно представителей. чтобы делать комментарии, пожалуйста, используйте это.
  • 0
    @AndrewThompson о чем ты говоришь? Это решает проблему.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню