[英]How do I set background colour and drawString without cancelling the other out in Java?
I am trying to create a jframe and set a background colour, but also putting in a drawstring. 我正在尝试创建一个jframe并设置背景色,但同时也放入了束带。 It seems like whenever I use .add, the text appears, but not the background.
似乎每当我使用.add时,都会显示文本,而不显示背景。 Without the .add, the background changes, but not the text.
没有.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);
}
}
` `
Set the background color of the Test JPanel, not the JFrame. 设置测试JPanel 而不是 JFrame的背景颜色。
Also: 也:
For example: 例如:
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);
}
}
There's a few ways you can do this... 您可以通过几种方法来执行此操作...
Make the Test
panel the content panel for the frame... 使“
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);
Make the Test
panel transparent 使
Test
面板透明
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);
Just set the background color of the Test
panel 只需设置“
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);
Regardless of which you do... 不管你做什么...
super
method of the paint
method paint
方法的super
方法 paintComponent
of paint
- it's just a lot safer paint
paintComponent
更安全 For example... 例如...
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);
}
});
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.