我在游戏中添加了一个功能,它会截取屏幕截图并将其保存到新图像中。我对文件路径或任何类似的东西没有任何问题,而是通过其截取屏幕截图的Rectangle
。如果我制作一个新的Rectangle
,就像这样:
new Rectangle(0, 0, 500, 500);
然后它会在计算机屏幕的左上角创建一个500 x 500 Rectangle
,不在内容窗格的左上角。我所指的内容窗格比屏幕小得多,位于中心。感谢阅读,任何帮助将不胜感激。
答案 0 :(得分:0)
对于任何组件(可以是JPanel
,Container
,Window
或基本上任何组件),您都可以使用它来获取代表其的Rectangle
屏幕上的界限:
Rectangle getBoundsOnScreen( Component component ) {
Point topLeft = component.getLocationOnScreen();
Dimension size = component.getSize();
return new Rectangle( topLeft, size );
}
因此,如果您只想要JFrame
的内容窗格:
getBoundsOnScreen( frame.getContentPane() );
对于整个JFrame
之类的内容,你可以这样做:
frame.getBounds();
答案 1 :(得分:0)
请看下面的例子。我首先创建一个RectangleComponent类,它扩展了Rectangle类:
import javax.swing.*;
import java.awt.*;
public class RectangleComponent extends JComponent
{
Rectangle rectangle;
public RectangleComponent(int xspace,int yspace, int width, int height)
{
rectangle = new Rectangle(xspace, yspace, width, height);
}
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
g2.draw(rectangle);
}
}
现在我们创建一个生成主窗口的类,在其中添加Rectangle组件:
import javax.swing.*;
import java.awt.*;
public class CustomComponent extends JFrame {
private static final long serialVersionUID = 1L;
public CustomComponent() {
}
public static void main(String[] args) {
JFrame frame = new JFrame("Java Rulez");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(100,100,600,600);
frame.getContentPane().setBackground(Color.YELLOW);
frame.add(new RectangleComponent(0, 0, 500, 500));
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}