gpt4 book ai didi

java - 如何使按钮不会干扰绘制形状的位置?

转载 作者:行者123 更新时间:2023-12-02 08:46:45 25 4
gpt4 key购买 nike

所以基本上,当我添加一个按钮时,它实际上会将在该程序中绘制的黑色矩形向下推,将其移出其给定位置。您将如何解决这个问题?

import javax.swing.*;
import java.awt.*;

public class Grid {

public class homeGraphics extends JComponent {
homeGraphics() {
setPreferredSize(new Dimension(450, 600));
}

public void paint(Graphics g) {
super.paint(g);
g.fillRect(200, 275, 50, 50);
}
}

public void homeFrame() {
JFrame frame1 = new JFrame();
frame1.setSize(450, 600);
frame1.setResizable(false);
frame1.setDefaultCloseOperation(frame1.EXIT_ON_CLOSE);

JButton playButton = new JButton("Play");
playButton.setPreferredSize(new Dimension(60, 30));

JPanel panel1 = new JPanel();
panel1.add(playButton);
panel1.add(new homeGraphics());

frame1.add(panel1);
frame1.setVisible(true);
}

public static void main(String args[]) {
Grid frame = new Grid();
frame.homeFrame();
}
}```

最佳答案

it essentially pushes the black rectangle drawn in this program down, putting it out of its given location.

离开它的位置是什么意思?绘画总是相对于组件进行的。所以你的绘画将始终在组件的 (200, 275) 处完成。

如果您尝试在相对于“框架”的 (200, 275) 处绘制,则不要这样做。绘画不是这样的。

代码的其他问题:

  1. 不要尝试设置框架的大小。如果定制面板是(450, 600),框架怎么可能是相同的尺寸?框架还包含“标题栏”和“边框”。您无需使用 setSize(),而是在 frame1.setVisible(….)`之前调用 frame.pack()


  2. 类名称以大写字符开头。通过例子学习。您在 JDK 中见过不以大写字符开头的类名吗?


  3. 自定义绘制是通过重写 paintComponent(…) 来完成的,而不是 Paint()。


  4. 默认情况下,JPanel 使用 FlowLayout。所以你看到的是一行上的按钮,然后“HomeGraphics”类太大而无法放在同一行上,因此它将它包装到第二行。




在进行框架布局时应该更加明确。所以你的代码应该是这样的:



JPanel wrapper = new JPanel();
wrapper.add( playButton );

//JPanel panel1 = new JPanel();
//panel1.add(playButton);
//panel1.add(new homeGraphics());
JPanel panel1 = new JPanel( new BorderLayout() );
panel1.add(wrapper, BorderLayout.PAGE_START);
panel1.add(new HomeGraphics(), BorderLayout.CENTER);

现在代码可以更清楚地显示您的布局尝试。

关于java - 如何使按钮不会干扰绘制形状的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61029660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com