JFrame在JFrame中使用ComponentListener()的componentResized()时执行无限次

毒蛇

ComponentListener在JFrame中添加了一个方法,并在其componentResized()方法中保留了一些代码,这些代码使应用程序执行无限窗口。这是因为我在componentResized()方法内部创建了该类的对象在这里我想做的是访问其内部类的方法BottomPanel()。我在这里附加了我的可执行代码。

  package nonResponsiveButtons;

    import java.awt.Color;
    import java.awt.event.ComponentEvent;
    import java.awt.event.ComponentListener;
    import javafx.embed.swing.JFXPanel;
    import javafx.event.ActionEvent;
    import javafx.event.EventHandler;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.layout.HBox;
    import javafx.scene.layout.Pane;
    import javafx.application.Platform;

    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;

    public class NonResponsiveButtons extends JFrame {
    private int applicationWidth_600 = 600;
    private int applicationHeight_600 = 600;

    private int upperPanelHeight_500 = 500;
    private int bottomPanelHeight_100 = (applicationWidth_600-upperPanelHeight_500); 

    /**
     * 
     * @return the height of the jframe
     */
    public int getJframeHeight(){
        return this.getHeight();        
    }

    /**
     * 
     * @return the width of the jframe
     */
    public int getJframeWidth(){
        return this.getWidth();
    }

    public static void main(String[] args) {
        new NonResponsiveButtons();
    }



    public NonResponsiveButtons(){

        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                try{
                new JFXPanel();
                BottomPanel bottomPanel = new BottomPanel();
                add(bottomPanel);
                }
                catch(Exception e){
                    System.out.println("Error in swing utilities thread :" + e.getMessage());
                }

            }
        });

        this.setSize(applicationWidth_600, applicationHeight_600);
        this.addComponentListener(new ComponentListener() {

            @Override
            public void componentShown(ComponentEvent arg0) {
                // TODO Auto-generated method stub


            }

            //gets executed every time
            @Override
            public void componentResized(ComponentEvent arg0) {
                // TODO Auto-generated method stub
                System.out.println("Component resized");
                NonResponsiveButtons nrb = new NonResponsiveButtons();  //this code creates a new window

                NonResponsiveButtons.BottomPanel nonResponsiveBottmPanel = nrb.new BottomPanel();  //this code always creates a new window

                nonResponsiveBottmPanel.centeriseBottomPanelComponents();               

            }

            @Override
            public void componentMoved(ComponentEvent arg0) {
                // TODO Auto-generated method stub

            }

            @Override
            public void componentHidden(ComponentEvent arg0) {
                // TODO Auto-generated method stub

            }
        });
        getContentPane().setLayout(null);
        add(jPanel());              
        setVisible(true);
    }



    private JPanel jPanel(){
        JPanel panel = new JPanel();
        panel.setSize(applicationWidth_600,upperPanelHeight_500);
        panel.setBackground(Color.blue);
        return panel;
    }

    private class BottomPanel extends JPanel{
        private JFXPanel jfxPanel;
        private HBox scenePane;
        private Button btn1;
        private Button btn2;
        private Button btn3;

        private BottomPanel(){
            setSize(applicationWidth_600, bottomPanelHeight_100);
            setLocation(0, upperPanelHeight_500);
            setLayout(null);



            Platform.runLater(new Runnable(){
                @Override
                public void run(){
                    /// putting all the buttons inside the scenePane                    
                    getScenePane().getChildren().addAll(getBtn1(),getBtn2(),getBtn3());                 
                    ///adding scenePane to the fxPanel 
                    getjfxPanel().setScene(new Scene(getScenePane()));                  
                }

            });

            add(getjfxPanel());
        }

        public void centeriseBottomPanelComponents() {
            getJframeHeight();
            getJframeWidth();
            System.out.println("Jframe's height is : " + getJframeHeight() + " & " + "Jframe's width is : " + getJframeWidth());
        }

    /**
     * Disposing the components of the bottom panel
     */
        private void disposeBottomPanel(){
            getScenePane().getChildren().removeAll();           
        }

        private JFXPanel getjfxPanel(){
            if(jfxPanel == null){
                jfxPanel = new JFXPanel();
                jfxPanel.setSize(applicationWidth_600,bottomPanelHeight_100);

            }
            return jfxPanel;
        }

        private HBox getScenePane(){
            if(scenePane == null){
                scenePane = new HBox();
                scenePane.setStyle("-fx-background-color:#666666");
                scenePane.setLayoutX(100);
                scenePane.setSpacing(50);
            }
            return scenePane;
        }

        /*
         * using getters will avoid :-
         * 1. null pointer exceptions
         * 2. standard coding format
         * 3. makex programming felxible
         */
        private Button getBtn1(){
            if(btn1 == null){
                btn1 = new Button("Button 1");
                btn1.setPrefSize(100, 50);
                btn1.setLayoutX(80);

                btn1.setOnAction(new EventHandler<ActionEvent>() {

                    @Override
                    public void handle(ActionEvent arg0) {
                        // TODO Auto-generated method stub
                        try{
                        disposeBottomPanel();
                        } catch(Exception e){
                            System.out.println("Error disposing the components :" + e.getMessage());
                        }
                        System.out.println("Btn1 event handler");
                    }
                });
            }
            return btn1;
        }
        private Button getBtn2(){
            if(btn2 == null){
                btn2 = new Button("Button 2");
                btn2.setPrefSize(100, 50);
                btn2.setLayoutX(80);
            }
            return btn2;
        }
        private Button getBtn3(){
            if(btn3 == null){
                btn3 = new Button("Button 3");
                btn3.setPrefSize(100, 50);
                btn3.setLayoutX(80);
            }
            return btn3;
        }
    }


}
斯坦尼斯拉夫

无需创建局部变量,而是BottomPanel bottomPanel = new BottomPanel();声明类字段BottomPanel bottomPanelInstance;并在初始化时仅创建一次。

在您的componentResized()方法中,只需访问该字段bottomPanelInstance并调用

bottomPanelInstance.centeriseBottomPanelComponents(); 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Java中使用JFrame的侦听器

来自分类Dev

在JFrame中使用Java计时器

来自分类Dev

如何在JFrame中使用KeyListener?

来自分类Dev

在JFrame中使用Java计时器

来自分类Dev

当我在JFrame中使用FlowLayout时,为什么我的图像没有出现?

来自分类Dev

Java:在 JFrame 中使用 add(ClassName) 时如何访问类变量

来自分类Dev

为什么这个while循环执行无限次?

来自分类Dev

动画时的JPanel与JFrame

来自分类Dev

JFrame-在一个JFrame中使用多个面板是一种好习惯吗?

来自分类Dev

当我使用列作为键合并数据帧时,它会无限次重复其他列

来自分类Dev

如何在自动生成的JFrame中使用TimerTask?

来自分类Dev

Java中使用JFrame的窗口的背景图像

来自分类Dev

使用2个jframe来摇摆Jframe

来自分类Dev

在Storm上使用BaseRichSpout将nextTuple()无限次调用

来自分类Dev

使用setTimeout和setTimeout对数组进行无限次迭代

来自分类Dev

避免使用Laravel多次/无限次触发Eloquent模型事件

来自分类Dev

Java同步工具解锁一次使用无限次

来自分类Dev

Jframe帮助使用Boxlayout

来自分类Dev

使用ActionListener刷新JFrame

来自分类Dev

Jframe帮助使用Boxlayout

来自分类Dev

使用JButton关闭JFrame

来自分类Dev

使用Jframe和canvas实施时,LWJGL Display崩溃

来自分类Dev

使用 while 循环和 Executor 时未出现 JFrame

来自分类Dev

刷新JFrame Java,而无需执行新的JFrame

来自分类Dev

从另一个 JFrame 执行 JFrame

来自分类Dev

在actionPerformed()方法中创建一个新的JFrame,然后如何使用此JFrame的JButton执行操作

来自分类Dev

单击JButton时关闭Jframe

来自分类Dev

退出Jframe窗口时出错

来自分类Dev

打开另一个 JFrame 时 JFrame 卡住

Related 相关文章

热门标签

归档