Граница JFrame портит координаты при рисовании - PullRequest
2 голосов
/ 31 января 2012

Привет, у меня небольшая проблема.У меня есть JFrame с JComponent, который я использую для отображения графики.

Предпочтительный размер компонента составляет 800x600, и я создаю JFrame с таким JComponent (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 Ответ

3 голосов
/ 31 января 2012

Вы должны переопределить метод компонентов 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);
        }
    }
}
...