有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在JButtom后面生成圆角多边形

[奇怪的渲染] 首先为我的英语感到抱歉。 我遇到了一个奇怪的渲染错误:fillPolygon在2前面渲染。三,。JButton,如果我将鼠标移到按钮上,渲染会突然变为正确。我不确定是什么问题。 我制作了一个装满星星的BuffereImage(我也尝试过不使用BuffereImage)

https://i.stack.imgur.com/wIf88.png

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

按钮设置:

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

面板设置:

private void panelSetup(Color background) {
    panel = new JPanel();
    panel.setSize(getSize());
    panel.setBackground(background);
    panel.setLayout(new GridBagLayout());
    
    GridBagConstraints gbc = new GridBagConstraints();
    gbc.gridwidth = GridBagConstraints.REMAINDER;
    gbc.fill = GridBagConstraints.HORIZONTAL;
    
    for(int i = 0; i < 5; i++) panel.add(buttons[i], gbc);
    makeBackground();
}

共 (1) 个答案

  1. # 1 楼答案

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

    进行自定义绘制时,应该覆盖paintComponent()方法:

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

    阅读Swing教程中关于A Closer Look at the Paint Mechanism的部分

    您将看到组件及其所有子组件都已绘制,然后尝试在它们上面绘制图像。对于背景,需要先绘制面板的背景,然后绘制子组件

    if I move the mouse over the buttons the rendering suddenly turns to correct.

    这是因为按钮需要重新绘制以反映“翻转”效果。因此,按钮临时绘制在背景上方

    但是,尝试调整帧的大小,背景将再次出现,因为整个帧将被重新绘制