我有一个带有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);
}
}
答案 0 :(得分:1)
我相信你现在已经过去了,,但是对于其他人来说,搜索解决方案:
在日食中去:
窗口 - >偏好 - > Window Builder(树) - > Swing - >代码生成
点击确定。
重启eclipse。
创建一个名为initGUI的方法,如下所示:
private void initGUI() {
}
将构建函数中的全部代码复制到该方法。
从构造函数中调用该方法:
public WindowTest()
{
initGUI();
}
答案 1 :(得分:0)
好的,我发现了一种让窗口构建器工作的方法!我改变了构造函数:
public SampleWindowOne() {
initialize();
}
为:
public SampleWindowOne() {
JFrame mainFrame;
initialize();
}
希望这可以帮助某人拥有自己的代码。
编辑:毕竟没有完全解决,见下文。如果我找到更好的解决方案,我会更新。
Edit2:好的,经过一夜安眠之后,解决方案非常明显。我现在在类的开头声明一个单独的JFrame。我将所有元素添加到此框架而不是mainFrame,并在初始化结束时添加
mainFrame = newFrame;