gpt4 book ai didi

java - Java 中使用继承的基本窗口和扩展窗口

转载 作者:太空宇宙 更新时间:2023-11-04 08:34:14 24 4
gpt4 key购买 nike


我有一个名为 WindowTemplate 的类,它是其他(更复杂)窗口的基础。它是一个抽象类,然后我尝试使用“扩展”技巧向新窗口添加更多内容,保留原始的“骨架”。但这是我的问题,因为如果我运行 WindowTemplate.createWindow();a_Welcome.createWindow(); (它们应该指向同一件事),我会得到我的“基本”窗口。但是当我运行 a_Welcome window = new a_Welcome(); (应该是基础+新的东西)时,我只得到了我添加的额外位,而没有原始功能。
这是我的代码:

package windows;

import java.awt.*;
import javax.swing.*;

public abstract class WindowTemplate extends JFrame {

/**
* Create the GUI and show it. For thread safety, this method should be
* invoked from the event-dispatching thread.
*/
public static void createWindow() {

JFrame myFrame = new JFrame("My first window");
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.setVisible(true);
myFrame.setSize(550, 450);
myFrame.setLocationRelativeTo(null);

// JLabel emptyLabel = new JLabel("");
// emptyLabel.setPreferredSize(new Dimension(550, 450));

// myFrame.getContentPane().setLayout(new CardLayout());
// myFrame.getContentPane().add(emptyLabel, BorderLayout.CENTER);

// myFrame.pack();

}

}

带有新窗口和一些额外内容的类(忽略a_):

package windows;

import java.awt.*;

import javax.swing.*;

public class a_Welcome extends WindowTemplate {

public a_Welcome() {

JPanel area = new JPanel();

JLabel text = new JLabel("One line another line and another line"); // , JLabel.CENTER);

// text.setBounds(80, 400, 400, 50);
add(area);

// area.setLayout(null);
area.add(text, new CardLayout());

// area.add(text); // , BorderLayout.CENTER);

Font font = new Font("SansSerif", Font.BOLD, 30);
text.setFont(font);
text.setForeground(Color.green);
area.setBackground(Color.darkGray);
area.setSize(550, 450);

}

}

// timer-after 5 seconds-go to the next window (countdown in the bottom right corner)

和主要内容:

package windows;

public class Launcher {

public static void main(String[] args) {

// Schedule a job for the event-dispatching thread:
// creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {

// WindowTemplate.createWindow();
// a_Welcome.createWindow();

a_Welcome window = new a_Welcome();
window.setVisible(true);
}
});

}

}


感谢您的帮助!

最佳答案

静态方法 createWindow() 始终创建一个新的 JFrame,它不是 WindowTemplate 的父类(super class)。 a_Window 的构造函数正在向 WindowTemplate 添加组件,由于静态 createWindow() 创建独立框架,该组件尚未初始化。

我建议您将静态 createWindow() 更改为 WindowTemplate 构造函数,并尝试再次运行 main

package windows;

import java.awt.*;
import javax.swing.*;

public abstract class WindowTemplate extends JFrame {

/**
* Create the GUI and show it. For thread safety, this method should be
* invoked from the event-dispatching thread.
*/
public WindowTemplate () {

JFrame myFrame = new JFrame("My first window");
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.setVisible(true);
myFrame.setSize(550, 450);
myFrame.setLocationRelativeTo(null);

// JLabel emptyLabel = new JLabel("");
// emptyLabel.setPreferredSize(new Dimension(550, 450));

// myFrame.getContentPane().setLayout(new CardLayout());
// myFrame.getContentPane().add(emptyLabel, BorderLayout.CENTER);

// myFrame.pack();

}

}

关于java - Java 中使用继承的基本窗口和扩展窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6764651/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com