2010-03-23 37 views
0

我想要做一个JPanel一些图纸,但封闭的JFrame大小似乎并不匹配,我问过要绘制的坐标。为什么我的坐标不符合我的JFrame大小?

在我的示例代码中,JFrame大小设置为(700,700),最后一点绘制在(600,600)。我希望这一点可以从右边缘和底部边缘抽取100个像素,但不是(请参阅屏幕截图)。

alt text

下面是我使用的代码:

import java.awt.Graphics; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class Scratch extends JPanel { 

    static int frameWidth = 700; 
    static int frameHeight = 700; 

    public static void main(String[] args) { 

    JFrame frame = new JFrame(); 

    frame.setSize(frameWidth, frameHeight); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    Scratch scratch = new Scratch(); 

    frame.getContentPane().add(scratch); 

    frame.setVisible(true); 

    } 

    @Override 
    public void paintComponent(Graphics g) { 

    g.drawRect(100, 100, 1, 1); 

    g.drawString("100", 100, 100); 

    g.drawRect(200, 200, 1, 1); 

    g.drawString("200", 200, 200); 

    g.drawRect(300, 300, 1, 1); 

    g.drawString("300", 300, 300); 

    g.drawRect(400, 400, 1, 1); 

    g.drawString("400", 400, 400); 

    g.drawRect(500, 500, 1, 1); 

    g.drawString("500", 500, 500); 

    g.drawRect(600, 600, 1, 1); 

    g.drawString("600", 600, 600); 


    } 

} 

回答

2

只是一种猜测:

public class Scratch extends JPanel { 

    static int frameWidth = 700; 
    static int frameHeight = 700; 

    public static void main(String[] args) { 

    JFrame frame = new JFrame(); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    Scratch scratch = new Scratch(); 
    scratch.setSize(frameWidth, frameHeight); 

    frame.getContentPane().add(scratch); 

    frame.pack(); 
    frame.setVisible(true); 

    } 
+0

谢谢,我不知道关于pack方法。为了使它工作,你必须设置scratchSize为scratch,但几乎你所说的。 – 2010-03-23 12:17:45

+0

我认为,关键是不仅包,但设置划痕/面板的大小在框架代替。 – extraneon 2010-03-23 12:24:59

3

你的JFrame可能是700x700如果包括窗口装饰。由于您的paintComponent()方法属于您的JFrame中的面板,因此所有项目都将以面板左上角的原点绘制,而不是JFrame的左上角。

可能的解决方法是让面板700x700并使JFrame相应地调整大小。

+0

烨,包括标题栏架是我的Mac上正好700像素。 – extraneon 2010-03-23 12:23:39

相关问题