9

Graphics2Dを使用して線を描画しようとしていますが、線が の他のすべてのコンポーネントの上に表示されるJFrameため、それらが見えなくなります。この問題を修正するにはどうすればよいですか?

コードは次のとおりです。

import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;

class Success extends JFrame{

    public Success(){
        JPanel panel=new JPanel();
        getContentPane().add(panel);
        setSize(450,450);

        JButton button =new JButton("press");
        panel.add(button);
    }

    public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        Line2D lin = new Line2D.Float(100, 100, 250, 260);
        g2.draw(lin);
    }

    public static void main(String []args){
        Success s=new Success();
        s.setVisible(true);
    }
}
4

1 に答える 1

10
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;

class Success extends JFrame{

    public Success(){
        JPanel panel=new JPanel();
        getContentPane().add(panel);
        setSize(450,450);

        JButton button =new JButton("press");
        panel.add(button);
    }

    public void paint(Graphics g) {
        super.paint(g);  // fixes the immediate problem.
        Graphics2D g2 = (Graphics2D) g;
        Line2D lin = new Line2D.Float(100, 100, 250, 260);
        g2.draw(lin);
    }

    public static void main(String []args){
        Success s=new Success();
        s.setVisible(true);
    }
}

さらなるヒント

  1. EDT で GUI を作成します。詳細については、Swingでの同時実行を参照してください。
  2. JPanel@nIcEcOw の提案に従って a を使用し、代わりにオーバーライドしpaintComponent(Graphics)ますpaint()。繰り返しますが、super最初にメソッドを呼び出します。
  3. フレームを拡張しないでください。フレームのインスタンスを使用してください。を使用して、コンポーネントに必要なスペースに応じてサイズを設定しますpack()
于 2012-05-26T15:35:07.383 に答える