当前位置: 首页 > 知识库问答 >
问题:

Java AWT:设置画布背景改变整个框架的背景

贝自怡
2023-03-14

为什么改变java.awt.canvas的背景颜色就改变了整个框架的背景?

public class Gui extends Frame {

    public Gui() {

        setSize(800, 600);
        setLocation(0, 0);

        Canvas cd=new Canvas();
        cd.setSize(500, 300);
        cd.setBackground(Color.BLUE);
        add(cd);


        addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent arg0) {
                System.exit(0);
            }

        });
    }

    @Override
    public void paint(Graphics g) {
        paintComponents(g);
    }

    public static void main(String[] args) {

        Gui g=new Gui();
        g.setVisible(true);

    }

}

这可能是问题所在吗(我在Ubuntu上运行这个)?
还是我在这里遗漏了什么?

共有1个答案

申思远
2023-03-14

Frame的默认布局是BorderLayout(尽管许多使用基于AWT的Frame类的示例代码是在默认布局为FlowLayout时编写的)。如果没有布局约束,添加到BorderLayout的组件最终将处于Center约束中,该约束将扩展组件,使其符合可用的高度和宽度。

相反,我们可以使用GridBagLayout。当我们将单个组件添加到GridBagLayout而不受任何约束时,它将居中并尊重大小。例如。(请参阅代码中的进一步注释。)

import java.awt.*;
import java.awt.event.*;

public class Gui extends Frame {

    public Gui() {
        setSize(400, 200);
        setLocationByPlatform(true);
        setLayout(new GridBagLayout());

        Canvas cd=new Canvas();
        // TODO: Override rather than set & make it preferred rather than actual
        cd.setSize(300, 100); 
        cd.setBackground(Color.BLUE);
        add(cd);

        addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent arg0) {
                System.exit(0);
            }
        });
    }

    @Override
    public void paint(Graphics g) {
        //paintComponents(g); // wrong method!
        super.paint(g); // right method, but does nothing different to original!
    }

    public static void main(String[] args) {
        // TODO: AWT/Swing based GUIs should be started on the EDT
        Gui g=new Gui();
        g.setVisible(true);
    }
}
 类似资料:
  • 问题内容: 我制作了一个JS动画,希望作为主页的背景。但是我对Web开发还是很陌生,还不清​​楚如何阻止canvas元素成为页面上的“内联”对象,并将其设置在其他HTML元素之后。非常感谢您的指教。HTML是: 问题答案: canvas { position:absolute; top:0; left:0; width:100%; height:100%; z-index:-1; }

  • 我在用这个http://www.primefaces.org/showcase-labs/ui/selectManyCheckbox.jsfprimefaces组件获取动态布尔复选框值 我需要对所有布尔复选框应用不同的颜色,如下图所示 如果id=1,则颜色为红色;如果id=2,则颜色为橙色,依此类推。 正如我们所知,这些是电影中的动态值,那么我如何从backing bean为这些动态复选框设置背景

  • 我需要帮助的java swing为GUI。我已经包含了“frame.getContentPane().setbackground(color.cyan);”到代码,但框架的背景颜色不变?谢谢你。

  • 问题内容: 我正在使用Nimbus外观。我需要在JTabbedPane中更改选项卡的背景色和前景色,但在JTabbedPane中未设置颜色。我尝试了setForeground(),setForegroundAt(),setBackground()和setBackgroundAt()方法,但没有用。这是我的代码 } 问题答案: 您可以执行几项不同的操作,具体取决于您希望对确切颜色进行多少控制。最简单

  • 通过RGB值设置背景的颜色。 默认的颜色是 0x000000: // 颜色的参数可以是字符串 "#530000" 或者是十六进制数值 0x530000 controller.setBackgroundColor("#530000); //controller.setBackgroundColor(0x530000);

  • 我有一个带有背景图像的HTML5画布元素。用户被允许在图像上绘制,然后需要保存完整的画布元素与背景。我使用下面的代码保存部分,但它只得到画布绘图,而不是背景图像。我还可以做什么来获得背景图像? 更新: 我的HTML 我有上面的div在我的HTML页面。然后我动态地创建画布并在其上绘制。这是一个有点长的代码。