Java-带GUI的停车场系统
我在这里寻找一点帮助 我的任务是创建一个带有GUI界面而不是控制台界面的停车场管理系统。该系统共有15个空间,其中5个空间较大,只能容纳“大型”车辆,其他10个空间为常规大小的空间。它们的大小由停车场的停车服务人员决定 进入停车场后,服务员需要填写有关车辆的信息(车辆注册号,并单击“是”或“否”单选按钮,确定车辆是否为“高价值”车辆,或者如果车辆为“大型车辆”) 我目前正在尝试构建一个界面,当程序运行时,该界面首先显示停车场(当空间可用时,停车场将从红色变为绿色,反之亦然),我使用Graphics2D绘制了该界面。(在这一点上,我不知道如何使它出现在JFrame或我需要使用的任何东西中)在绘制的具有变化颜色的停车场下,我将包括3个按钮-一个按钮“添加一辆车”,“卸下一辆车”和“搜索一辆车”。我不确定如何制作“停车场”组件以及运行时将出现的上述窗口按钮 因此,当我单击这些按钮时,将出现一个新窗口,显示与每个按钮相关的表单(添加、删除和搜索) 我必须做些什么才能让停车场和按钮出现在同一个窗口中 这是我迄今为止创建的代码——尽管它非常不整洁,而且在几乎一个类中,我知道发生了什么,并计划在一切正常后将其拆分。(我知道这样写代码效率不高): 这是我的主菜单课和我画的停车场:Java-带GUI的停车场系统,java,swing,user-interface,Java,Swing,User Interface,我在这里寻找一点帮助 我的任务是创建一个带有GUI界面而不是控制台界面的停车场管理系统。该系统共有15个空间,其中5个空间较大,只能容纳“大型”车辆,其他10个空间为常规大小的空间。它们的大小由停车场的停车服务人员决定 进入停车场后,服务员需要填写有关车辆的信息(车辆注册号,并单击“是”或“否”单选按钮,确定车辆是否为“高价值”车辆,或者如果车辆为“大型车辆”) 我目前正在尝试构建一个界面,当程序运行时,该界面首先显示停车场(当空间可用时,停车场将从红色变为绿色,反之亦然),我使用Graphic
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);
}
}