Родительские и дочерние окна
Модератор: Absurd
Почти во всех языках программирования есть возможность создания MDI-интерфейса. Есть ли возможность создание таких приложений в Java 2?
- Oscar
- Сообщения: 963
- Зарегистрирован: 29 май 2004, 13:44
- Откуда: Мюнхен (рожден в Киеве)
- Контактная информация:
keo,
http://java.sun.com/docs/books/tutorial ... frame.html
http://java.sun.com/docs/books/tutorial ... eDemo.java
В конструкторе MyInternalFrame нужно обязательно сделать:
setSize(200, 100);
и
setVisible(true);
http://java.sun.com/docs/books/tutorial ... frame.html
http://java.sun.com/docs/books/tutorial ... eDemo.java
В конструкторе MyInternalFrame нужно обязательно сделать:
setSize(200, 100);
и
setVisible(true);
Спасибо! Все получилось. Но почему такой внешний вид? Я предполагаю, что это из-за использования компонента JDesktopPane().
Нельзя ли как-нибудь изменить внешний вид?
Нельзя ли как-нибудь изменить внешний вид?
- Oscar
- Сообщения: 963
- Зарегистрирован: 29 май 2004, 13:44
- Откуда: Мюнхен (рожден в Киеве)
- Контактная информация:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
forum/viewtopic.php?t=4706
UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
forum/viewtopic.php?t=4706
Спасибо.
Как бы в продолжение этой темы.
Нужно из дочернего окна открыть модально диалог. Я пробовал использовать JDialog. Конструктор требует чтобы Owner был либо Dialog либо Frame, а у меня JInternalFrame...
Подскажите как это сделать.
Пытался передавать в дочернее окно ссылку на родительское, а потом использовать ее при вызове диалога - окно появляется, но закрыть его не смог...
Нужно из дочернего окна открыть модально диалог. Я пробовал использовать JDialog. Конструктор требует чтобы Owner был либо Dialog либо Frame, а у меня JInternalFrame...
Подскажите как это сделать.
Пытался передавать в дочернее окно ссылку на родительское, а потом использовать ее при вызове диалога - окно появляется, но закрыть его не смог...
Получилось!!!
Но может быть кто-нибудь подскажет можно ли JFrame сделать модальным, если можно то как?
Просто вместо Dialog из AWT, попробовал JDialog из Swingkeo писал(а):Пытался передавать в дочернее окно ссылку на родительское, а потом использовать ее при вызове диалога - окно появляется, но закрыть его не смог...
Но может быть кто-нибудь подскажет можно ли JFrame сделать модальным, если можно то как?
Рано я стал радоваться!
Создал на основе JDialog свой класс
Диалог вызывается из подчиненной формы, а Owner - это ссылка на родительское окно
диалог отображается как мне нужно... но не модально
Если super(Owner, Caption); заменить на super(Owner, Caption, true); отображается модально, но нет ни текстовых полей, ни кнопок, можно изменять размер диалога и т.д.
Что не так?
Создал на основе JDialog свой класс
Код: Выделить всё
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class frmEditPeriodical
extends JDialog
implements ActionListener {
JButton btnOk = new JButton("OK");
JLabel lbl1 = new JLabel("Дата");
JLabel lbl2 = new JLabel("Значение");
JTextField txt1 = new JTextField();
JTextField txt2 = new JTextField();
Container contPane;
public frmEditPeriodical(JFrame Owner, String Caption, String Key,
String Mode) {
super(Owner, Caption);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setBounds( (screenSize.width - 200) / 2, (screenSize.height - 130) / 2, 200,
130);
setVisible(true);
setResizable(false);
contPane = this.getContentPane();
contPane.setLayout(null);
contPane.add(btnOk);
contPane.add(lbl1);
contPane.add(lbl2);
contPane.add(txt1);
contPane.add(txt2);
btnOk.setVisible(true);
lbl1.setVisible(true);
lbl2.setVisible(true);
txt1.setVisible(true);
txt2.setVisible(true);
btnOk.setBounds(65, 80, 60, 20);
lbl1.setBounds(5, 10, 50, 20);
lbl2.setBounds(5, 40, 50, 20);
txt1.setBounds(80, 10, 100, 20);
txt2.setBounds(80, 40, 100, 20);
}
public void actionPerformed(ActionEvent e) {
}
}
диалог отображается как мне нужно... но не модально
Если super(Owner, Caption); заменить на super(Owner, Caption, true); отображается модально, но нет ни текстовых полей, ни кнопок, можно изменять размер диалога и т.д.
Что не так?
- Oscar
- Сообщения: 963
- Зарегистрирован: 29 май 2004, 13:44
- Откуда: Мюнхен (рожден в Киеве)
- Контактная информация:
keo,
Swing сам найдёт, что ему нужно.
Далее оффтопик:
это всё нафик не нужно
очень не надёжная конструкция
Я бы сделал так:
Во-первых, owner может быть и null.keo писал(а):Конструктор требует чтобы Owner был либо Dialog либо Frame, а у меня JInternalFrame...
Swing сам найдёт, что ему нужно.
Код: Выделить всё
new frmEditPeriodical(]
[quote="keo"]Что не так?[/quote]
[b]setVisible(true)] - должна быть [u]последняя[/u] операция в конструкторе!
[code]public frmEditPeriodical(JFrame Owner, String Caption, String Key,
String Mode) {
super(Owner, Caption, true);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setBounds( (screenSize.width - 200) / 2, (screenSize.height - 130) / 2, 200,
130);
setResizable(false);
contPane = this.getContentPane();
contPane.setLayout(null);
contPane.add(btnOk);
contPane.add(lbl1);
contPane.add(lbl2);
contPane.add(txt1);
contPane.add(txt2);
btnOk.setVisible(true);
lbl1.setVisible(true);
lbl2.setVisible(true);
txt1.setVisible(true);
txt2.setVisible(true);
btnOk.setBounds(65, 80, 60, 20);
lbl1.setBounds(5, 10, 50, 20);
lbl2.setBounds(5, 40, 50, 20);
txt1.setBounds(80, 10, 100, 20);
txt2.setBounds(80, 40, 100, 20);
setVisible(true);
}
Код: Выделить всё
btnOk.setVisible(true);
lbl1.setVisible(true);
lbl2.setVisible(true);
txt1.setVisible(true);
txt2.setVisible(true);
Код: Выделить всё
contPane.setLayout(null);
Я бы сделал так:
Код: Выделить всё
public class FrmEditPeriodical extends JDialog implements ActionListener {
private JTextField txt1, txt2;
public FrmEditPeriodical(JFrame owner, String caption, String key, String mode) {
super(owner, caption, true);
setLayout(new BorderLayout());
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(2, 2));
JButton btnOk = new JButton("OK");
btnOk.addActionListener(this);
txt1 = new JTextField();
txt2 = new JTextField();
panel.add(new JLabel("Datum"));
panel.add(txt1);
panel.add(new JLabel("Value"));
panel.add(txt2);
add(panel, BorderLayout.CENTER);
add(btnOk, BorderLayout.SOUTH);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setLocation((screenSize.width - 200) / 2, (screenSize.height - 130) / 2);
pack();
setResizable(false);
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
System.out.println(txt1.getText());
System.out.println(txt2.getText());
setVisible(false);
}
}
Спасибо. Теперь все работает!
Еще вопрос. Если после завершения работы с диалогом закрывать его с помощью
он будет оставаться в памяти или сборщик мусора его уничтожит?
Еще вопрос. Если после завершения работы с диалогом закрывать его с помощью
Код: Выделить всё
setVisible(false);