从另一个类更改JFrame中的可见JPanel

时间:2013-04-28 20:29:45

标签: java multithreading swing jframe jpanel

我有一个名为Window的类,它扩展了JFrame并设置了基本布局。对于那个JFrame,我想添加不同的JPanel和一个名为Tracking的单独类,决定在JFrame中显示哪个JPanel。我希望Tracking类能够更改JFrame中显示的JPanel。

每个JPanel都是一个单独的类,JFrame和Tracking类也是单独的类。

Window.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();
    }
}

Animation.java

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();
    }
}

1 个答案:

答案 0 :(得分:1)

你有任意数量的cohoes

你可以......

传递帧或控制器的引用。这样就可以访问框架上的所有组件。

这是一个坏主意,因为它会不必要地将控制框暴露给控制器,给控制器提供更多的功率然后实际需要......

你可以......

将面板列表传递给控制器​​。这个wold允许控制器根据需要更换面板。

这个想法不是太糟糕,但是一个聪明的控制器能够使用getParent方法来推断顶级容器,再次,不必要地暴露部分应用程序

你可以......

创建一个简单的模型,该模型具有简单的访问器,允许控制器向UI建议应该激活哪些视图。例如,这些可以命名,或者您可以简单地提供next / previous / first / last方法以允许控制器更改视图。

这允许您以可插入的方式更改视图排序,只需提供一个不会影响应用程序任何其他部分的新模型