gpt4 book ai didi

java - 如何设置一个Frame来在swing中显示一个新的Panel?

转载 作者:行者123 更新时间:2023-11-29 03:39:24 26 4
gpt4 key购买 nike

我显然在这里遗漏了一些东西。

如何更改 Swing 框架以显示全新的面板?

无论是:1.显示一个全新的面板,里面有新的内容 或者2.显示与我新添加的清除相同的面板

我已经在替代程序中显示了我的新面板,它可以正确创建和显示。

但是,当带有我的按钮的面板以前位于框架中时,它永远不会显示我的新面板。

我调用 contentPane.revalidate();在我的代码中多次更新我的按钮,这些按钮可以完美地更新它们只有当我尝试删除旧按钮并添加新按钮时才会出现问题。

在将我的新面板添加到 contentPane 之后,我尝试了:

contentPane.validate();
contentPane.revalidate();
contentPane.removeAll();
contentPane.repaint();
setContentPane(contentPane);

但它永远不会改变。

 @Override
public void actionPerformed(ActionEvent e)
{
String buttonPressed = e.getActionCommand();
int pos = Integer.valueOf(buttonPressed);

if (Control.model.cardsRemaining == 0)
{
contentPane.removeAll();
//contentPane.validate();
//contentPane = new JPanel();
//contentPane.add(createSuccess());
contentPane = createSuccess();
contentPane.revalidate();
contentPane.repaint();

System.out.println("entered success");
}

else
{
System.out.println("Cards left: " + Control.model.cardsRemaining);
action = Control.model.ReceiveCardsTurned(pos);

keypadArray[pos].setIcon(myIcons[pos]);
currentTime.setText("" + Control.model.time);
currentScore.setText("" + Control.model.score);

System.out.println("this card: " + pos + "last card: "
+ Control.model.lastCard);

if (action == "unturn")
{
try
{
Thread.sleep(1000);
}

catch (InterruptedException e1)
{
e1.printStackTrace();
}

contentPane.revalidate();
keypadArray[pos].setIcon(back);
keypadArray[Control.model.lastCard].setIcon(back);
}

//System.out.println(action);
}
}



private JPanel createSuccess()
{
//final
JPanel Success = new JPanel();
JLabel image = new JLabel(success);
Success.add(image);

return Success;
}

此外,这在我的代码中更进一步:

ImageIcon success = new ImageIcon("icons/success.png");

和:

JPanel contentPane = new JPanel();

刚试过:

contentPane = createSuccess(); 
frame.setContentPane(contentPane);
frame.pack();

第 268 行是:frame.setContentPane(contentPane);

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at pairs.GUI.actionPerformed(GUI.java:268)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

谢谢我的 friend ,他工作得很好:

contentPane.removeAll();
contentPane.add(createSuccess());
setContentPane(contentPane);

最佳答案

您的代码为变量 contentPane 分配了一个新引用,这不会更改屏幕上已有的内容,它只是移动 contentPane 引用的内容(大概是屏幕上的内容) ) 到其他东西,将屏幕上的内容保留在原处。

尝试将新面板添加到 contentPane

contentPane.removeAll();
contentPane.add(createSuccess());

如果你想切换 View ,CardLayout是更好的选择。

如果您只想“重置” View ,则必须实际编写代码将 View 的内容返回到“默认”状态。在这种情况下,您实际上最好创建一个包含 View 所需字段并提供管理方法的自定义组件。

关于java - 如何设置一个Frame来在swing中显示一个新的Panel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13868908/

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