2014-09-28 2 views
0

Так что у меня этот код:Как перекрасить/вызвать снова paintComponent?

public class myPanel extends JPanel implements ActionListener{ 
    int x = 0; 
    JButton myButton = new JButton("Click me"); 

    public myPanel(){ 
    super().setLayout(null); 
    myButton.setBounds(50,50,50,50); 
    super().add(myButton); 
    } 

    public void paintComponent(Graphics g){ 
    super.paintComponent(g); 
    if(x==1) 
    g.drawString("hi",10,10); 
    } 

    public void actionPerformed(ActionEvent e){ 
     if(e.getSource()==myButton){ 
     x=1; 
     //Do something here 
     } 
    } 
} 

Как позвонить еще раз paintComponent? Скажем, когда я нажимаю кнопку, он снова вызывает paintComponent и рисует строку «Hi», после проверки того, является ли целое число x равным единице? Заранее спасибо!!! Все еще очень новый для Java здесь, так что вы, ребята, объясните это, как и вы, до 10 лет?

+0

как насчет переименование()? – maskacovnik

ответ

2

Вы можете позвонить по номеру repaint() после любого изменения состояния, которое должно изменить вид графического интерфейса пользователя. Например, если кнопка изменяет переменную, и если это нужно отразить в изменении вида, вызовите repaint() в ActionListener кнопки. Если перетаскивание мышью изменяет представление спрайта ImageIcon, вы вызываете перерисовку в методе mouseDragged MouseMotionListener. Если таймер Swing запускает анимацию, вы можете вызвать repaint() с помощью ActionListener Swing Timer.

Одна вещь, которую вы никогда не хотите делать, - это позвонить repaint() с помощью метода paint(Graphics g) или paintComponent(Graphics g), так как это приведет к циклу, который полностью вышел из-под контроля.

На стороне примечания, в общем, вы захотите избежать использования пустых макетов и setBounds, поскольку это делает для очень негибкого графического интерфейса, что, хотя они могут хорошо выглядеть на одной платформе, выглядят ужасно на большинстве других платформ или разрешениях экрана, и это очень трудно обновлять и поддерживать.

4

Позвоните repaint(), он будет красить его снова.

Смежные вопросы