在java中链接两个帧

时间:2012-03-28 22:06:42

标签: java swing

我正在创建一个由两个框架组成的Java应用程序(JFrame1和JFrame2) JFrame1有一个网格6x6按钮;和JFrame2有6个代表颜色的单选按钮。如何链接这两个框架,以便在单击JFrame1中的按钮时弹出JFrame2,当从中选择颜色时,JFrame2会关闭,并且单击的按钮会获得相应的颜色?

3 个答案:

答案 0 :(得分:2)

最好为每个应用程序安装一个JFrame。使用一个用于6x6 JButton并为您的颜色JRadioButtons创建一个模态JDialog。

  1. 颜色选择JDialog应该有一个公共的getSelectedColor()方法,以便将所选颜色返回给调用者类。
  2. 在main中实例化ColorDialog,不要将其设置为可见。
  3. 每个JButton的ActionListener应该使模态JDialog可见。
  4. RadioButton ActionPerformed应设置所选颜色并使JDialog不可见。
  5. 调用getSelectedColor()并将返回的颜色应用于JButton。

答案 1 :(得分:0)

在你的frame1的按钮动作列表器中,你可以做这样的事情

public void actionPerformed(ActionEvent e) {
   Frame2 frame = new Frame2(this);
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   frame.setVisible(true);
}

其中“this”指的是frame1对象。这是你可以从第二帧访问它的jTEXTFIELD和jBUTTON。所以很自然地,你将它存储在第二个类中声明的Frame1对象中。

假设你在frame2对象中有一个可点击的颜色字段,一旦你点击它,你应该触发一个从frame1获取输入字段的函数(使用你的语言环境对象引用)并将其存储在其中。像这样的东西:

public void actionPerformed(ActionEvent e) {
    frame1.getMyTextField().setText(WHAT_THE_CLICKED_ON);
    this.close();
}

很抱歉,如果我犯了任何语法错误,很长一段时间我都没有使用java:)

答案 2 :(得分:0)

只需创建另一个类,让我们说FrameMananger,然后使用单例模式来管理它们。

然后在任何类中,您可以使用FrameManager.getFrame1()来获取frame1,与frame2相同。您可以在内部添加逻辑判断,例如动态处理某些帧或仅在需要时创建它们。

当您创建游戏并尝试在每个视图之间导航(如来自各处的节目分数面板)时,此问题是相当常见的概念。

public class FrameManager
{
    Frame1 frame1;
    Frame1 frame2;

    public static Frame1 getFrame1()
    {
        if(frame1 == null)
            frame1 = new Frame1();
        return frame1;
    }

    public static Frame1 getFrame2()
    {
        if(frame2 == null)
            frame2 = new Frame1();
        return frame2;
    }

    public class Frame1 extends JFrame
    {

    }

    public class Frame2 extends JFrame
    {

    }
}