Я пытаюсь создать базовый элемент управления, который будет отображать неукрашенный 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 иногда не рисуется?