Наверняка сказать не могу.
Чтобы не задумываться, можно в actionPerformed запихнуть:
Код: Выделить всё
dispose();
Модератор: Absurd
Код: Выделить всё
dispose();
Столько боков было и все из-за того, что сначала делал форму видимой, а потом уже раставлял и настраивал компоненты! И главное эту особенность не в одной книге не встречал (может я не те книги читаю)!setVisible(true); - должна быть последняя операция в конструкторе!
ну а если окно имеет постоянный размер? что может случится?contPane.setLayout(null);
очень не надёжная конструкция
Код: Выделить всё
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.border.AbstractBorder;
import javax.swing.plaf.basic.BasicInternalFrameUI;
public class Frames extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
JInternalFrame left, top, right, bottom, main;
JCheckBoxMenuItem leftMenuItem, rightMenuItem, topMenuItem, bottomMenuItem;
public Frames() {
super();
setDefaultCloseOperation(EXIT_ON_CLOSE);
setJMenuBar(createMenuBar());
JDesktopPane desktop = new JDesktopPane();
desktop.setLayout(new BorderLayout());
setContentPane(desktop);
createInternalFrames();
add(main, BorderLayout.CENTER);
setSize(800, 600);
setVisible(true);
}
private void createInternalFrames() {
left = new LayoutInternalFrame(100, 0);
top = new LayoutInternalFrame(0, 100);
bottom = new LayoutInternalFrame(0, 100);
right = new LayoutInternalFrame(100, 0);
main = new LayoutInternalFrame(0, 0);
main.setResizable(false);
}
private JMenuBar createMenuBar() {
JMenuBar menuBar = new JMenuBar();
JMenu menu = new JMenu("View");
menu.setMnemonic(KeyEvent.VK_V);
menuBar.add(menu);
leftMenuItem = new JCheckBoxMenuItem("Left");
leftMenuItem.addActionListener(this);
menu.add(leftMenuItem);
rightMenuItem = new JCheckBoxMenuItem("Right");
rightMenuItem.addActionListener(this);
menu.add(rightMenuItem);
topMenuItem = new JCheckBoxMenuItem("Top");
topMenuItem.addActionListener(this);
menu.add(topMenuItem);
bottomMenuItem = new JCheckBoxMenuItem("Bottom");
bottomMenuItem.addActionListener(this);
menu.add(bottomMenuItem);
return menuBar;
}
class LayoutInternalFrame extends JInternalFrame {
private static final long serialVersionUID = 1L;
public LayoutInternalFrame(int width, int height) {
super();
setBorder(new InternalFrameBorder());
setSize(new Dimension(width, height));
((BasicInternalFrameUI) getUI()).setNorthPane(null);
setResizable(true);
setVisible(true);
}
public void reshape(int x, int y, int width, int height) {
super.reshape(x, y, width, height);
setPreferredSize(new Dimension(width, height));
}
}
class InternalFrameBorder extends AbstractBorder {
private static final long serialVersionUID = 1L;
private Insets insets = new Insets(2, 2, 2, 2);
public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) {
g.setColor(Color.BLACK);
g.drawLine(1, 0, w - 2, 0);
g.drawLine(0, 1, 0, h - 2);
g.drawLine(w - 1, 1, w - 1, h - 2);
g.drawLine(1, h - 1, w - 2, h - 1);
}
public Insets getBorderInsets(Component c) {
return insets;
}
public Insets getBorderInsets(Component c, Insets newInsets) {
newInsets.top = insets.top;
newInsets.left = insets.left;
newInsets.bottom = insets.bottom;
newInsets.right = insets.right;
return newInsets;
}
}
public void actionPerformed(ActionEvent e) {
if ("Top".equals(e.getActionCommand())) {
if (topMenuItem.isSelected()) {
add(top, BorderLayout.NORTH);
} else {
remove(top);
}
} else if ("Left".equals(e.getActionCommand())) {
if (leftMenuItem.isSelected()) {
add(left, BorderLayout.WEST);
} else {
remove(left);
}
} else if ("Right".equals(e.getActionCommand())) {
if (rightMenuItem.isSelected()) {
add(right, BorderLayout.EAST);
} else {
remove(right);
}
} else if ("Bottom".equals(e.getActionCommand())) {
if (bottomMenuItem.isSelected()) {
add(bottom, BorderLayout.SOUTH);
} else {
remove(bottom);
}
}
validate();
repaint();
}
public static void main(String[] args) {
new Frames();
}
}
Можно как-нибуть получить список "имен" всех созданных окон?Добавлено: 25.04.06 20:12
keo,
http://java.sun.com/docs/books/tutorial ... frame.html
http://java.sun.com/docs/books/tutorial ... eDemo.java
...