我有一个网格,它位于 firstPanel
中,我希望它适合当前的扩展大小,然后将第二个面板 rightSidePanel
放置在其旁边。然而,firstPanel
延伸得比网格更远,这意味着 rightSidePanel
看起来离网格更远。这是我不想要的。我如何更改 firstPanel
的大小 我不关心组件大小的调整 - 正如布局管理器给出的 - 因为屏幕不可调整大小。
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);
}
截图:
关于java - 设置 JPanel 相对于 Graphics 2D 绘制网格的大小的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23323085/