如何使fillpolygon(s)behined jbuttom

ckocjqey  于 2021-07-07  发布在  Java
关注(0)|答案(1)|浏览(319)

[奇怪的渲染]首先对不起我的英语。我有一个奇怪的渲染错误:fillpolygon在2前面渲染。和3。jbutton,如果我将鼠标移到按钮上,渲染会突然变为正确。我不知道有什么问题。我做了一个充满星星的bufferedimage(我也试过不使用bufferedimage)。

  1. public void paint(Graphics g) {
  2. super.paint(g);
  3. g.drawImage(background, 0 , 0, null );
  4. }

按钮设置:

  1. for(int i = 0; i < buttons.length; i++) {
  2. buttons[i] = new JButton(names[i]);
  3. buttons[i].setFont(font);
  4. buttons[i].addActionListener(al);
  5. buttons[i].setActionCommand(actionCommands[i]);
  6. buttons[i].setVisible(defaultButtonVisibility[i]);
  7. }

面板设置:

  1. private void panelSetup(Color background) {
  2. panel = new JPanel();
  3. panel.setSize(getSize());
  4. panel.setBackground(background);
  5. panel.setLayout(new GridBagLayout());
  6. GridBagConstraints gbc = new GridBagConstraints();
  7. gbc.gridwidth = GridBagConstraints.REMAINDER;
  8. gbc.fill = GridBagConstraints.HORIZONTAL;
  9. for(int i = 0; i < 5; i++) panel.add(buttons[i], gbc);
  10. makeBackground();
  11. }
x3naxklr

x3naxklr1#

  1. public void paint(Graphics g) {
  2. super.paint(g);
  3. g.drawImage(background, 0 , 0, null );
  4. }

进行自定义绘制时,应重写paintcomponent()方法:

  1. public void paintComponent(Graphics g) {
  2. super.paintComponent(g);
  3. g.drawImage(background, 0 , 0, null );
  4. }

阅读swing教程中有关更仔细地查看绘制机制的部分。
您将看到组件及其所有子组件都已绘制,然后尝试在它们上面绘制图像。对于背景,需要先绘制面板的背景,然后绘制子组件。
如果我将鼠标移到按钮上,渲染会突然变为正确。
这是因为需要重新绘制按钮以反映“滚动”效果。所以按钮被临时画在背景的上方。
但是,请尝试调整帧的大小,背景将再次出现,因为整个帧将被重新绘制。

展开查看全部

相关问题