Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中设置背景颜色和抽绳而不取消其他颜色和抽绳?_Java_Swing_Jframe_Jpanel - Fatal编程技术网

如何在Java中设置背景颜色和抽绳而不取消其他颜色和抽绳?

如何在Java中设置背景颜色和抽绳而不取消其他颜色和抽绳?,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,我试图创建一个jframe并设置一个背景色,但也加入了一个抽绳。似乎每当我使用.add时,都会出现文本,但不会出现背景。没有.add,背景会改变,但文本不会改变。 ` `设置测试JPanel的背景色,不设置JFrame的背景色 此外: 替代绘制组件,不绘制 别忘了在覆盖范围内调用super的绘画方法 学习并遵循Java命名和代码格式约定。您的代码很难阅读和理解,因为它是当前编写的 例如: import java.awt.Color; import java.awt.Dimension; im

我试图创建一个jframe并设置一个背景色,但也加入了一个抽绳。似乎每当我使用.add时,都会出现文本,但不会出现背景。没有.add,背景会改变,但文本不会改变。 `


`

设置测试JPanel的背景色,不设置JFrame的背景色

此外:

  • 替代绘制组件,绘制
  • 别忘了在覆盖范围内调用super的绘画方法
  • 学习并遵循Java命名和代码格式约定。您的代码很难阅读和理解,因为它是当前编写的
例如:

import java.awt.Color;
import java.awt.Dimension;
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 Test3 {
    public static void main(String[] args) {
        JFrame jf = new JFrame();
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.getContentPane().add(new MyTest("Hello", Color.RED));
        jf.pack();
        jf.setLocationRelativeTo(null);
        jf.setVisible(true);
    }
}

class MyTest extends JPanel {
    private static final int PREF_W = 1600;
    private static final int PREF_H = 900;
    private static final Color BG = Color.YELLOW;
    private static final Font FONT = new Font("Serif", Font.PLAIN, 500);;
    private String text;
    private Color color;

    MyTest(String text, Color color) {
        this.text = text;
        setBackground(BG);
        this.color = color;
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        g.setFont(FONT);
        g.setColor(color);
        g.drawString("Hello", 300, 600);

    }

    @Override
    public Dimension getPreferredSize() {
        if (isPreferredSizeSet()) {
            return super.getPreferredSize();
        }
        return new Dimension(PREF_W, PREF_H);
    }

}

设置测试JPanel的背景色,而不是JFrame

此外:

  • 替代绘制组件,绘制
  • 别忘了在覆盖范围内调用super的绘画方法
  • 学习并遵循Java命名和代码格式约定。您的代码很难阅读和理解,因为它是当前编写的
例如:

import java.awt.Color;
import java.awt.Dimension;
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 Test3 {
    public static void main(String[] args) {
        JFrame jf = new JFrame();
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.getContentPane().add(new MyTest("Hello", Color.RED));
        jf.pack();
        jf.setLocationRelativeTo(null);
        jf.setVisible(true);
    }
}

class MyTest extends JPanel {
    private static final int PREF_W = 1600;
    private static final int PREF_H = 900;
    private static final Color BG = Color.YELLOW;
    private static final Font FONT = new Font("Serif", Font.PLAIN, 500);;
    private String text;
    private Color color;

    MyTest(String text, Color color) {
        this.text = text;
        setBackground(BG);
        this.color = color;
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        g.setFont(FONT);
        g.setColor(color);
        g.drawString("Hello", 300, 600);

    }

    @Override
    public Dimension getPreferredSize() {
        if (isPreferredSizeSet()) {
            return super.getPreferredSize();
        }
        return new Dimension(PREF_W, PREF_H);
    }

}

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

你可以。。 使
测试
面板成为框架的内容面板

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);
你可以。。。 只需设置
测试
面板的背景色即可

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
    方法
  • 更喜欢
    paintComponent
    paintComponent
    ——这样更安全
  • 仅从事件分派Thead的上下文操作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);
            }
        });
    }
}

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

你可以。。 使
测试
面板成为框架的内容面板

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);
你可以。。。 只需设置
测试
面板的背景色即可

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
    方法
  • 更喜欢
    paintComponent
    paintComponent
    ——这样更安全
  • 仅从事件分派Thead的上下文操作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);
            }
        });
    }
}

Test
类上调用
setOpaque(false)
,使其透明不要在面板上调用setOpaque(false)。没有理由这样做,这会降低绘画的效率。只需设置面板的背景,并通过覆盖
paintComponent(…)
并调用
super.paintComponent(…)
在面板上进行适当的绘制。有关更多信息和可下载的工作示例,请阅读Swing教程中的部分。演示代码将有一个更好的程序结构供您遵循。本教程还包含其他基本Swing信息和示例。在
Test
类上调用
setOpaque(false)
,使其透明不要在面板上调用setOpaque(false)。没有理由这样做,这会降低绘画的效率。只需设置面板的背景,并通过覆盖
paintComponent(…)
并调用
super.paintComponent(…)
在面板上进行适当的绘制。有关更多信息和可下载的工作示例,请阅读Swing教程中的部分。演示代码将有一个更好的程序结构供您遵循。本教程还包含其他基本的Swing信息和示例。