如何使用Java中的画布根据屏幕的宽度和高度绘制字符串或矩形
我想知道如何绘制字符串或矩形(JFrame完全处于全屏状态) 下面是我的Main.java类中的内容:如何使用Java中的画布根据屏幕的宽度和高度绘制字符串或矩形,java,swing,awt,2d,java-canvas,Java,Swing,Awt,2d,Java Canvas,我想知道如何绘制字符串或矩形(JFrame完全处于全屏状态) 下面是我的Main.java类中的内容: public static int WIDTH, HEIGHT; private Window window; ... public Main() { window = new Window("2D Shooter", this); ... private void render(){ BufferStrategy bs = this.getBufferStrategy
public static int WIDTH, HEIGHT;
private Window window;
...
public Main() {
window = new Window("2D Shooter", this);
...
private void render(){
BufferStrategy bs = this.getBufferStrategy();
if(bs == null){
this.createBufferStrategy(3);
return;
}
Graphics g = bs.getDrawGraphics();
g.setColor(Color.BLACK);
g.fillRect(0, 0, WIDTH, HEIGHT);
handler.render(g);//this calls the render method to render objects
g.dispose();
bs.show();
}
后来在另一门课上,我有:
public void render(Graphics g){
...
g.setColor(Color.WHITE);
g.drawString("2D Shooter", ((Main.WIDTH)/2), (Main.HEIGHT/5));
...
}
<>这个代码工作和运行,但是文本不是完全居中的,我希望它在顶部而不是中间。谢谢大家! 使用图形上下文的
.stringWidth会做什么,因为我得到了一个错误;如果你仍然有问题,根据上面的例子用a编辑你的问题。啊,我明白了。另一个问题是,我该如何处理矩形或精灵?@GustavoMuratalla:你可以用类似的方式使用矩形的尺寸;如果您就此提出新问题,请根据需要引用或使用此示例。
String s = "2D Shooter";
int w2 = g.getFontMetrics().stringWidth(s) / 2;
int h2 = g.getFontMetrics().getHeight();
g.drawString(s, getWidth() / 2 - w2, h2);
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* @see http://stackoverflow.com/a/37150783/230513
*/
public class Test {
private void display() {
JFrame f = new JFrame("Test");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setFont(getFont().deriveFont(Font.BOLD, 24f));
String s = "2D Shooter";
int w2 = g.getFontMetrics().stringWidth(s) / 2;
int h2 = g.getFontMetrics().getHeight();
g.drawString(s, getWidth() / 2 - w2, h2);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(320, 240);
}
});
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Test()::display);
}
}