在Java中,如何仅填充圆角矩形的颜色并将其保留在变量中

在Java中,如何仅填充圆角矩形的颜色并将其保留在变量中,java,swing,jpanel,paint,Java,Swing,Jpanel,Paint,我正在开发我的程序界面,最近我才能够画出我想要的东西。我有一定数量的圆角矩形,每个中间都有一个数字,但是我不知道如何才能让这些矩形填充一个特定的颜色和现在的边界线。除此之外,我还需要在一个变量中存储每个矩形,以便能够更改矩形的颜色。以下是我目前的代码: package game; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import jav

我正在开发我的程序界面,最近我才能够画出我想要的东西。我有一定数量的圆角矩形,每个中间都有一个数字,但是我不知道如何才能让这些矩形填充一个特定的颜色和现在的边界线。除此之外,我还需要在一个变量中存储每个矩形,以便能够更改矩形的颜色。以下是我目前的代码:

package game;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.util.LinkedHashMap;
import java.util.Map;

import javax.swing.JButton;
import javax.swing.JPanel;

public class GameNumView extends JPanel
{
    //Nombres affiché
    String[] Numbers;

    public GameNumView(int pWidth, int pHeight)
    {
        //Change ajuste la grosseur du panel
        this.setPreferredSize(new Dimension(pWidth, pHeight));

        //Crée le tableau des strings
        Numbers = new String[]{};
    }

    @Override
    public void paintComponent(Graphics g)
    {
        //Repain avec la super class
        super.paintComponent(g);

        //Calcule les dimensions qui seront utilisé
        int rectSpace = 5;
        int rectWidth = getWidth()/Numbers.length-rectSpace*2;
        int rectHeight = getHeight()-rectSpace*2;
        int arcRect = 15;

        int fontSize = 60;
        int textX = rectWidth/2 - fontSize/4 - rectSpace;
        int textY = rectHeight/2 + fontSize/2 - rectSpace;

        //Change al font
        g.setFont(new Font("TimesRoman", Font.PLAIN, fontSize));

        //Dessine un rounded rectangle avec le nombre pour chaque chiffre du tableau
        for(int i =0; i < Numbers.length; i++)
        {
            g.setColor(Color.red);
            g.drawRoundRect(rectSpace + i*(rectWidth + rectSpace*2), rectSpace, rectWidth, rectHeight, arcRect, arcRect);
            g.setColor(Color.black); 
            g.drawString(Numbers[i], rectSpace + textX + i*(rectWidth + rectSpace*2), textY + rectSpace);
        }
    }

    public void setNumbers(String[] pNumbers)
    {
        //Stock les numbres choisis
        Numbers = pNumbers;
    }

    public void changeColor(Color pColor)
    {
        //Change the background color
    }
}
打包游戏;
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.Font;
导入java.awt.Graphics;
导入java.util.LinkedHashMap;
导入java.util.Map;
导入javax.swing.JButton;
导入javax.swing.JPanel;
公共类GameNumView扩展了JPanel
{
//名称:阿菲切
字符串[]数字;
公共游戏视图(内宽、内宽)
{
//更改面板上的拉格罗索酒店
此.setPreferredSize(新尺寸(pWidth,pHeight));
//弦乐
数字=新字符串[]{};
}
@凌驾
公共组件(图形g)
{
//雷帕因阿韦克超级级酒店
超级组件(g);
//可计算的尺寸
int-rectSpace=5;
int rectWidth=getWidth()/Numbers.length rectSpace*2;
int recthheight=getHeight()-rectSpace*2;
int-arcRect=15;
int fontSize=60;
int textX=rectWidth/2-fontSize/4-rectSpace;
int textY=rectHeight/2+fontSize/2-矩形空间;
//更改字体
g、 setFont(新字体(“TimeRoman”,Font.PLAIN,fontSize));
//不圆矩形,不带名称,可用于舞台装饰
for(int i=0;i
可能不是最干净的方法,但您可以创建一个新类,该类有一个只绘制所需形状的方法。该类实例的ArrayList、一些getter和setter以及您的所有变量问题都已解决。构造器的参数将是
x
y
宽度
高度
颜色
文本
字体
。设置相应的变量并使用
draw()
方法(绘制“形状”的方法)中的getter。为了证明这个概念:下面是一个使用代码的示例-第二个矩形将是红色的,因为我们称之为
rectangles.get(1).setColor(Color.red)-您可以使用setter对任何实例执行类似的操作。我认为代码中的所有内容都是不言自明的,除了文本的中心。。。那只是尝试和错误,TBH:D

import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Example extends JPanel {

    String[] numbers;
    ArrayList<RoundedRectangle> rectangles = new ArrayList<RoundedRectangle>();

    public Example() {
        numbers = new String[] { "12", "3", "5" };
        for (int i = 0; i < numbers.length; i++) {
            RoundedRectangle rr = new RoundedRectangle(100 + i * 100, 100, 50, 50, Color.BLUE, numbers[i],
                    new Font(Font.SANS_SERIF, Font.PLAIN, 25));
            rectangles.add(rr);
        }
        rectangles.get(1).setColor(Color.RED);
        System.out.println(rectangles.get(1).getColor());
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        for (int i = 0; i < rectangles.size(); i++) {
            rectangles.get(i).draw(g2);
        }
    }

    public static void main(String[] args) {

        JFrame frame = new JFrame();
        frame.setContentPane(new Example());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 500);
        frame.setVisible(true);

    }

    public class RoundedRectangle {

        int x;
        int y;
        int width;
        int height;
        Color color;
        String text;
        Font font;

        public RoundedRectangle(int x, int y, int width, int height, Color color, String text, Font font) {

            setX(x);
            setY(y);
            setWidth(width);
            setHeight(height);
            setColor(color);
            setText(text);
            setFont(font);

        }

        public void draw(Graphics2D g2) {

            g2.setColor(getColor());
            g2.drawRoundRect(x, y, width, height, 15, 15);

            g2.setColor(Color.BLACK);
            FontMetrics metrics = g2.getFontMetrics(getFont());
            int width = metrics.stringWidth(getText());
            int height = metrics.getHeight() - metrics.getAscent();
            g2.setFont(getFont());
            g2.drawString(getText(), getX() + getWidth() / 2 - width / 2, getY() + getHeight() / 2 + height);

        }

        public int getX() {
            return x;
        }

        public void setX(int x) {
            this.x = x;
        }

        public int getY() {
            return y;
        }

        public void setY(int y) {
            this.y = y;
        }

        public int getWidth() {
            return width;
        }

        public void setWidth(int width) {
            this.width = width;
        }

        public int getHeight() {
            return height;
        }

        public void setHeight(int height) {
            this.height = height;
        }

        public Color getColor() {
            return color;
        }

        public void setColor(Color color) {
            this.color = color;
        }

        public String getText() {
            return text;
        }

        public void setText(String text) {
            this.text = text;
        }

        public Font getFont() {
            return font;
        }

        public void setFont(Font font) {
            this.font = font;
        }

    }

}
导入java.awt.Color;
导入java.awt.Font;
导入java.awt.FontMetrics;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.RenderingHints;
导入java.util.ArrayList;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
公共类示例扩展了JPanel{
字符串[]数字;
ArrayList矩形=新的ArrayList();
公共示例(){
数字=新字符串[]{“12”、“3”、“5”};
for(int i=0;i