1

誰かが以下の私のコードを見て、次の2つのステートメントを変更しても、ペイントされている長方形に変更が表示されない理由を教えてもらえますか?だから私が変更した場合:

g.setColor(Color.black); 
g.fillRect(l, w, 100, 100);

プログラムは、色を黄色に変更したり、寸法や場所を変更しようとしても、最初に開始したときと同じ寸法で同じ位置に黒い長方形を印刷します。私はBlueJです。以下は私の完全なコードです:

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

public class SwingPaintDemo2 extends JComponent {

public static boolean isWall = true;

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createAndShowGUI(); 
        }
    });
}


private static void createAndShowGUI() {
    //System.out.println("Created GUI on EDT? "+
    //SwingUtilities.isEventDispatchThread());
    JFrame f = new JFrame("Swing Paint Demo");
    JPanel MyPanel = new JPanel();
     MyPanel.setBorder(BorderFactory.createEmptyBorder(1000, 1000, 1000, 1000));
     MyPanel.setPreferredSize(new Dimension(250, 200));
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.add(new MyPanel());
    f.pack();
    f.setVisible(true);

}


public void paintComponent(Graphics g) {
    super.paintComponent(g); 
    int l = 10;
    int w = 10;

  g.setColor(Color.black); 
  g.fillRect(l, w, 100, 100);

        }

}

何かアドバイスをいただければ幸いです。

4

1 に答える 1

5

あなたのSSCCEはMyPanelクラスがどこにあるのかコンパイルしませんか、それともあなたは意味しましたnew SwingPaintDemo2()か?

あなたが意味した仮定でnew SwingPaintDemo2()

コードは問題なく機能しますが、JFrameサイズは非常に小さいです。

ここに画像の説明を入力してください

サイズを指定せず、コンポーネントが追加されていないため、どのコンポーネントにもサイズがないため、JComponentpack()を呼び出すときに正しいサイズが返されるように、正しいサイズを返すJFrame必要があります。

解決

すべての図面に適合する幅と高さを返すためのgetPreferredSize()オーバーライド。JComponent

ただし、いくつかの提案:

  • 伸ばすのJComponentではなく伸ばすJPanel

次に例を示します(上記の修正が実装されたコード):

ここに画像の説明を入力してください

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

public class SwingPaintDemo2 extends JPanel {

    public static boolean isWall = true;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }

    private static void createAndShowGUI() {
        //System.out.println("Created GUI on EDT? "+
        //SwingUtilities.isEventDispatchThread());
        JFrame f = new JFrame("Swing Paint Demo");
        JPanel MyPanel = new JPanel();
        MyPanel.setBorder(BorderFactory.createEmptyBorder(1000, 1000, 1000, 1000));
        MyPanel.setPreferredSize(new Dimension(250, 200));
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(new SwingPaintDemo2());
        f.pack();
        f.setVisible(true);

    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        int l = 10;
        int w = 10;

        g.setColor(Color.black);
        g.fillRect(l, w, 100, 100);

    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(150, 150);
    }
}
于 2012-12-11T18:58:19.533 に答える