سؤال

أحاول تعظيم JFrame من داخل Jmenubar ، لا يمكنني نقل إشارة إلى الإطار. هل من الممكن الحصول على إشارة إلى الإطار الذي يتم استخدامه فيه؟

يمكنني الوصول إلى مكون المستوى الأعلى ولكن ليس لديه وسيلة لزيادة الإطار وتقليله.

    public Container getApplicationFrame(ActionEvent event){
         JMenuItem menuItem = (JMenuItem) event.getSource();  
         JPopupMenu popupMenu = (JPopupMenu) menuItem.getParent();  
         Component invoker = popupMenu.getInvoker(); 
         JComponent invokerAsJComponent = (JComponent) invoker;  
         Container topLevel = invokerAsJComponent.getTopLevelAncestor();  
         return topLevel;
    }
هل كانت مفيدة؟

المحلول

يمكنك الحصول على النافذة التي تحتوي على jpanel عبر

Window window = SwingUtilities.getWindowAncestor(popupMenu);

يمكنك بعد ذلك إما تعظيمه باستخدام window.setSize() - أو ، بما أنك تعلم أنه Jframe ، يلقيها لتأطير واستخدام setExtendedState الطريقة التي يذكرها كيفن. رمز مثال من Almanac من مطوري Java لذلك:

// This method minimizes a frame; the iconified bit is not affected
public void maximize(Frame frame) {
    int state = frame.getExtendedState();

    // Set the maximized bits
    state |= Frame.MAXIMIZED_BOTH;

    // Maximize the frame
    frame.setExtendedState(state);
}

نصائح أخرى

بالتأكيد يمكنك خبأ الإطار المعني في متغير محلي في مكان ما؟

بالنسبة إلى تعظيم الإطار فعليًا بمجرد أن تحصل عليه ، فمن المحتمل أن يكون frame.SetExtendedState (upcimized_both) هو ما تريده. جافادوك

على الرغم من أنها ليست أنيقة كما يمكن أن تكون ، فإن الطريق السريع على الأرض على الكود الحالي الخاص بك:

public Frame getApplicationFrame(ActionEvent event){
         if(event.getSource() == null) return null;

         Window topLevel = SwingUtilities.getWindowAncestor(event.getSource());

         if(!(topLevel instanceof Frame)) return null;

         return (Frame)topLevel;
}

...
//Somewhere in your code
Frame appFrame = getApplicationFrame(myEvent);
appFrame.setExtendedState(appFrame.getExtendedState() | Frame.MAXIMIZED_BOTH);
...

الحد الأدنى للإصدار Java 1.4.2. كن متشوقًا ، لم أختبر الرمز أعلاه ، لكن يجب أن تحصل على الفكرة.

يمكن للصف الذي ينشئ الإطار ويمكن أن يعمل Menubar أيضًا كقائمين على عنصر القائمة ، لأنه يمكنه الوصول إلى كل من الإطار و Menubar.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top