【问题标题】:Java GUI: How to add several classes to "Frame" class [duplicate]Java GUI:如何将几个类添加到“框架”类[重复]
【发布时间】:2014-07-31 14:44:21
【问题描述】:

我是 Java 编码的初学者,以前从未使用过 GUI。这就是我想要做的。我有主类“框架”和两个类:“圆形”和“方形”。如何将 Circle 和 Square 添加到 Frame 以使它们出现在框架上?

很抱歉这个简单的问题,但我需要你的帮助。 提前致谢!

public class Frame extends JFrame{

    public static void main(String[] args) {
        Frame f = new Frame();
        Circle circle  = new Circle();
        Square square  = new Square();
        f.add(circle);
        f.add(square);
    }

    public Frame(){
        setTitle("Frame");
        setSize(500, 500);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
}



public class Circle extends JFrame{

    public Circle(){
    }

    public void paint(Graphics g){
        g.setColor(Color.GREEN);
        g.drawOval(300, 300, 200, 200);
    }
}


public class Square extends JFrame{

    public Square(){
    }

    public void paint(Graphics g){
        g.setColor(Color.GREEN);
        g.drawRect(300, 300, 500, 500);
   }
}

【问题讨论】:

  • 您不能将Top Level Container 添加到另一个Top Level Container,以我的拙见。要么制作圆形和方形JPanels,然后尝试在JFrame上添加它们。

标签: java swing user-interface


【解决方案1】:

首先,您不能将 JFrame 添加到 JFrame,因为您会将窗口添加到窗口。你可以做的是让圆形和方形扩展JPanel。这样您就可以毫无问题地将它们添加到您的 JFrame 中,并且它们会做他们必须做的事情。我的 JDK 还告诉我 Circle 和 Square 应该有自己的文件。并且还取决于您在 JFrame 中添加方形和圆形的顺序,您只会看到其中一个,因为第二个是在第一个上绘制的。好的,在此之后您的代码将转换为:

文件 1 帧:

public class Frame extends JFrame{

public static void main(String[] args) {
    Frame f = new Frame();
    Circle circle  = new Circle();
    Square square  = new Square();
    f.add(circle);
    f.add(square);
}

public Frame(){
    setTitle("Frame");
    setSize(500, 500);
    setVisible(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
}

}

文件2圈:

public class Circle extends JPanel{

public Circle(){
}

public void paint(Graphics g){
    g.setColor(Color.GREEN);
    g.drawOval(300, 300, 200, 200);
}

}

文件 3 方块:

public class Square extends JPanel{

public Square(){
}

public void paint(Graphics g){
    g.setColor(Color.GREEN);
    g.drawRect(300, 300, 500, 500);

} }



希望这对您有所帮助,并且您了解为什么会这样。如果您不放心要求更多说明。

附言欢迎来到 Java GUI 编程;)

【讨论】:

  • 嘿!非常感谢!我刚刚尝试了您的代码,到目前为止它仍然有效。但是还有一种方法可以让两个 JPanel 都可见吗?没有后者与设置的第一个 JPanel 重叠?
  • @user3561975:使用LayoutManager 满足您的特定需求。 GridLayout 可能适用于这种情况。
  • 是的,确实有。指定一个布局管理器来布局组件。例如添加这个: f.setLayout(new GridLayout(1, 2, 0, 0));就在框架的标记下(主要方法中的第二行),也许会让你的圆形和方形更小一点。现在你应该看到两个网络彼此。这是因为没有布局管理器,只有最后添加的组件是可见的。此外,如果此答案回答了您的问题,请不要忘记通过检查答案中的绿色复选标记来接受此答案。如果您还有任何问题,请直接问他们,我会尽力回答。
  • 再次感谢!刚刚试了一下,如果圆形和方形相邻显示,它几乎可以工作。这两个元素都是可见的,但是一旦正方形进入圆圈的“领土”,圆圈的一部分就会消失......
  • 你说的确实有可能。但是让一个班级同时画一个圆形和一个正方形要容易得多。否则,您必须使用 OverlayLayout 或 JLayeredPane 将面板(工作表)放在彼此的顶部,然后为上面的面板提供透明背景(如果您真的愿意,我愿意对此进行说明)。
猜你喜欢
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
  • 2013-03-31
  • 1970-01-01
  • 2015-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多