Мне нужно представить распределение 100% некоторого ресурса между 3 владельцами в GUI - какие-нибудь рекомендации? - PullRequest
1 голос
/ 23 марта 2009

Для 2 владельцев ответ прост - используйте ползунок с одним владельцем слева, а другим справа, и слайдом, чтобы контролировать процент каждого.

Как мне сделать это с 3 или более владельцами?

В частности, я говорю о графическом интерфейсе на основе Java Swing, но в основном ищу идею дизайна.

Спасибо!

Ответы [ 6 ]

2 голосов
/ 23 марта 2009

Как насчет круговой диаграммы, где у вас есть один сегмент на владельца, и пользователь может напрямую манипулировать (перетаскивать мышью) границ между сегментами или выбирать сегмент и вводить его процент.

В качестве альтернативы вы можете расширить ползунок, чтобы на нем было больше нот, поэтому для разделения на 3 человека это выглядело бы так:

|-------O-----O-----------|
0 голосов
/ 23 марта 2009

Создайте треугольник, где вы можете перемещать одну точку. Если это в одном из углов, это означает 100% к этому углу. Если оно посередине, значит 33% для каждого.

0 голосов
/ 23 марта 2009

Чтобы разделить отображение и ввод, как обстоят дела с элементами управления вращением, которые обновляют, скажем, круговую диаграмму? Каждое движение регулятора вращения вверх или вниз равно 2, остальные два регулятора затем понижаются или увеличиваются на 1.

0 голосов
/ 23 марта 2009

Возможно, проще всего реализовать это:

  • 3 ползунка, по одному на каждого владельца.
  • Каждый владелец получает назначение their_slider_value / total_of_all_slider_values.

Некоторые примеры:

Если A установлено на 0, B установлено на 1/2, а C установлено на полное, A получает 0%, B получает 33,3% и C получает 66,6%

   A = A_slider / (A_slider + B_slider + C_slider) 
     = 0        / (0        + 1/2      + 1)        = 0   =  0.0%
   B = B_slider / (A_slider + B_slider + C_slider) 
     = (1/2)    / (0        + 1/2      + 1)        = 1/3 = 33.3% 
   C = C_slider / (A_slider + B_slider + C_slider) = 
       (1)      / (0        + 1/2      + 1)        = 2/3 = 66.6%

Если A, B и C все установлены на максимальное значение (или на минимальное значение), каждый из них получает 1/3

Преимущества:

  • Он должен быть интуитивно понятным (относительные значения одинаковы; если A_slider в два раза больше, чем B_slider, он получает в два раза больше ресурсов)
  • Вы можете использовать существующие элементы управления (т. Е. Не изобретать новые элементы управления)
  • Легко представить 0% (вам не нужно беспокоиться о перекрытии ползунков)
  • Легко расширить до 4 или 5 или многих владельцев по мере необходимости.

Недостатки:

  • Есть много способов представить одно и то же распределение

Если вы хотите приложить немного больше усилий, вы можете сопровождать ползунки текстом (в процентах) или графическим представлением (а не тем, что пользователь мог бы манипулировать) фактическими выделениями, которые представляли ползунки (либо заполненная полоса с распределениями или круговой диаграммой и т. д.)

0 голосов
/ 23 марта 2009

Звучит так, как будто вам нужно создать новый Component, чтобы эффективно включить эту функцию.

Одним из возможных решений было бы создание подкласса JSlider и предоставление нескольких «больших пальцев» (я думаю, что это правильный термин), которые вы не можете скользить друг за другом. На этой простой диаграмме «-» представляет единицы дорожки, а «|» представляет большой палец на слайдере:

--------|--------|--------

Здесь каждый из трех пользователей имеет равное распределение ресурса.

Вместо того, чтобы большой палец представлял значение для пользователя, он представлял бы верхний или нижний предел выделения этого пользователя, а расстояние между двумя большими пальцами (или одним большим пальцем и концом дорожки) представляло бы пользователя распределение. Вы можете поддержать любое количество пользователей, просто добавив дополнительные пальцы.

0 голосов
/ 23 марта 2009

Как насчет трех ползунков, каждый от 0% до 100%.
Увеличение любого ползунка на X% уменьшает остальные два на X / 2%.
Вы также можете иметь переключатель для каждого ползунка, из которых только один или один может быть выбран за один раз. Если выбран переключатель для данного ползунка, этот ползунок заблокирован, и увеличение одного из других ползунков на X% уменьшает оставшийся ползунок на X%.

Какая неуклюжая.

У вас также может быть круговая диаграмма с тремя срезами, и вы можете просто перетаскивать разделительные линии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...