2

4つのJPanelを作成し、それぞれに白い長方形を描き、1つの大きなJPanelの中​​に入れます。ビッグJPanelはメインフレームの内側にあります。

ただし、次のコードは機能しません。この問題を解決する方法を教えてください。

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

import java.io.*;
import java.net.*;

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Rectangle2D;
import java.io.IOException;

public class Main extends JFrame
{

public void GUI () {
    setBounds(0, 0, 480, 960);
    addWindowListener(new WindowAdapter(){
        public void windowClosing(WindowEvent we){

            System.exit(0);
            }
        });
        setMinimumSize(new Dimension(480, 960));
        setResizable(false);

        JPanel mainPanel = new JPanel();
        GridLayout GL = new GridLayout(4,0);
        mainPanel.setLayout(GL);

    JPanel panel1 = new MyCanvas();
    JPanel panel2 = new MyCanvas();
    JPanel panel3 = new MyCanvas();
    JPanel panel4 = new MyCanvas();

    mainPanel.add(panel1);
    mainPanel.add(panel2);
    mainPanel.add(panel3);
    mainPanel.add(panel4);

    add(mainPanel);

    setVisible(true);
}

public static void main(String args[]) throws IOException
{
    new Main().GUI();
}

class MyCanvas extends JPanel {

    public void drawCanvas(Graphics g) {

        super.paintComponent( g ); // call superclass's paintComponent  

        Graphics2D g2 = ( Graphics2D ) g; // cast g to Graphics2D  

        g2.setColor(Color.WHITE);

        double x = 100;
        double y = 100;
        double width = x + 200;
        double height = y + 50;

        g2.fillRect(50, 50, 380, 200);
    }
    }
}
4

1 に答える 1

4

これは何をすることになっていますか?:

public void drawCanvas(Graphics g) {
  ....
}

このメソッドはJPanel描画メソッドをオーバーライドしないため、JVMがMyCanvasJPanelをペイントすることを決定したときに定期的に呼び出されることはありません。

paintComponent(...)代わりに、メソッドの名前をに変更するだけで簡単に実行できるクラスのメソッドをオーバーライドしたいと思いますpaintComponent(...)@Overrideこれを行う場合は、アノテーションを使用して、正しいシグネチャでメソッドをオーバーライドしていることを確認することを忘れないでください。また、メソッドのアクセス指定子をprotectedではなく、に変更することもできますpublic

次に、作成しているこれらの二重変数を使用して何かを実行する必要があります。

于 2012-09-20T22:26:28.100 に答える