Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > JDialog


Автор: Rusico 5.10.2005, 13:05
Привет всем.

Может кто сможет подсказать: в стандартном JDialog нет кнопок (_;O) - свернуть и развернуть,
как их добавить?

Автор: JulT 5.10.2005, 13:07
никак

Автор: Rusico 5.10.2005, 13:09
Хороший ответ.
Если это так, тогда как сделать обычный JFrame модальным?

Автор: JulT 5.10.2005, 13:53
Цитата(Rusico @ 5.10.2005, 13:09)
Хороший ответ.
Если это так, тогда как сделать обычный JFrame модальным?

насколько я знаю тоже никак

Автор: djGri 10.10.2005, 03:03
JFrame .setModal = true;
что-то наподобии http://forum.vingrad.ru/index.php?showtopic=45442&hl=djgri

Автор: LSD 10.10.2005, 09:50
Цитата(djGri @ 10.10.2005, 04:03)
JFrame .setModal = true;

У JFrame нет такого метода.

Цитата(Rusico @ 5.10.2005, 14:09)
Если это так, тогда как сделать обычный JFrame модальным?

Надо повесить свой листенер на события окна и отлавливать потерю фокуса окном.

Автор: batigoal 10.10.2005, 12:51
Цитата(LSD @ 10.10.2005, 10:50)
Надо повесить свой листенер на события окна и отлавливать потерю фокуса окном.

А это не заблокирует всю систему?

Автор: LSD 10.10.2005, 13:43
Цитата(Lamer @ 10.10.2005, 13:51)
А это не заблокирует всю систему?

Да нет, под XP оно даже не всегда всплывает наверх. Окно всплывает только для того же приложения, для других приложений оно остается внизу.
Код
public class TopFrame extends JFrame implements WindowListener, ActionListener
{
  private JButton topButton;

  public TopFrame()
  {
    super("Top frame");

    topButton = new JButton("Close window");
    topButton.addActionListener(this);
    getContentPane().add(topButton);

    addWindowListener(this);
    pack();
    setLocationRelativeTo(null);
    setVisible(true);
  }

  public void windowOpened(WindowEvent e)
  {}

  public void windowClosing(WindowEvent e)
  {}

  public void windowClosed(WindowEvent e)
  {}

  public void windowIconified(WindowEvent e)
  {}

  public void windowDeiconified(WindowEvent e)
  {}

  public void windowActivated(WindowEvent e)
  {}

  public void windowDeactivated(WindowEvent e)
  {
    toFront();
  }

  public void actionPerformed(ActionEvent e)
  {
    System.exit(0);
  }

  public static void main(String[] args)
  {
    JFrame frame = new JFrame("Frame");
    frame.getContentPane().add(new JFileChooser());
    frame.pack();
    frame.setVisible(true);

    frame = new JFrame("Frame");
    frame.getContentPane().add(new JFileChooser());
    frame.pack();
    frame.setVisible(true);
    new TopFrame();
  }
}

Автор: djGri 10.10.2005, 18:00
Посмотри как сделать модальные фреймы http://java.sun.com/developer/JDCTechTips/2001/tt1220.html

Автор: LSD 10.10.2005, 22:42
Цитата(djGri @ 10.10.2005, 19:00)
Посмотри как сделать модальные фреймы Sun

Это урок по созданию Modal Internal Frames. Internal Frame - это не окно в понимании системы, это обычный SWING компонент, просто он эмулирует поведение окна, это не верхний компонент в иерархии как Frame, Window или Applet, он не может выйти за пределы родительского компонента.
Может быть конечно такой диалог подойдет, но он совсем не эквивалентен обычному диалогу.

Есть еще один способ, но мне пока не удалось довести его до конца:
Код
JFrame frame = new JFrame("Frame");
frame.getContentPane().add(new JColorChooser());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setVisible(true);

JDialog dialog = new JDialog(frame,"Modal dialog" , true);
dialog.setUndecorated(true);
dialog.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
dialog.getContentPane().add(new JLabel("Some text"));
dialog.pack();
dialog.setLocationRelativeTo(null);
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);

в данном случае кнопочки управления окном рисует уже не ОС, а RootPane, вернее его Look And Feel. И если покопаться в тонкостях реализации LaF то я думаю можно заставить его рисовать таки эти кнопочки (ведь для JFrame они рисуются). И таким макаром можно получить полноценный модальный диалог. Если у кого есть время и желание покопаться то велкам smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)