[英]Java - Attempting to draw multiple shapes at once, some are missing
我正在嘗試在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;
}
}
我認為這是相關的代碼,如果需要其他代碼來確定問題,請詢問,我會提供!
編輯:colouredShapes抽象類,根據要求。
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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.