Java 从另一个类更改JFrame中可见的JPanel
我有一个名为Window的类,它扩展了JFrame并设置了基本布局。在这个JFrame中,我想添加不同的JPanel,一个名为Tracking的单独类决定在JFrame中显示哪个JPanel。我希望跟踪类能够更改JFrame中显示的JPanel 每个JPanel都是一个独立的类,JFrame和Tracking类也是独立的类 Window.javaJava 从另一个类更改JFrame中可见的JPanel,java,multithreading,swing,jframe,jpanel,Java,Multithreading,Swing,Jframe,Jpanel,我有一个名为Window的类,它扩展了JFrame并设置了基本布局。在这个JFrame中,我想添加不同的JPanel,一个名为Tracking的单独类决定在JFrame中显示哪个JPanel。我希望跟踪类能够更改JFrame中显示的JPanel 每个JPanel都是一个独立的类,JFrame和Tracking类也是独立的类 Window.java package Setup; import javax.swing.JFrame; public class Window extends JFr
package Setup;
import javax.swing.JFrame;
public class Window extends JFrame
{
private static final int width = 1280;
private static final int height = 720;
public Window()
{
setResizable(false);
setSize(width, height);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// frame.setUndecorated(true);
// frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
setVisible(true);
}
public static void main(String[] args)
{
new Window();
}
}
package Setup;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JPanel;
public class Animation extends JPanel
{
private final int width = super.getWidth();
private final int height = super.getHeight();
private Image dbImage;
private Graphics dbGraphics;
public Animation()
{
setSize(width, height);
setVisible(true);
}
@Override
public void paint(Graphics g)
{
dbImage = createImage(getWidth(), getHeight());
dbGraphics = dbImage.getGraphics();
paintComponent(dbGraphics);
g.drawImage(dbImage, 0, 0, this);
}
@Override
public void paintComponent(Graphics g)
{
//ADD Animation to get attention from users
g.drawString("TEST TEST TEST", 50, 50);
repaint();
}
}
Animation.java
package Setup;
import javax.swing.JFrame;
public class Window extends JFrame
{
private static final int width = 1280;
private static final int height = 720;
public Window()
{
setResizable(false);
setSize(width, height);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// frame.setUndecorated(true);
// frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
setVisible(true);
}
public static void main(String[] args)
{
new Window();
}
}
package Setup;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JPanel;
public class Animation extends JPanel
{
private final int width = super.getWidth();
private final int height = super.getHeight();
private Image dbImage;
private Graphics dbGraphics;
public Animation()
{
setSize(width, height);
setVisible(true);
}
@Override
public void paint(Graphics g)
{
dbImage = createImage(getWidth(), getHeight());
dbGraphics = dbImage.getGraphics();
paintComponent(dbGraphics);
g.drawImage(dbImage, 0, 0, this);
}
@Override
public void paintComponent(Graphics g)
{
//ADD Animation to get attention from users
g.drawString("TEST TEST TEST", 50, 50);
repaint();
}
}
你有多少同居者 你可以。。。 传递帧或控制器的引用。这将允许您访问框架上的所有组件 这是一个坏主意,因为它会不必要地将框架暴露给控制器,给控制器比实际需要更多的权力 你可以。。。 将面板列表传递给控制器。这将允许控制器根据需要更换面板 这是一个不错的主意,但是一个聪明的控制器将能够使用getParent方法来推断顶级容器,再次不必要地公开应用程序的部分内容 你可以。。。 创建一个简单的模型,该模型具有简单的访问器,使控制器能够向UI建议哪些视图应处于活动状态。例如,这些可以命名为实例,或者您可以简单地提供
next
/previous
/first
/last
方法,以允许控制器更改视图
这允许您以可插拔的方式更改视图顺序,只需提供一个新的模型,这不会影响应用程序的任何其他部分不要从Winn调用任何绘制方法重新绘制。您必须调用super.paintXxx,因为这些方法需要进行大量额外的工作和设置,以适当地准备图形上下文。建议您使用paintComponent来执行所有的绘制我是GUI和绘制新手,实际上我是从教程中获得的。我应该替换replant()吗;用超级油漆(g)?您应该删除一起重新绘制的调用。将paint中的所有代码移动到paintComponent(删除对paintComponent的调用),并确保调用super.paintComponent作为方法的第一条语句查看更多详细信息感谢程序员!我的问题在老师的帮助下解决了