0

JPanel を拡張し、L のように見える新しいクラス LShapePanel を定義しました。

import javax.swing.JPanel;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;

public class LShapePanel extends JPanel{

    public Color color;

    public LShapePanel(Color color) {
        this.color = color;
    }

    @Override
    public void paintComponent(Graphics g) {

        super.paintComponent(g);

        Graphics2D g2d = (Graphics2D) g;

        g2d.setColor(color);

        /* coordinates for polygon  */
        int[] xPoints = {0,100,100,20,20,0};
        int[] yPoints = {0,0,20,20,100,100};

        /* draw polygon */
        g2d.fillPolygon(xPoints, yPoints, 6);
    }
}

これらの LShapePanels の 2 つを次のように配置したいと思います。

ここに画像の説明を入力

でも方法がわからない?これは、2 つの LShapePanels を連続して配置するための私のコードです。

import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.JPanel;

import java.awt.Color;
import java.awt.Dimension;

public class DifferentShapes extends JFrame {

    public DifferentShapes() {

        setTitle("different shapes");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocation(500, 300);

        JPanel panel = new JPanel();

        /* create and add first L in red */
        LShapePanel lsp1 = new LShapePanel(new Color(255,0,0));
        lsp1.setPreferredSize(new Dimension(100,100));
        panel.add(lsp1);

        /* create and add second L in green*/
        LShapePanel lsp2 = new LShapePanel(new Color(0,255,0));
        lsp2.setPreferredSize(new Dimension(100,100));
        panel.add(lsp2);

        add(panel);

        pack();

    }

    public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                DifferentShapes df = new DifferentShapes();
                df.setVisible(true);
            }
        });
    }
}

そして結果:

ここに画像の説明を入力

4

2 に答える 2

1

layout managerコンポーネントを JFrame に配置するには、を使用する必要があります。このturorialによると、実際に に配置したコンポーネントを含むコンテンツ ペインは、デフォルトJFrameで を使用Borderlayoutします。見た目は「L」字型LShapePanelですが、実際には長方形(スイングのすべてのコンポーネントは実際には長方形です)の一部を移植しています。したがって、パネルを好きなように配置したい場合は、それらを互いに重ねる必要があります。レイアウト マネージャーの種類が異なれば、異なるレイアウト ストラテジが使用Borderlayoutされ、コンポーネントのオーバーラップが許可されないため、別のレイアウト マネージャーに変更する必要があります。コンポーネントのオーバーラップを許可するレイアウト マネージャーを知りませんが、JLayeredPane目標を達成するために使用できます。JLayeredPaneに aを追加します。JFrameを に追加LShapePanelsJLayeredPaneます。

于 2013-08-03T10:49:04.917 に答える
0

setLocation申し訳ありませんが、レイアウトマネージャーの愛好家ですが、レイアウトマネージャーを使用する以外に方法は考えられませんnull。ここにデモンストレーションがあります:

setLayout(null);
LShapePanel lsp1 = new LShapePanel(new Color(255,0,0));
lsp1.setPreferredSize(new Dimension(100,100));
lsp1.setLocation(0,0);
add(lsp1);

LShapePanel lsp2 = new LShapePanel(new Color(0,255,0));
lsp2.setPreferredSize(new Dimension(100,100));
lsp2.setLocation(30,30);
add(lsp2);
于 2013-08-03T10:40:42.203 に答える