簡體   English   中英

Java-嘗試一次繪制多個形狀,但缺少一些形狀

[英]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();
}

我假設您對JInternalFrame使用Borderlayout
從我所看到的,我假設您通過以下方式將所有形狀添加到JInternalFrame中: contentPane.add(bShape); 這將bShape添加到Borderlayout中心。

Borderlayout中心可以容納一個組件。 添加第二個將覆蓋第一個。
對於測試,您可以setLayout(null); JInternalFrame (並設置添加的組件的邊界)。 有關更強大的解決方案,請參見此處
還要確保繪制的背景是透明的。 有關更多詳細信息,請參見此處

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM