Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> посоветуйте как лучше реализовать gui, gui 
:(
    Опции темы
zhz
Дата 26.4.2011, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 31.10.2006
Где: Petropavlovsk-Kam chatsky

Репутация: нет
Всего: 2



Для приложения, работающего с БД, решил навалять ГУИ следующего вида: слева JTree в котором пользователь выбирает узел, и в зависимости от выбранного узла, в правой  части отображается соответствующая панель с соответствующим набором компонентов(таблица+кнопки + всякая ерунда ). Вопрос , как правильно все это реализовать. Работаю в NetBeans. Начал реализовывать следу.щим образом:  справа от jtree кидаю jpanel и на нее нужные компоненты, поверх нее следующую jpanel с компонентами, и т.д. По событию   JTree ValueChanged делаю всем ненужным панелям setVisible(false) а нужной setVisible(true). Но данный вариант представляется мне крайне неказистым. Может правильнее как-то по другому? Динамически? Как?
PM MAIL ICQ   Вверх
Stolzen
Дата 26.4.2011, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 3
Всего: 48



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



--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
COVD
Дата 26.4.2011, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 4
Всего: 43



Цитата

делаю всем ненужным панелям setVisible(false) а нужной setVisible(true). 


CardLayout, showCard("name");
PM MAIL   Вверх
dorogoyIV
Дата 26.4.2011, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



примерно так:
Код

import java.awt.*;
import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.*;
import java.util.*;

public class Test extends JFrame
                  implements TreeSelectionListener
{
 private JTree tree = new JTree();
 private TreeModel model = tree.getModel();
 private ArrayList <Object> children = new ArrayList <Object> ();
 private CardLayout cl = new CardLayout();
 private JPanel center = new JPanel(cl);

 public Test()
 {
  setDefaultCloseOperation(3);
  setBounds(100, 100, 400, 300);

  add(new JScrollPane(tree), "West");
  tree.addTreeSelectionListener(this);

  getChildren(model.getRoot());
  createCards();

  add(center, "Center");
 }

 public void valueChanged(TreeSelectionEvent e)
 {
  cl.show(center, e.getPath().getLastPathComponent().toString());
 }

 private void getChildren(Object o)
 {
  children.add(o);
  int count = model.getChildCount(o);

  for(int i = 0; i < count; i++)
   getChildren(model.getChild(o, i));
 }

 private void createCards()
 {
  for(int i = 0; i < children.size(); i++)
  {
   CardPanel cp = new CardPanel(children.get(i).toString());
   center.add(cp, children.get(i).toString());
  }
 }

 public static void main(String [] args)
 {
  SwingUtilities.invokeLater(new Runnable()
  {
   public void run()
   {
    new Test().setVisible(true);
   }
  });
 }
}

class CardPanel extends JPanel
{
 CardPanel(String s)
 {
  setBackground(new Color(new Random().nextInt(255),
                          new Random().nextInt(255),
                          new Random().nextInt(255)));
  add(new JLabel(s));
 }
}

PM MAIL   Вверх
zhz
Дата 27.4.2011, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 31.10.2006
Где: Petropavlovsk-Kam chatsky

Репутация: нет
Всего: 2



Спасибо, именно то, что нужно!
Читая ответы в темах данной ветки, складывается впечатление, что знающие люди не используют dragndrop построение GUI в JAVA Swing. Это old-school консерватизм или действительно правильный подход к написанию кода?  
PM MAIL ICQ   Вверх
COVD
Дата 27.4.2011, 05:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 4
Всего: 43



Кому как удобнее. Я использую Нетбинс билдер.
PM MAIL   Вверх
Skipy
Дата 27.4.2011, 12:14 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 487
Регистрация: 24.8.2006
Где: Москва, Россия

Репутация: 4
Всего: 16



Цитата(zhz @ 27.4.2011,  00:47)
Читая ответы в темах данной ветки, складывается впечатление, что знающие люди не используют dragndrop построение GUI в JAVA Swing. Это old-school консерватизм или действительно правильный подход к написанию кода?

Ну, во-первых, вот такие соображения: http://www.skipy.ru/philosophy/visualDesigners.html

Во-вторых, возьмите, например, формочку элементов на 20, сгенерированную NetBeans с настройками по умолчанию. И попробуйте хотя бы разобраться по коду, что там делается. Добавить туда поле даже не предлагаю. Проблема в том, что по умолчанию используется GroupLayout, а он и для опытного человека непрозрачен. 

В итоге, начав делать UI в NetBeans, Вы привяжетесь к нему намертво и не сможете соскочить. Впрочем, это из "во-первых".

Код, написанный вручную, будет прозрачнее и понятнее. Если писать небольшие тестовые приложения - проще именно руками. В промышленном режиме - возможно, стоит использовать визуальный дизайнер. С пониманием всех рисков.


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
COVD
Дата 27.4.2011, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 4
Всего: 43



Цитата

В промышленном режиме - возможно, стоит использовать визуальный дизайнер. С пониманием всех рисков. 

smile Справедливо не только по отношению к визуальным дизайнерам. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0457 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.