2016-12-25 23 views
-1

状態変更に対するpaintComponentメソッドをオーバーライドするにはどうすればよいですか? エラーメッセージ:ボイドはもちろん状態が変更されたときにpaintComponent()で@Overrideを呼び出す

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メソッドは、変数ではありません。ここでpaintComponentをどのようにオーバーライドしますか?または、状態の変化に応じて形状を変更するより良い方法ですか?それも素晴らしいだろう! おかげさまで、ありがとうございました!

答えて

1

最後の質問では、How do I make the superclass go beyond just the content pane?には、いくつかのSwingの基本についてのSwingチュートリアルへのリンクがありました。

また、Custom Paintingのセクションもあります。その後、サンプルをダウンロードしてそれを使って絵画の仕組みを理解することができます。

基本的に、ContainerクラスにはpaintComponent()メソッドがありません。したがって、そのクラスでカスタムペイントを行うべきではありません。

ペイントプロパティを変更したい場合は、クラスにメソッドを追加してプロパティの状態を変更し、repaint()をそれ自身で呼び出す必要があります。

手順3のチュートリアルの例では、moveSquare(...)メソッドがクラスの状態を変更してrepaint()を呼び出す方法を確認できます。

paintComponent()メソッドでrepaint()を呼び出さないでください。これは、ペイントを継続的に再スケジューリングするためです。

関連する問題