Родительские и дочерние окна
Добавлено: 25 апр 2006, 17:46
Почти во всех языках программирования есть возможность создания MDI-интерфейса. Есть ли возможность создание таких приложений в Java 2?
Просто вместо Dialog из AWT, попробовал JDialog из Swingkeo писал(а):Пытался передавать в дочернее окно ссылку на родительское, а потом использовать ее при вызове диалога - окно появляется, но закрыть его не смог...
Код: Выделить всё
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) {
}
}
Во-первых, owner может быть и null.keo писал(а):Конструктор требует чтобы Owner был либо Dialog либо Frame, а у меня JInternalFrame...
Код: Выделить всё
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);