JLayeredPaneでアプレットにダイアログもどき

昨日のJLayeredPaneのサンプルのダイアログもどきをもう少しそれらしくしてみた。


/*
* Created on 2006/01/27
*
*/
package test;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

/**
* @author hal
*
*/
public class LayeredPaneApplet extends JApplet {
private JLayeredPane layeredPane;
private JButton pushMe;
private AppletDialog appletDialog;

private final int dialogWidth = 200;
private final int dialogHeight = 200;

public void init() {
appletDialog = new AppletDialog(dialogWidth, dialogHeight);
layeredPane = getLayeredPane();
layeredPane.add(appletDialog, JLayeredPane.MODAL_LAYER);

pushMe = new JButton("Push me!");
pushMe.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent mouse) {
int x = mouse.getX();
int y = mouse.getY();
x -= (dialogWidth / 2);
y -= (dialogWidth / 2);
appletDialog.setMessageContent("Hi!");
appletDialog.showDialog(x, y);
}
});
getContentPane().add(pushMe);
setSize(400, 300);
}

}

class AppletDialog extends JPanel {
private JTextArea messageArea;
private JButton okButton;
private int width;
private int height;

public AppletDialog(int width, int height) {
super(new BorderLayout());

messageArea = new JTextArea();
messageArea.setEditable(false);
messageArea.setLineWrap(true);
messageArea.setMargin(new Insets(10, 10, 10, 10));
messageArea.setBackground(getBackground());
add(messageArea, BorderLayout.CENTER);

okButton = new JButton("OK");
okButton.setVisible(false);
okButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent action) {
setVisible(false);
}
});
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
buttonPanel.add(okButton);
add(buttonPanel, BorderLayout.SOUTH);

setOpaque(true);
setBorder(BorderFactory.createRaisedBevelBorder());
setVisible(false);
this.width = width;
this.height = height;
}

void setMessageContent(String message) {
messageArea.setText(message);
}

public void setVisible(boolean visible) {
messageArea.setVisible(visible);
okButton.setVisible(visible);
super.setVisible(visible);
}

public void showDialog(int x, int y) {
Dimension d = getPreferredSize();
messageArea.setText(d.toString());
setBounds(x, y, width, height);
setVisible(true);
}

}