gpt4 book ai didi

Java - 尝试一次绘制多个形状,有些形状丢失

转载 作者:行者123 更新时间:2023-12-02 12:08:09 25 4
gpt4 key购买 nike

我正在尝试在 JInternalFrame 的 contentPane 中绘制多个形状。单击按钮时,程序应确定选择了哪些复选框,并添加适当的形状。如果选择了多个形状,则应添加所有形状。

目前该程序可以绘制任何形状。问题是,当我选中多个复选框时,单击时只会绘制一个形状,而且我不明白为什么。 (示例:选择了黄色和蓝色的 JCheckboxes,它只绘制黄色形状,而它应该绘制两者)请帮助我让程序在单击时绘制多个形状!

这是一些代码:

ActionListener 用于处理形状的添加:

class addListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if (redBox.isSelected())
{
x = createRNG(RNG_MAX,RNG_MIN);//so the shapes starting location is random
y = createRNG(RNG_MAX,RNG_MIN);
rShape = new redShape(x,y);
contentPane.add(rShape);//,BorderLayout.CENTER);
}
if (blueBox.isSelected())
{
x = createRNG(RNG_MAX,RNG_MIN);
y = createRNG(RNG_MAX,RNG_MIN);
bShape = new bShape(x,y);
//internalFrame.getContentPane().add(bShape);
contentPane.add(bShape);//BorderLayout.CENTER);
}
if (yellowBox.isSelected())
{
x = createRNG(RNG_MAX,RNG_MIN);
y = createRNG(RNG_MAX,RNG_MIN);
yShape = new yShape(x,y);
//internalFrame.getContentPane().add(yShape);
contentPane.add(yShape);//,BorderLayout.CENTER);

}
internalFrame.repaint();
internalFrame.revalidate();
}
}

形状类之一的代码。这些类的代码基本相同,只是绘制的形状不同。

import javax.swing.*;
import java.awt.*;

public class redShape extends coloredShapes
{
private static final int RECTANGLE_WIDTH = 80;
private static final int RECTANGLE_HEIGHT = 20;

private int xLeft;
private int yTop;

public redShape(int x, int y)
{
xLeft = x;
yTop = y;
}

public void paintComponent(Graphics g)
{
//draws 1 large rectangle
g.setColor(Color.red);
g.fillRect(xLeft,yTop,RECTANGLE_WIDTH,RECTANGLE_HEIGHT);

//Divides the rectangle into parts
g.setColor(Color.black);
g.drawLine(xLeft, yTop,xLeft+80,yTop);
g.drawLine(xLeft,yTop,xLeft,yTop+20);
g.drawLine(xLeft,yTop+20,xLeft+80,yTop+20);
g.drawLine(xLeft+80,yTop+20,xLeft+80,yTop);
g.drawLine(xLeft+20,yTop,xLeft+20,yTop+20);
g.drawLine(xLeft+40,yTop,xLeft+40,yTop+20);
g.drawLine(xLeft+60,yTop,xLeft+60,yTop+20);
}

public void moveComponentBy(int dx, int dy)
{
if (yTop < 450)
{
xLeft += dx;
yTop += dy;
if (xLeft < 0)
{
xLeft = 0;
}
if (xLeft > 500)
{
xLeft = 500;
}
repaint();
}
}

public int getYTop()
{
return yTop;
}

public int getXLeft()
{
return xLeft;
}
}

这是我认为相关的代码,如果需要任何进一步的代码来确定问题,请询问,我会提供!

编辑:根据要求,coloredShapes 抽象类。

import java.util.*;
import javax.swing.*;
abstract public class coloredShapes extends JComponent
{
private static final int RECTANGLE_WIDTH = 10;
private static final int RECTANGLE_HEIGHT = 10;

private int xLeft;
private int yTop;

public coloredShapes()
{
xLeft = 0;
yTop = 0;
}

public abstract void moveComponentBy(int dx, int dy);

public abstract int getYTop();

public abstract int getXLeft();
}

最佳答案

我假设您为 JInternalFrame 使用 Borderlayout
据我所知,我假设您通过以下方式将所有形状添加到 JInternalFrame: contentPane.add(bShape); 它将 bShape 添加到 Borderlayout 中心。

Borderlayout 中心可以容纳一个组件。添加第二个会覆盖第一个。
为了进行测试,您可以 setLayout(null);JInternalFrame (并设置添加的组件的边界)。如需更强大的解决方案,请参阅here
还要确保您绘制的背景是透明的。请参阅here更多细节。

关于Java - 尝试一次绘制多个形状,有些形状丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46740725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com