2016-12-25 8 views
-1

Как переопределить метод paintComponent с ответом на изменение состояния? Сообщение об ошибке: Пустота недопустимого типа для переменной paintComponentВызов @Override на paintComponent() при изменении состояния

public class MyContainer extends Container { 
public void paintComponent(Graphics m){ 
    m.drawArc(100,100,100,100,100,100); 
    m.setColor(Color.green); 
    m.fillArc(100,100,100,100,100,100); 
} 
public static void main(String[] args){ 
Container y = new Container(); 
JFrame x = new JFrame(); 
JPanel gg = new JPanel(); 

x.add(y); 
x.setTitle("   Shape Changer"); 
x.setBounds(100,50,500,300); 
x.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
x.getContentPane().add(new ContentPanel()); 
x.getContentPane().add(new ContnetPanel()); 
x.setContentPane(new ContnetPanel()); 
x.setVisible(true); 
} 

static class ContentPanel extends JPanel{ 

private Graphics g; 
private JPanel ss; 
public void paint(Graphics g){ 
g.drawArc(100,100,100,100,100,100); 
g.fillRect(100, 100,100,100); 
} 
public ContentPanel(){ 

} 
} 
static class ContnetPanel extends JPanel implements ActionListener, ChangeListener{ 
    JComboBox comboerbox; 
    class appres { 
    public void paint(Graphics h){ 
     h.drawRect(100,100,100,100); 
     h.setColor(Color.red); 
     h.fillRect(100,100,100,100); 

    } 


    } 
public ContnetPanel(){ 
comboerbox = new JComboBox(); 
comboerbox.addItem("Red Square"); 
comboerbox.addItem("Blue Square"); 
comboerbox.addItem("Green Square"); 
comboerbox.setSelectedIndex(1); 
add(comboerbox); 
setLayout(new GridLayout(2,1)); 
} 

@Override 
protected void paintComponent(Graphics h){ 
super.paintComponent(h); 
h.drawArc(100,100,100,100,100,100); 
h.setColor(Color.blue); 
h.fillArc(100,100,100,100,100,100); 
repaint(); 
} 
int yy = 0; 
public void actionPerformed(ActionEvent evt){ 
switch(comboerbox.getSelectedIndex()){ 
case 0:yy=0; 

case 1: yy=1; 
case 2: yy=2; 
} 

} 
//evt.getSource()==comboerbox 
public void stateChanged(ChangeEvent evt){ 

    if(evt.getSource()==comboerbox){ 
    @Override 
    protected void paintComponent(Graphics h){ 
     super.paintComponent(h); 
     h.drawArc(100,100,100,100,100,100); 
     h.setColor(Color.blue); 
     h.fillArc(100,100,100,100,100,100); 
     repaint(); 
    } 
    } 

    else 
    { 
     System.out.println("DONE"); 
    } 

} 
} 
} 

Конечно, метод paintComponent не является переменным. Как я могу переопределить paintComponent здесь? Или это лучший способ изменить форму с ответом на изменение состояния? Это было бы здорово! Спасибо, ребята!

ответ

1

В вашем последнем вопросе: How do I make the superclass go beyond just the content pane? вам была предоставлена ​​ссылка на учебник Swing для некоторых оснований Swing.

Хорошо, есть также раздел на Custom Painting для ознакомления. Затем вы можете загрузить пример и поиграть с ним, чтобы понять, как работает живопись.

В основном класс Container не имеет метода paintComponent(), поэтому вы не должны пытаться выполнять обычную покраску в этом классе.

Если вы хотите изменить свойство рисования, вам нужно добавить метод в свой класс, чтобы изменить состояние свойства, а затем вызвать repaint() для себя.

Итак, из примера учебника на шаге 3 вы можете увидеть, как метод moveSquare(...) изменяет состояние класса, а затем вызывает repaint().

Обратите внимание, что никогда не следует ссылаться на метод repaint() в методе paintComponent(), поскольку это приведет к постоянной перестановке картины.