绘制时JFrame边框弄乱了坐标

时间:2012-01-31 07:35:10

标签: java swing jframe jcomponent graphic

嗨,我有一个小问题。我有一个JFrame,其中JComponent用于显示图形。

组件的首选大小为800x600,我创建JFrameJComponent就像这样(GC是组件):

public static void main(String[] args) {

  mainframe = new JFrame();
  mainframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  mainframe.add(GC);
  mainframe.pack();
  mainframe.setResizable(false);
  mainframe.setVisible(true);

}

然后我画这样的图形:

public void paintComponent(final Graphics g)
{
    //temp bg
    g.setColor(Color.red);
    g.fillRect(Global.leftborder, 0, 600, 600);

            //code code.....
    }

问题是即使它在组件的按钮上留下了10像素的白色 该组件的高度为600像素。我意识到这是因为(0,0)位于整个窗口的左上角而不是组件上。

有没有办法解决这个问题而不必每次画一些东西时都要在高度和宽度上添加10个像素?

1 个答案:

答案 0 :(得分:3)

您应该覆盖组件paintComponent方法而不是框架。这样翻译应该已经正确。


完整示例:

public class Test {
    public static void main(String[] args) {

        JFrame frame = new JFrame("Test");

        frame.add(new TestComponent());

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }

    static class TestComponent extends JComponent {
        @Override
        public Dimension getPreferredSize() {
            return new Dimension(800, 600);
        }

        @Override
        protected void paintComponent(Graphics g) {
            g.setColor(Color.red);
            g.fillRect(10, 0, 600, 600);
        }
    }
}