gpt4 book ai didi

java - 如何将 JLabel 和 JTextField 放在图像之上?

转载 作者:行者123 更新时间:2023-12-02 08:03:23 24 4
gpt4 key购买 nike

我正在尝试创建一个游戏,其中有一个背景图像和位于 JLabel 形式的文本。我该如何去做呢?

我这样做的主要原因是我可以有两个不同字体大小的不同文本区域。使用 g.drawString() 只会让您对整个内容使用 1 个文本大小。

这是迄今为止我的代码:

package com.cgp.buildtown;

import java.awt.Font;
import java.awt.FontFormatException;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsEnvironment;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JPanel;

public class Intro extends JPanel implements Runnable {
private static final long serialVersionUID = 1L;
private Thread thread;
private BufferedImage bg;
private Font font;

public Intro() {
super();
loadImages();
setFont(loadFont(50f));
}

private Font loadFont(Float f) {
try {
font = Font.createFont(Font.TRUETYPE_FONT, new File("res/komikatext.ttf"));
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(font);
} catch (FontFormatException | IOException e) {
e.printStackTrace();
}
return font.deriveFont(f);
}

private void loadImages() {
try {
bg = ImageIO.read(new File("res/introbg.png"));
} catch (IOException e) {
e.printStackTrace();
}
}

public void addNotify() {
super.addNotify();
thread = new Thread(this);
thread.start();
}

public void run() {
while(true) {
repaint();
}
}

public void paint(Graphics g) {
super.paint(g);

Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

g.drawImage(bg, 0, 0, null);
}
}

最佳答案

这是一种方法。

Intro. screen

但当然,这只是根据您自己的代码/规范破解的版本。为了更好地实现相同的想法,请参阅此 Background Panel .

import java.awt.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
import javax.swing.border.EmptyBorder;

import java.net.URL;
import javax.imageio.ImageIO;

public class Intro extends JPanel implements Runnable {
private static final long serialVersionUID = 1L;
private Thread thread;
private BufferedImage bg;
private String html =
"<html><body style='color: yellow;'>" +
"<h1>Game</h1>" +
"<p>Welcome to the Game!";

public Intro() {
super();
loadImages();
setLayout(new BorderLayout());
setBorder(new EmptyBorder(40,40,40,40));
add(new JLabel(html), BorderLayout.NORTH);
add(new JTextField("..enter name"), BorderLayout.SOUTH);
}

private void loadImages() {
try {
URL url = new URL("http://pscode.org/media/stromlo2.jpg");
bg = ImageIO.read(url);
setPreferredSize(new Dimension(bg.getWidth(), bg.getHeight()));
} catch (Exception e) {
e.printStackTrace();
}
}

public void addNotify() {
super.addNotify();
thread = new Thread(this);
thread.start();
}

public void run() {
while(true) {
repaint();
}
}

public void paintComponent(Graphics g) {
super.paintComponent(g);

Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

g.drawImage(bg, 0, 0, this);
}

public static void main(String[] args) {
JOptionPane.showMessageDialog(null, new Intro());
}
}

关于java - 如何将 JLabel 和 JTextField 放在图像之上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8556626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com