Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AWT多屏幕不';我没有出现_Java_User Interface_Awt_Containers - Fatal编程技术网

Java AWT多屏幕不';我没有出现

Java AWT多屏幕不';我没有出现,java,user-interface,awt,containers,Java,User Interface,Awt,Containers,我正在为我的开发团队开发一个任务规划AWT小程序,我遇到了一个问题 我使用的是一个screen系统,其中主类有一个“CurrentScreen”变量,用于绘制其他屏幕。当小程序启动时,它会加载带有“聊天室”按钮的“主屏幕”。当你点击按钮时,它会打开聊天室屏幕 我的问题是,它在主屏幕上显示得很好,但当你点击按钮时,一切都变为空白,聊天室根本不显示。我做错了什么 每个屏幕都是screen类的一个子类,screen类是容器的一个子类 主要类别: public class TPApplet extend

我正在为我的开发团队开发一个任务规划AWT小程序,我遇到了一个问题

我使用的是一个screen系统,其中主类有一个“CurrentScreen”变量,用于绘制其他屏幕。当小程序启动时,它会加载带有“聊天室”按钮的“主屏幕”。当你点击按钮时,它会打开聊天室屏幕

我的问题是,它在主屏幕上显示得很好,但当你点击按钮时,一切都变为空白,聊天室根本不显示。我做错了什么

每个屏幕都是screen类的一个子类,screen类是容器的一个子类

主要类别:

public class TPApplet extends Applet
{
private static final long serialVersionUID = 7611084043153150559L;
private static final int WIDTH = 400;
private static final int HEIGHT = 350;
private static final String TITLE = "TaskPlanner v";
private static final double VERSION = 0.01;

private boolean setup = false;

public Screen currentScreen;

public void init()
{
    setLayout(null);

    setScreen(new MainScreen(this));
}

public void stop()
{
}

public void setScreen(Screen s)
{
    if (currentScreen != null)
    {
        currentScreen.destroy();
        remove(currentScreen);
    }

    currentScreen = s;

    if (currentScreen != null)
    {
        currentScreen.init();
        add(currentScreen);
    }
}

public void paint(Graphics g)
{
    if (!setup)
    {
        setSize(WIDTH, HEIGHT);
        setName(TITLE + VERSION);

        currentScreen.setLocation(0, 0);
        currentScreen.setSize(WIDTH, HEIGHT);

        setup = true;
    }

    if (currentScreen != null)
    {
        currentScreen.paint(g);
    }
}
}
主菜单类:

public class MainScreen extends Screen
{
private static final long serialVersionUID = -993648854350389881L;

private TPApplet applet;

private Button todoButton;
private Button chatButton;

private boolean setup = false;

public MainScreen(TPApplet tpApplet)
{
    applet = tpApplet;
}

@Override
public void init()
{
    setLayout(null);

    todoButton = createButton("To-Do List");
    chatButton = createButton("Chatroom");
}

@Override
public void destroy()
{
    removeAll();
}

@Override
public void paint(Graphics g)
{
    if (!setup)
    {
        todoButton.setLocation(25, 50);
        todoButton.setSize(100, 40);

        chatButton.setLocation(135, 50);
        chatButton.setSize(100, 40);

        setup = true;
    }
}

@Override
public void actionPerformed(ActionEvent e)
{
    if (e.getSource() instanceof Button)
    {
        Button button = (Button) e.getSource();

        if (button.getLabel() == chatButton.getLabel())
        {
            applet.setScreen(new ChatScreen(applet));
        }
    }
}
}
聊天室课程:

public class ChatScreen extends Screen
{
private static final long serialVersionUID = -8774060448361093669L;

private TPApplet applet;

private ScrollPane chatWindow;
private TextField textField;
private Button sendButton;

private boolean setup = false;

public ChatScreen(TPApplet tpApplet)
{
    applet = tpApplet;
}

@Override
public void init()
{
    setLayout(null);

    sendButton = createButton("Send");

    chatWindow = new ScrollPane();
    textField = new TextField();

    add(chatWindow);
    add(textField);
}

@Override
public void destroy()
{
    removeAll();
}

@Override
public void paint(Graphics g)
{
    if (!setup)
    {
        chatWindow.setLocation(20, 20);
        chatWindow.setSize(100, 100);

        textField.setLocation(150, 150);
        textField.setSize(60, 20);

        sendButton.setLocation(220, 150);
        sendButton.setSize(40, 20);

        setup = true;
    }
}

@Override
public void actionPerformed(ActionEvent e)
{
    if (e.getSource() instanceof Button)
    {
        Button button = (Button) e.getSource();

        if (button.getLabel() == sendButton.getLabel())
        {
            String text = textField.getText();
        }
    }
}
}

提前感谢您的帮助

您需要在设置屏幕方法中使小程序失效()。 新的屏幕组件需要重新布局以计算其子屏幕的大小

遗憾的是,在
add
ing时没有自动执行此操作


也可以,如果可能的话,请考虑使用<代码> LayOutMaung。

CardLayout
是否适合您?

您需要在设置屏幕方法中使小程序失效()。 新的屏幕组件需要重新布局以计算其子屏幕的大小

遗憾的是,在
add
ing时没有自动执行此操作


也可以,如果可能的话,请考虑使用<代码> LayOutMaung。

CardLayout
是否适合您?

我怀疑,如果您选择放弃使用布局管理器,当您添加一个新屏幕时,屏幕将添加一个
0x0
大小

public void setScreen(Screen s)
{

    //...//

    if (currentScreen != null)
    {
        currentScreen.init();
        // Look ma, I have no size...
        add(currentScreen);
    }
}
布局管理员的工作之一是决定新组件的布局方式

尝试将小程序的布局管理器设置为类似于
BorderLayout

下一个问题是,子屏幕也存在同样的问题,因此,即使屏幕的大小(根据布局管理器的需要)相同,屏幕本身也没有布局管理器,因此添加到其中的组件没有大小,并且屏幕似乎没有更新

我还建议您看看Andrew的
CardLayout


您还可以签出并获取更多详细信息…

我怀疑,如果您选择放弃使用布局管理器,当您添加新屏幕时,屏幕将添加一个
0x0
大小

public void setScreen(Screen s)
{

    //...//

    if (currentScreen != null)
    {
        currentScreen.init();
        // Look ma, I have no size...
        add(currentScreen);
    }
}
布局管理员的工作之一是决定新组件的布局方式

尝试将小程序的布局管理器设置为类似于
BorderLayout

下一个问题是,子屏幕也存在同样的问题,因此,即使屏幕的大小(根据布局管理器的需要)相同,屏幕本身也没有布局管理器,因此添加到其中的组件没有大小,并且屏幕似乎没有更新

我还建议您看看Andrew的
CardLayout


您也可以签出并获取更多详细信息…

对于一个空间中的多个组件,请使用一个,如图所示。我在上面调用的invalidate()是什么?小程序,还是当前屏幕?在方法中,我在哪里使它无效?请更清楚一点:)invalidate可能不起作用,因为您认为可以放弃使用布局管理器。我没有放弃它,我只是还没有看它。我刚刚开始学习AWT。我将研究如何使用布局管理器,看看这是否能起作用。@MichaelAuderer
setLayout(null)
是我中断的丢弃;)对于一个空间中的多个组件,请使用一个,如图所示。我调用的invalidate()是什么?小程序,还是当前屏幕?在方法中,我在哪里使它无效?请更清楚一点:)invalidate可能不起作用,因为您认为可以放弃使用布局管理器。我没有放弃它,我只是还没有看它。我刚刚开始学习AWT。我将研究如何使用布局管理器,看看这是否能起作用。@MichaelAuderer
setLayout(null)
是我中断的丢弃;)使用setSize()修复了它!谢谢。不过,我要用一个布局来解决这个问题。“使用setSize()解决了它!”-对不起,我要用setSize()解决它!谢谢。不过,我要用一个布局来解决这个问题。“使用setSize()解决了它!”-对不起,我去玩游戏的时候1)为什么要编写小程序?如果是老师指定的,请参考。2) 要部署Java桌面应用程序,最好的选择通常是安装应用程序。使用。JWS可以在Windows、OSX和*nix上工作。@AndrewThompson我以前查看过它,并完全意识到了这一点。我不再把它变成小程序了,我用swing代替awt将它变成了带有webstart的桌面应用程序。好主意。:)当你有新代码时给我们看看(除非问题已经解决)。@AndrewThompson问题解决了,我只需要设置它的大小!但是我现在有一个新问题。。此处列出:1)为什么要编写小程序?如果是老师指定的,请参考。2) 要部署Java桌面应用程序,最好的选择通常是安装应用程序。使用。JWS可以在Windows、OSX和*nix上工作。@AndrewThompson我以前查看过它,并完全意识到了这一点。我不再把它变成小程序了,我用swing代替awt将它变成了带有webstart的桌面应用程序。好主意。:)当你有新代码时给我们看看(除非问题已经解决)。@AndrewThompson问题解决了,我只需要设置它的大小!但是我现在有一个新问题。。此处列出: