gpt4 book ai didi

java - 带 slider 的 JPanel 不显示图形

转载 作者:行者123 更新时间:2023-12-01 22:17:27 25 4
gpt4 key购买 nike

我拥有的只是一个带有白色背景的 JPanel 和底部的 JSlider,不显示正方形,我认为我在 JPanel 类上犯了一些错误,但我无法弄清楚。就在我用 g.fillOval 制作另一个项目并且它工作正常之前,我检查了它,每一行代码似乎都一样,我真的很困惑。

public class Main00 {

public static void main(String[] args) {
Gui asd=new Gui();
asd.setVisible(true);
asd.setSize(500,400);
}
}

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

public class Gui extends JFrame {

private JSlider slider;
private DrawSquare square;

public Gui() {
super("square modificator");
setDefaultCloseOperation(EXIT_ON_CLOSE);

square = new DrawSquare();
square.setBackground(Color.WHITE);
slider = new JSlider(SwingConstants.HORIZONTAL, 0, 300,
square.getSide());
slider.setMajorTickSpacing(20);
slider.setPaintTicks(true);
add(square);
add(slider, BorderLayout.SOUTH);
slider.addChangeListener(new ChangeListener() {

@Override
public void stateChanged(ChangeEvent e) {
square.setSide(slider.getValue());
}
});
}
}

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

public class DrawSquare extends JPanel {

private int side = 10;

public void paintComponents(Graphics g) {
super.paintComponents(g);
g.setColor(Color.RED);
g.fillRect(20, 20, side, side);
}

public void setSide(int side) {
this.side=(side>=0)?side:0;
repaint();
}

public Dimension getPrefferedSize(){
return new Dimension(200,200);
}

public Dimension getMinimumSize(){
return getPrefferedSize();
}

public int getSide(){
return side;
}
}

最佳答案

您正在覆盖 paintComponents 而不是正确的 paintComponent。这两种方法的效果截然不同,第二种方法就是你想要的效果。

来自 API:

  • paintComponents API entry :绘制此容器中的每个组件。
  • paintComponent API entry :如果 UI 委托(delegate)非空,则调用 UI 委托(delegate)的 Paint 方法。我们向委托(delegate)传递 Graphics 对象的副本,以保护其余的绘制代码免受不可撤销的更改

同样,您感兴趣的是通过其委托(delegate)来绘制组件本身,而不是绘制该组件所持有的组件。

关于java - 带 slider 的 JPanel 不显示图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30721707/

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