Я пытаюсь создать базовый элемент управления, который будет отображать недокрашенный JFrame прямо под ним при нажатии кнопки. Я пытаюсь имитировать функциональность раскрывающегося типа, но с моей собственной рамкой вместо панели. Мой компонент содержит член класса производного элемента управления JFrame, который я хотел бы показать. В определенных ситуациях, когда вызывается setVisible, содержимое этого JFrame не отображается. Это, кажется, происходит, когда я пытаюсь отобразить JFrame на моем левом крайнем мониторе, который использует отрицательные координаты x (мой основной монитор - средний монитор). Странно то, что эта проблема появляется только на моем компьютере с Windows 7, но не на компьютере с XP.
Вот очень простой пример, демонстрирующий проблему. Как видите, это очень простой пример, который должен просто скрыть и отобразить DropFrame. Я опустил код из initComponents, в этом случае все, что он делает, это добавляет кнопку к каждому фрейму и необходимые ActionListeners для каждой кнопки.
Код:
public class NewJFrame extends javax.swing.JFrame {
private javax.swing.JButton jButton2;
private DropFrame f = new DropFrame();
/** Creates new form NewJFrame */
public NewJFrame() {
initComponents();
}
private void initComponents() {
//Create button and add it to the frame...
pack();
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
SwingUtilities.invokeLater(new Runnable()
{
public void run() {
Point p = jButton2.getLocationOnScreen();
f.setLocation(p.x, p.y + 25);
f.setVisible(true);
}
});
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new NewJFrame().setVisible(true);
}
});
} }
public class DropFrame extends javax.swing.JFrame {
private javax.swing.JButton jButton1;
/** Creates new form NewJFrame1 */
public DropFrame() {
initComponents();
}
private void initComponents() {
//Create button and add to frame...
pack();
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
this.setVisible(false);
} }
Проблема не существует, если я создаю новый DropFrame при каждом нажатии кнопки, в отличие от повторного использования и настройки видимости того же кадра, но это нежелательно.
Любые идеи о том, почему мой DropFrame иногда не рисуется?