Ok, vous auriez dû spécifier le problème "caché" dans la question initiale.
J'ai trouvé une solution très délicate, je ne suggère pas de l'utiliser, sauf de développer un meilleur, peut-être à partir de cela. Étant donné un JInternalFrame, fournissez-lui un écouteur componentMove pour empêcher son déplacement dans des positions cachées. Pour autant que je l'ai testé, il a des problèmes de rafraîchissement (peut-être qu'ils peuvent être résolus) et la stabilité dans les cas extrêmes à évaluer aussi. fourni « tel quel » d'améliorer encore, non pas comme un beau morceau de logiciel :-)
public void componentMoved(ComponentEvent e) {
Rectangle r = new Rectangle();
MyInternalFrame mif = MyInternalFrame.this;
JDesktopPane dp = mif.getDesktopPane();
if (mif.getX() + mif.getWidth()> dp.getWidth()) {
mif.setLocation(mif.getDesktopPane().getWidth()-mif.getWidth(),mif.getY());
}
if (mif.getY() + mif.getHeight()> dp.getHeight()) {
mif.setLocation(mif.getX(), mif.getDesktopPane().getHeight()-mif.getHeight());
}
if (mif.getX()<0) {
mif.setLocation(0, mif.getY());
}
if (mif.getY()<0) {
mif.setLocation(mif.getX(), 0);
}
}
});
Oui, mais le InternalFrame peut être totalement caché sur le bord de son cadre parent. Un moyen d'éviter cela? Je ne veux pas que le cadre interne ou le dialogue flottant soit partiel ou totalement caché par son cadre parent. Cela signifie que la bordure gauche du cadre interne ou de la boîte de dialogue ne peut pas dépasser la bordure gauche de son cadre parent. – 5YrsLaterDBA
@ 5YrsLaterDBA: Voir les méthodes incluant la chaîne 'internal' dans [JOptionPane] (http://download.oracle.com/javase/6/docs/api/javax/swing/JOptionPane.html). –
S'il vous plaît voir la modification ci-dessus. Je ne peux pas utiliser JOptionPane parce que j'ai besoin d'une boîte de dialogue non-modale pour afficher certaines données reçues. – 5YrsLaterDBA