0

何をしても、画面に長方形/線/楕円を表示できません。グラフィックをペイントしている他のソースを確認しましたが、それらのコードを実行しても、ウィンドウにグラフィックが表示されません。以下は教科書の例です。

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

class PlotGraph
{
   public static void main (String [] args) {
    JFrame win;
    Container contentPane;
    Graphics g;

    win = new JFrame("testing");
    win.setSize(300,200);
    win.setLocation(100,100);
    win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    win.setVisible(true);

    contentPane = win.getContentPane();
    g = contentPane.getGraphics();

    g.drawRect(10, 30, 50, 50); 

   }

}
4

2 に答える 2

3

痛い。その後、教科書を変更する必要があります。まず、Swingコンポーネントへのすべてのアクセスは、イベントディスパッチスレッドで実行する必要があります。

次に、コンポーネントのグラフィックを取得してペイントしないでください。代わりに、JComponentまたはJPanelを拡張し、そのpaintComponent(Graphics)メソッドをオーバーライドし、引数として渡されたGraphicsオブジェクト(実際にはGraphics2Dインスタンス)を使用してペイントする必要があります。

于 2013-03-12T23:25:59.157 に答える
1

これは、Swingでのグラフィックスの動作方法ではありません。

フレームに描画するだけでなく、フレームにコンポーネントを追加する必要があります。フレームに直接描画したくはありません。何も実行されない理由は、描画コードがオーバーライドされているためです。

コンポーネントにカスタム描画コードを持たせたい場合は、メソッドのサブクラスを作成しJComponentてオーバーライドしますpaintComponent(Graphics)これを行う方法の例は次のとおりです。

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

class PlotGraph {
    public static void main(String[] args) {
        JFrame win;

        win = new JFrame("testing");
        win.setSize(300, 200);
        win.setLocation(100, 100);
        win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        win.setVisible(true);
        win.setContentPane(new MyComponent());
    }

}

class MyComponent extends JComponent {

    @Override
    public void paintComponent(Graphics g) {
        g.drawRect(10, 30, 50, 50);
    }
}

オンラインでJavaGUIチュートリアルを確認することを強くお勧めします。

于 2013-03-12T23:29:50.353 に答える