如何在Java中设置背景颜色和抽绳而不取消其他颜色和抽绳?
我试图创建一个jframe并设置一个背景色,但也加入了一个抽绳。似乎每当我使用.add时,都会出现文本,但不会出现背景。没有.add,背景会改变,但文本不会改变。 `如何在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
`设置测试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信息和示例。