2013-02-27 54 views
4

我是新来的Java(和一般编程),我试图做我的第一个程序。我被困在同样的问题现在约5个小时,所以我决定寻求帮助。如何将JPanel放在另一个JPanel上?

基本上我试图做一个程序(2D游戏),有20个职位在董事会。每个位置都是蓝色(由player1拥有),红色(由player2拥有)或黑色(不属于任何人)。

我正在讨论的方式主要是我已经提出了一种方法,称为安装游戏,然后是一种玩游戏的方法。我正在开发安装游戏,基本上它所做的只是创建类Background(扩展JPanel,并覆盖paintComponent())和类Position(扩展JPanel,并覆盖paintComponent())的20个对象。

到目前为止,我坚持把这些位置对象放在背景对象之上。

当我这样做:

Background background= new Background(); 
frame.getContentPane().add(background); 
Position position1= new Position; 
frame.getContentPane().add(position1); 
frame.setVisible(true); 

它只显示了一圈,没有背景,我希望,如果我先添加位置,然后背景,我只有背景和不圆。

无论如何,我是新来的java,我仍然遇到了麻烦,但我尝试搜索解决方案,并且发现了许多不同的解决方案(例如添加位置首先是背景,然后将背景添加到框架等),但我无法让它们中的任何一个工作。

我知道,我将它们都添加到框架的方式(很可能)是完全错误的,但是我这样写,所以你会(希望)确信我写的内容确实会向你显示我的每个类的代码在屏幕上绘制一些东西。

PS:我没有在这里复制我的代码,因为大多数的变量和方法都不在英语,所以它是相当难以阅读,但是如果你仍然认为它的需要,我会添加它。另外,我很抱歉我可能愚蠢的问题,但我有点在这里打墙,我不知道还有什么要尝试。

回答

2

基本上我试图做一个程序(2D游戏),有约20 职位的董事会。每个职位都是蓝色(拥有 玩家1),红色(玩家2拥有)或黑色(不属于任何人)。

  1. Painting in Swing默认情况下不会返回PreferredSize,需要to override getPreferedSize()

  2. JPanel已经实施了API FlowLayout,这LayoutManager accepting only PreferredSizeJComponents来加入到这个容器

  3. 后上午变动后SSCCE,短,可运行,可编译

+0

这很好,谢谢,它并没有真正完全解决我的问题,因为它显示的是错误位置的圆圈,它只显示圆圈的1/4而不是满圈,但至少它显示的是一些东西。从这里开始,如果我无法再发布SSCCE,我会尝试弄清楚自己有什么问题。 再次感谢。 :D – 2013-02-27 20:45:51

+0

重要要求,欢迎您 – mKorbel 2013-02-28 06:20:22

0

根面板应该是下面有Container类的JFrame。当您调用someRoot.window.container = yourJPanel时,它将加载JPanel作为JFrame的主要组件视图。请注意,JFrame只能容纳一个JPanel,但其他JPanel可以容纳其他JPanel。就像您将初始JPanel添加到JFRam一样,JPanel自己的容器可以是另一个JPanel。希望这可以帮助。

像这样:

JPanel temp = new JPAnel(); 
frame.getContentPane().add(temp); 
temp.getContentPane().add(new JPanel()); 

这些增加之后,是illuding我命令,但你打电话的JFrame得到它能够实时刷新。我认为这是一样的东西:

frame.validate(); //thanks @SMT 

什么的,

0

尝试使用类似

jPanelExampleName.validate(); 
jPanelExampleName.repaint(); 

加入您的JPanels后。

1
Background background= new Background(); 
frame.getContentPane().add(background); 
Position position1= new Position; 
frame.getContentPane().add(position1); 

一个JFrame默认使用一个BorderLayout的。同样默认情况下,当您将组件添加到使用BorderLayout的容器时,该组件将添加到CENTER中。只有一个组件可以添加到CENTER中,以便您的位置组件替换背景组件。

您想将位置添加到背景,然后将背景添加到框架。例如:

Background background= new Background(); 
Position position1= new Position; 
background.add(position1); 
frame.add(background); 

注意:在将组件添加到框架时,不需要使用getContentPane()。

0

这听起来像你想使用一个JFrame并将JPanels附加到它。这是我亲自做的。

声明你的JFrame和JPanels

JFrame frame1 = new JFrame("App Name"); 
JPanel panel1 = new JPanel(); 
JPanel panel2 = new JPanel(); 
JPanel panel3 = new JPanel(); 
JPanel panel4 = new JPanel(); 

设置背景(我使用的颜色,但你的想法)

panel1.setBackground(Color.orange); 
panel2.setBackground(Color.orange); 
panel3.setBackground(Color.orange); 
panel4.setBackground(Color.orange); 

设置你对JFrame布局(我用的BoxLayout不知道哪一个最适合你)你可以找到最适合你的一个和一些示例代码here.也只是设置默认的关闭操作。

frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
frame1.setLayout(new BoxLayout(frame1.getContentPane(), BoxLayout.Y_AXIS)); 

然后,只需附上您的JPanels

frame1.add(panel1); 
frame1.add(panel2); 
frame1.add(panel3); 
frame1.add(panel4); 
frame1.pack(); 
frame1.setVisible(true); 

这将允许您使用您创建的JPanels,然后通过其他方法改变颜色。

相关问题