如何让Eclipse WindowBuilder解析继承的JFrame?

时间:2017-02-08 22:59:45

标签: java eclipse swing windowbuilder

我有一个带有JFrame mainFrame的BaseWindow类,以及一些适用于mainFrame的方法。我的应用程序中的实际窗口是通过扩展BaseWindow来实现的。

扩展BaseWindow的类继承了mainFrame,并以某种方式阻止了窗口构建器"看到"它解析代码时。我在窗口构建器的设计选项卡中看到的只是一个空窗口,但是当我运行代码时,一切正常。

如何使这种方法适用于窗口构建器,或者"技巧"窗口生成器解析为mainFrame?这是一个扩展BaseWindow的示例类:

package GUIApp;

//took out the imports to save space

class SampleWindowOne extends BaseWindow{


    public JLabel txtSampleText;
    public JButton btnMagicButton;

    public SampleWindowOne() {
        initialize();
    }

    public void run(){
        mainFrame.setBounds(getCenteredBounds());
        mainFrame.setVisible(true);
    }

    private void initialize() {

        mainFrame = new JFrame();
        mainFrame.setBounds(100,100,700,525);
        mainFrame.setTitle("Sample Window One");
        mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        mainFrame.getContentPane().setLayout(null);

        txtSampleText = new JLabel();
        txtSampleText.setFont(new Font("Dialog", Font.PLAIN, 25));
        txtSampleText.setHorizontalAlignment(SwingConstants.CENTER);
        txtSampleText.setText("Sample Window");
        txtSampleText.setBounds(12, 50, 674, 51);
        mainFrame.getContentPane().add(txtSampleText);

        JTextArea txtrLoremIpsumDolor = new JTextArea();
        txtrLoremIpsumDolor.setEditable(false);
        txtrLoremIpsumDolor.setFont(new Font("Dialog", Font.PLAIN, 16));
        txtrLoremIpsumDolor.setForeground(Color.DARK_GRAY);
        txtrLoremIpsumDolor.setWrapStyleWord(true);
        txtrLoremIpsumDolor.setLineWrap(true);
        txtrLoremIpsumDolor.setText("Lorem ipsum dolor sit amet...");
        txtrLoremIpsumDolor.setBounds(57, 131, 609, 296);
        mainFrame.getContentPane().add(txtrLoremIpsumDolor);

        btnMagicButton = new JButton("End Program");
        btnMagicButton.setEnabled(false);
        btnMagicButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                requestTerminate();
            }
        });
        btnMagicButton.setBounds(257, 451, 175, 25);
        mainFrame.getContentPane().add(btnMagicButton);

    }
}

2 个答案:

答案 0 :(得分:1)

我相信你现在已经过去了,,但是对于其他人来说,搜索解决方案:

在日食中去:
窗口 - >偏好 - > Window Builder(树) - > Swing - >代码生成

  1. 从页面顶部的“新语句的方法名称”组合框中设置initGUI方法。 (您也可以尝试设置其他方法名称)
  2. 在“变量生成”部分,点击第三个标签上的一次:“初始化字段”,这样您就可以看到它的'方形填充了v符号(其他标签有一个空方框) 。
  3. 点击确定。

  4. 重启eclipse。

  5. 创建一个名为initGUI的方法,如下所示:

    private void initGUI() {
    
    }   
    
  6. 将构建函数中的全部代码复制到该方法。

  7. 从构造函数中调用该方法:

    public WindowTest()
    {
        initGUI();
    }  
    
  8. 点击编辑器底部的“设计”,转到窗口构建器设计。
  9. 如有必要,请点击大量重新分析。
  10. 现在在窗口中添加一个组件(例如JButton),并观察它进入iniGUI方法。 一旦您看到发生这种情况 - 从该方法中取出未通过GUI实现的代码行并将其置于构造函数中(如果需要)是安全的。

答案 1 :(得分:0)

好的,我发现了一种让窗口构建器工作的方法!我改变了构造函数:

public SampleWindowOne() {
    initialize();
}

为:

public SampleWindowOne() {
    JFrame mainFrame;
    initialize();
}

希望这可以帮助某人拥有自己的代码。

编辑:毕竟没有完全解决,见下文。如果我找到更好的解决方案,我会更新。

Edit2:好的,经过一夜安眠之后,解决方案非常明显。我现在在类的开头声明一个单独的JFrame。我将所有元素添加到此框架而不是mainFrame,并在初始化结束时添加

mainFrame = newFrame;