如何使用内容窗格左上角的默认x和y值创建一个Rectangle,而不是屏幕

时间:2013-12-09 21:48:02

标签: java awt

我在游戏中添加了一个功能,它会截取屏幕截图并将其保存到新图像中。我对文件路径或任何类似的东西没有任何问题,而是通过其截取屏幕截图的Rectangle。如果我制作一个新的Rectangle,就像这样:

new Rectangle(0, 0, 500, 500);

然后它会在计算机屏幕的左上角创建一个500 x 500 Rectangle不在内容窗格的左上角。我所指的内容窗格比屏幕小得多,位于中心。感谢阅读,任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

对于任何组件(可以是JPanelContainerWindow或基本上任何组件),您都可以使用它来获取代表其的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);
}
}