Java-带GUI的停车场系统

Java-带GUI的停车场系统,java,swing,user-interface,Java,Swing,User Interface,我在这里寻找一点帮助 我的任务是创建一个带有GUI界面而不是控制台界面的停车场管理系统。该系统共有15个空间,其中5个空间较大,只能容纳“大型”车辆,其他10个空间为常规大小的空间。它们的大小由停车场的停车服务人员决定 进入停车场后,服务员需要填写有关车辆的信息(车辆注册号,并单击“是”或“否”单选按钮,确定车辆是否为“高价值”车辆,或者如果车辆为“大型车辆”) 我目前正在尝试构建一个界面,当程序运行时,该界面首先显示停车场(当空间可用时,停车场将从红色变为绿色,反之亦然),我使用Graphic

我在这里寻找一点帮助

我的任务是创建一个带有GUI界面而不是控制台界面的停车场管理系统。该系统共有15个空间,其中5个空间较大,只能容纳“大型”车辆,其他10个空间为常规大小的空间。它们的大小由停车场的停车服务人员决定

进入停车场后,服务员需要填写有关车辆的信息(车辆注册号,并单击“是”或“否”单选按钮,确定车辆是否为“高价值”车辆,或者如果车辆为“大型车辆”)

我目前正在尝试构建一个界面,当程序运行时,该界面首先显示停车场(当空间可用时,停车场将从红色变为绿色,反之亦然),我使用Graphics2D绘制了该界面。(在这一点上,我不知道如何使它出现在JFrame或我需要使用的任何东西中)在绘制的具有变化颜色的停车场下,我将包括3个按钮-一个按钮“添加一辆车”,“卸下一辆车”和“搜索一辆车”。我不确定如何制作“停车场”组件以及运行时将出现的上述窗口按钮

因此,当我单击这些按钮时,将出现一个新窗口,显示与每个按钮相关的表单(添加、删除和搜索)

我必须做些什么才能让停车场和按钮出现在同一个窗口中

这是我迄今为止创建的代码——尽管它非常不整洁,而且在几乎一个类中,我知道发生了什么,并计划在一切正常后将其拆分。(我知道这样写代码效率不高):

这是我的主菜单课和我画的停车场:

package carparksystem;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JButton;

public class CarPark extends javax.swing.JPanel
{
private void draw(Graphics g)
{
    Graphics2D g2 = (Graphics2D) g;

    //Draw carpark boundary
    g2.drawLine(20, 20, 400, 20);
    g2.drawLine(20, 450, 20, 20);
    g2.drawLine(20, 450, 400, 450);
    g2.drawLine(400, 20, 400, 140);
    g2.drawLine(400, 330, 400, 450);

    g2.drawString("ENTER", 370, 180);           //labels
    g2.drawString("EXIT", 375, 300);

    g2.setColor(Color.WHITE);                   //attendants box
    g2.fill3DRect(330, 200, 70, 70, true);   

    g2.setColor(Color.BLACK);                   
    g2.drawString("Attendant", 338, 230);
    g2.drawString("Station", 345, 245);
    g2.drawRect(330, 200, 70, 70);

    g2.setColor(Color.GREEN);
    g2.fillRect(40, 40, 50, 100);       //8         first row spaces
    g2.fillRect(110, 40, 50, 100);      //7
    g2.fillRect(180, 40, 50, 100);      //6
    g2.fillRect(250, 60, 40, 80);       //2
    g2.fillRect(310, 60, 40, 80);       //1

    g2.setColor(Color.BLACK);           //drawRect palces a black border around shape
    g2.drawRect(40, 40, 50, 100);   
    g2.drawRect(110, 40, 50, 100);  
    g2.drawRect(180, 40, 50, 100);    
    g2.drawRect(250, 60, 40, 80);   
    g2.drawRect(310, 60, 40, 80);

    g2.setColor(Color.GREEN);                       //second row spaces
    g2.fillRect(90, 195, 40, 80);       //13
    g2.fillRect(150, 195, 40, 80);      //12
    g2.fillRect(210, 195, 40, 80);      //11
    g2.fillRect(270, 195, 40, 80);      //3

    g2.setColor(Color.BLACK);
    g2.drawRect(90, 195, 40, 80);  
    g2.drawRect(150, 195, 40, 80);
    g2.drawRect(210, 195, 40, 80);
    g2.drawRect(270, 195, 40, 80);

    g2.setColor(Color.GREEN);                       //3rd row spaces
    g2.fillRect(30, 330, 40, 80);       //15
    g2.fillRect(90, 330, 40, 80);      //14
    g2.fillRect(150, 330, 50, 100);     //10
    g2.fillRect(220, 330, 50, 100);     //9
    g2.fillRect(290, 330, 40, 80);      //5
    g2.fillRect(350, 330, 40, 80);      //4

    g2.setColor(Color.BLACK);
    g2.drawRect(30, 330, 40, 80);
    g2.drawRect(90, 330, 40, 80);
    g2.drawRect(150, 330, 50, 100);
    g2.drawRect(220, 330, 50, 100);
    g2.drawRect(290, 330, 40, 80);
    g2.drawRect(350, 330, 40, 80);

    g2.drawString("1", 328, 105);       //place labels on each shape
    g2.drawString("2", 268, 105);
    g2.drawString("3", 288, 240);
    g2.drawString("4", 368, 375);
    g2.drawString("5", 308, 375);
    g2.drawString("6", 203, 95);
    g2.drawString("7", 133, 95);
    g2.drawString("8", 63, 95);
    g2.drawString("9", 242, 385);
    g2.drawString("10", 168, 385);
    g2.drawString("11", 225, 240);
    g2.drawString("12", 165, 240);
    g2.drawString("13", 105, 240);
    g2.drawString("14", 103, 375);
    g2.drawString("15", 43, 375);
}

@Override
public void paintComponent(Graphics g)
{
    draw(g);
}

}

如果有人愿意帮忙,请提前感谢。

您所问的实际问题的答案是“在JFrame和/或JPanel中使用布局管理器来定位组件,但您认为您已经知道了。您在两个JFrame中的一个中使用了GroupLayout管理器

我认为您的问题可能是您有两个JFrame。您在DrawCarPark中声明了一个JFrame变量,该类还扩展了JFrame。您可能不需要或不想要这两个变量,这可能会让您感到困惑——如果您希望在声明的JFrame中显示一些内容,那么您在不引用该实例的情况下调用的JFrame方法将传递compi因为DrawCarPark扩展了JFrame,但是他们不会做你想做的事情。如果你想要一个包含所有GUI元素的窗口,请去掉变量或JFrame的扩展

我可能会建议对其余的JFrame使用不同的布局管理器——它的默认值是BorderLayout,在我看来,这可能更符合您的需要,并将该面板放在BorderLayout的北段。然后将停车场面板放在该BorderLayout的中心,生成的JFrame将同时具有这两个部分


祝你好运。

谢谢你的快速回复,巴德。不过,还有一个问题,当你说“去除变量”时,这是否意味着我声明的称为“框架”的JFrame。当我这样做时,它会弄乱我的groupLayout语句,因为我已经在布局中添加了JFrame。我是否也必须从布局语句中删除它恩?你说的“剩余的JFrame”是什么?提前感谢dude
DrawCarPark
扩展了
JFrame
,并被实例化为
carPark
。还有一个
JFrame
DrawCarPark
中被实例化为
frame
。你在
frame
上调用组布局,你可以o不使用“
frame.
"; 后者将在DrawCarPark的
实例上调用,在您的情况下,该实例将是
停车场
。如果您想要一个窗口,请使用
停车场
框架
,而不是同时使用这两个窗口。无论更改哪一个,都必须更改引用另一个的方法调用,以使所有方法调用都引用同一个JFrame实例。请参阅本节中的示例。不要扩展
JFrame
,请使用变量
frame
。使用
frame.getContentPane()
代替
getContentPane()
package carparksystem;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JButton;

public class CarPark extends javax.swing.JPanel
{
private void draw(Graphics g)
{
    Graphics2D g2 = (Graphics2D) g;

    //Draw carpark boundary
    g2.drawLine(20, 20, 400, 20);
    g2.drawLine(20, 450, 20, 20);
    g2.drawLine(20, 450, 400, 450);
    g2.drawLine(400, 20, 400, 140);
    g2.drawLine(400, 330, 400, 450);

    g2.drawString("ENTER", 370, 180);           //labels
    g2.drawString("EXIT", 375, 300);

    g2.setColor(Color.WHITE);                   //attendants box
    g2.fill3DRect(330, 200, 70, 70, true);   

    g2.setColor(Color.BLACK);                   
    g2.drawString("Attendant", 338, 230);
    g2.drawString("Station", 345, 245);
    g2.drawRect(330, 200, 70, 70);

    g2.setColor(Color.GREEN);
    g2.fillRect(40, 40, 50, 100);       //8         first row spaces
    g2.fillRect(110, 40, 50, 100);      //7
    g2.fillRect(180, 40, 50, 100);      //6
    g2.fillRect(250, 60, 40, 80);       //2
    g2.fillRect(310, 60, 40, 80);       //1

    g2.setColor(Color.BLACK);           //drawRect palces a black border around shape
    g2.drawRect(40, 40, 50, 100);   
    g2.drawRect(110, 40, 50, 100);  
    g2.drawRect(180, 40, 50, 100);    
    g2.drawRect(250, 60, 40, 80);   
    g2.drawRect(310, 60, 40, 80);

    g2.setColor(Color.GREEN);                       //second row spaces
    g2.fillRect(90, 195, 40, 80);       //13
    g2.fillRect(150, 195, 40, 80);      //12
    g2.fillRect(210, 195, 40, 80);      //11
    g2.fillRect(270, 195, 40, 80);      //3

    g2.setColor(Color.BLACK);
    g2.drawRect(90, 195, 40, 80);  
    g2.drawRect(150, 195, 40, 80);
    g2.drawRect(210, 195, 40, 80);
    g2.drawRect(270, 195, 40, 80);

    g2.setColor(Color.GREEN);                       //3rd row spaces
    g2.fillRect(30, 330, 40, 80);       //15
    g2.fillRect(90, 330, 40, 80);      //14
    g2.fillRect(150, 330, 50, 100);     //10
    g2.fillRect(220, 330, 50, 100);     //9
    g2.fillRect(290, 330, 40, 80);      //5
    g2.fillRect(350, 330, 40, 80);      //4

    g2.setColor(Color.BLACK);
    g2.drawRect(30, 330, 40, 80);
    g2.drawRect(90, 330, 40, 80);
    g2.drawRect(150, 330, 50, 100);
    g2.drawRect(220, 330, 50, 100);
    g2.drawRect(290, 330, 40, 80);
    g2.drawRect(350, 330, 40, 80);

    g2.drawString("1", 328, 105);       //place labels on each shape
    g2.drawString("2", 268, 105);
    g2.drawString("3", 288, 240);
    g2.drawString("4", 368, 375);
    g2.drawString("5", 308, 375);
    g2.drawString("6", 203, 95);
    g2.drawString("7", 133, 95);
    g2.drawString("8", 63, 95);
    g2.drawString("9", 242, 385);
    g2.drawString("10", 168, 385);
    g2.drawString("11", 225, 240);
    g2.drawString("12", 165, 240);
    g2.drawString("13", 105, 240);
    g2.drawString("14", 103, 375);
    g2.drawString("15", 43, 375);
}

@Override
public void paintComponent(Graphics g)
{
    draw(g);
}

}