java - 如何在Java中设置背景颜色和drawString而不取消另一个?

标签 java swing jframe jpanel

我正在尝试创建一个 jframe 并设置背景颜色,但也放入了拉绳。似乎每当我使用 .add 时,都会出现文本,但不会出现背景。如果没有 .add,背景会改变,但文本不会改变。 `

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Test extends JPanel{
    public void paint(Graphics g){
        Graphics2D g2d=(Graphics2D)g;
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        Font font = new Font("Serif", Font.PLAIN, 500);
        g.setFont(font);
        g.setColor(Color.red);
        g.drawString("Hello", 300, 900);
        }public static void main(String[] args) {
        // TODO Auto-generated method stub
        JFrame jf=new JFrame();
        jf.getContentPane().setBackground(Color.YELLOW);
        jf.getContentPane().add(new Test());
        jf.setSize(1920,1024);
        jf.setVisible(true);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

`

最佳答案

有几种方法可以做到这一点...

你可以..

使Test面板成为框架的内容面板...

JFrame jf = new JFrame();
jf.setContentPane(new Test());
jf.getContentPane().setBackground(Color.YELLOW);
jf.setSize(1920, 1024);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

你可以...

使测试面板透明

JFrame jf = new JFrame();
Test test = new Test();
test.setOpaque(false);
jf.getContentPane().setBackground(Color.YELLOW);
jf.add(test);
jf.setSize(1920, 1024);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

你可以...

只需设置Test面板的背景颜色

JFrame jf = new JFrame();
Test test = new Test();
test.setBackground(Color.YELLOW);
jf.add(test);
jf.setSize(1920, 1024);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

无论你做什么......

你应该...

  • 调用paint方法的super方法
  • 更喜欢 paintpaintComponent - 它更安全
  • 仅从事件调度头的上下文中操作 UI

例如...

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Test extends JPanel {

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        Font font = new Font("Serif", Font.PLAIN, 500);
        g.setFont(font);
        g.setColor(Color.red);
        g.drawString("Hello", 300, 900);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame jf = new JFrame();
                jf.setContentPane(new Test());
                jf.getContentPane().setBackground(Color.YELLOW);
                jf.setSize(1920, 1024);
                jf.setVisible(true);
                jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            }
        });
    }
}

关于java - 如何在Java中设置背景颜色和drawString而不取消另一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43484993/

相关文章:

java - 将一个 GUI 面板中的用户输入显示在另一个 GUI 面板上

Java 7 调整 JFrame(我的 GUI)的大小 : the componentListener is not getting fired

java - JFrame 中的 BufferedImage 不显示

java - 从外部类切换 Java 中的 jPanel

java - 如何从文件夹中获取最后保存的项目的名称?

java - 在 Sub-Fragment 中,当 webview 无法返回时,如何重定向到 Main-Fragment 或 Home-Fragment

java - Dozer 自定义转换器 - 将整个对象作为字段 'A' 传递

java - 没有毫秒的日期格式

java - 使 JLabel 背景在有背景的框架中透明

java - Eclipse - 放置图像文件的位置