java - 设置 JPanel 相对于 Graphics 2D 绘制网格的大小的大小

标签 java swing jpanel paintcomponent preferredsize

我有一个网格,它位于 firstPanel 中,我希望它适合当前的扩展大小,然后将第二个面板 rightSidePanel 放置在其旁边。然而,firstPanel 延伸得比网格更远,这意味着 rightSidePanel 看起来离网格更远。这是我不想要的。我如何更改 firstPanel 的大小 我不关心组件大小的调整 - 正如布局管理器给出的 - 因为屏幕不可调整大小。

enter image description here

package com.aqagame.harrykitchener;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;


public class Game 
{

    private JButton moveC1But, moveC2But, rollDiceButton;

    public Game()
    {

        JFrame window = new JFrame ("Main Game");
        final JPanel firstPanel = new JPanel(new GridLayout(3,1))
        {
            public void paintComponent(Graphics g)
            {   
                Graphics2D g2d = (Graphics2D) g;

                super.paintComponent(g2d);

                int width = getWidth() / 4;
                int height = getHeight() / 11;

                for(int i = 0; i<4; i++)
                {
                    g.drawLine(i * width, 0, i * width, 600);
                }

                for(int i = 0; i < 11; i++)
                {
                    g.drawLine(0, i * height, 455, i * height);
                }

                g.drawOval(170, 515, 50, 50);
                g.drawOval(240, 515, 50, 50);
                g.drawOval(320, 515, 50, 50);
                g.drawOval(390, 515, 50, 50);
            }
        };

        JPanel mainPanel = new JPanel(new BorderLayout());
        mainPanel.add(firstPanel, BorderLayout.CENTER);

        JPanel rightSidePanel = new JPanel(new BorderLayout());
        moveC1But = new JButton("Move Counter 1");
        moveC2But = new JButton("Move Counter 2");
        rollDiceButton = new JButton("Roll Dice");
        rightSidePanel.add(moveC1But, BorderLayout.NORTH);
        rightSidePanel.add(rollDiceButton, BorderLayout.SOUTH);

        mainPanel.add(rightSidePanel, BorderLayout.EAST);

        rightSidePanel.setBackground(Color.cyan);
        firstPanel.setBackground(Color.red);

        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.getContentPane().add(mainPanel);
        window.setSize(800, 600);
        window.setLocationRelativeTo(null);
        window.setVisible(true);
        window.setResizable(false);

    }


    public static void main(String args[])
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new Game();
            }
        });

    }

}

最佳答案

如果JFrame也可以调整大小,它会正常工作。

for (int i = 0; i < 4; i++) {
    g.drawLine(i * width, 0, i * width, getHeight());
}

for (int i = 0; i < 11; i++) {
    g.drawLine(0, i * height, getWidth(), i * height);
}
<小时/>

--编辑--

将椭圆形设置在最后一行中心的完整代码

            int ovalSize = 0;
            if (width < height) {
                ovalSize = width;
            } else {
                ovalSize = height;
            }

            int center = (width - ovalSize) / 2;

            for (int i = 0; i < 4; i++) {
                g.drawLine(i * width, 0, i * width, getHeight());
                g.drawOval(i * width + center, height * 10, ovalSize, ovalSize);
            }

            for (int i = 0; i < 11; i++) {
                g.drawLine(0, i * height, getWidth(), i * height);
            }

截图:

enter image description here

关于java - 设置 JPanel 相对于 Graphics 2D 绘制网格的大小的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23323085/

相关文章:

java - 在java swing中创建幻灯片

java - 如何使用JPanel和Jframe在相对(X,Y)上进行鼠标事件

"edit"模式下的 Java Swing JTable 单元格使用不同的设置集?

Java:在保存游戏时更改 JPanel

Java 代码在执行过程中卡住

java - 如何对齐 JPanel 中的 3 个 JLabel 的底部

Java - 当我尝试使用框布局时出现错误

Java 多边形调整大小

java - Spark的Column.isin函数不带List

java - 查找 Eclipse 对 Maven 项目所做的更改