Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > как о4истить фрайм от g


Автор: kostay 19.12.2007, 02:33
Код

public class ViewPort extends JFrame{ 
    private Unit unit;
    
    public ViewPort() {
        super("TestFrame");
        setSize(500, 400);
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frameSize = getSize();
        setLocation((screenSize.width - frameSize.width) / 2,
                    (screenSize.height - frameSize.height) / 2);
        validate();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public void updateViewPort(){
        removeAll();
        repaint();
        validate();
    }
    
    public void addUnit(Unit unit){
        this.unit = unit;
    }

    
    public void paint(Graphics g){
        Graphics2D g2 = (Graphics2D) g;
        g2.drawOval(unit.getPositionX(), unit.getPositionY(), 10, 10); 
    }
}


в листенере вызывается updateViewPort(), он делает репаинт но старый unit остаётся прорисованным мне надо 4тобы всё о4ишалось и рисовался новый

Автор: garm 19.12.2007, 07:41
А где происходит смена старого юнита на новый? То есть где вызывается addUnit()?

И просто совет - вместо этого:
Код

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = getSize();
setLocation((screenSize.width - frameSize.width) / 2,
             (screenSize.height - frameSize.height) / 2);

можно писать:
Код

setLocationRelativeTo(null);

с тем же эффектом.

Автор: hamsterKSU 19.12.2007, 10:27
ну если ты сам все рисуешь то заливай Graphics сам. сделай ему fillRect каким надо цветом и все

Автор: kostay 19.12.2007, 13:15
Цитата(garm @ 19.12.2007,  07:41)
А где происходит смена старого юнита на новый? То есть где вызывается addUnit()?

И просто совет - вместо этого:
Код

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = getSize();
setLocation((screenSize.width - frameSize.width) / 2,
             (screenSize.height - frameSize.height) / 2);

можно писать:
Код

setLocationRelativeTo(null);

с тем же эффектом.

какраз так делать не стоит один раз у меня были проблемы с прорисовкой изза етого теперь дименсион юзаю

а смена юнита в томже листенере, потом перерисовку вызываю из него же.
ну ладно буду заливать область какимнить фоном как сказал хамстер

Автор: garm 19.12.2007, 17:27
Цитата(kostay @  19.12.2007,  16:15 Найти цитируемый пост)
какраз так делать не стоит один раз у меня были проблемы с прорисовкой изза етого теперь дименсион юзаю

Вообще-то проблем с прорисовкой там быть не должно. Впрочем, может мне пока просто везло.
Цитата(kostay @  19.12.2007,  16:15 Найти цитируемый пост)
а смена юнита в томже листенере, потом перерисовку вызываю из него же.ну ладно буду заливать область какимнить фоном как сказал хамстер

Я почти не сомневаюсь, что такой метод будет работать, но он является не совсем идейно правильным, и может принести несколько неприятных проблем в будущем. Дело в том, что метод paint() отвечает не только за отображение самого компонента, но и за отрисовку рамки и содержащихся в нём компонентов.
В общем, рекомендуемым методом для переопределения является paintComponent(). А если в самом начале переоределённого метода вызвать super.paintComponent(), то - для JPanel - он самостоятельно зальёт себя цветом фона. Если, конечно, включена непрозрачность.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)