Java AWT多屏幕不';我没有出现
我正在为我的开发团队开发一个任务规划AWT小程序,我遇到了一个问题 我使用的是一个screen系统,其中主类有一个“CurrentScreen”变量,用于绘制其他屏幕。当小程序启动时,它会加载带有“聊天室”按钮的“主屏幕”。当你点击按钮时,它会打开聊天室屏幕 我的问题是,它在主屏幕上显示得很好,但当你点击按钮时,一切都变为空白,聊天室根本不显示。我做错了什么 每个屏幕都是screen类的一个子类,screen类是容器的一个子类 主要类别:Java AWT多屏幕不';我没有出现,java,user-interface,awt,containers,Java,User Interface,Awt,Containers,我正在为我的开发团队开发一个任务规划AWT小程序,我遇到了一个问题 我使用的是一个screen系统,其中主类有一个“CurrentScreen”变量,用于绘制其他屏幕。当小程序启动时,它会加载带有“聊天室”按钮的“主屏幕”。当你点击按钮时,它会打开聊天室屏幕 我的问题是,它在主屏幕上显示得很好,但当你点击按钮时,一切都变为空白,聊天室根本不显示。我做错了什么 每个屏幕都是screen类的一个子类,screen类是容器的一个子类 主要类别: public class TPApplet extend
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。我将研究如何使用布局管理器,看看这是否能起作用。@MichaelAuderersetLayout(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问题解决了,我只需要设置它的大小!但是我现在有一个新问题。。此处列出: