1

独自のコンポーネントを作成し、「hi」という名前を付けてJPanelに入れ、そのJPanelをJFrameに入れましたが、何も表示されません。JPanelがJFrame上にあるかどうかを確認するために、JPanelの周囲に境界線を作成しました。確かに、そこにありますが、コンポーネント(ちなみに円弧を描く)はJPanel上にありません。

    JFrame frame = new JFrame();
    JPanel panel = new JPanel();


    final int FRAME_WIDTH  = 400;
    final int FRAME_HEIGHT = 400;

    testComponent hi = new testComponent();
    panel.add(hi);
    frame.add(panel);
    panel.setBorder(BorderFactory.createLineBorder(Color.red));        



    frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);

それは私がメインに持っているものであり、それは基本的に私のテストクラスで唯一のものです。testComponent()には、描画するpaintComponent()があります。

およびコンポーネント

public void paintComponent(Graphics g){
    Graphics2D g2 = (Graphics2D) g;
    g2.draw(new Arc2D.Double(100,100,100,100,0,30,Arc2D.PIE));
    g2.fill(new Arc2D.Double(100,100,100,100,30,330,Arc2D.PIE));
}

JButton、JTextFieldなどのようなものに注意してください。これらはJPanelでダンディに機能します

4

2 に答える 2

1

コンポーネントに優先サイズが設定されていない可能性があります。そのため、幅と高さがゼロで表示されます。適切な優先サイズを返すには、少なくともgetPreferredSizeメソッドを実装する必要があります。

于 2011-03-08T01:44:07.373 に答える
1

このコードを試してください:

import javax.swing.*;
import java.awt.geom.*;
import java.awt.*;
public class PaintComponent extends JPanel
{
    public PaintComponent()
    {
        setPreferredSize(new Dimension(400,400));
    }
    public void paintComponent(Graphics g)
    {
        Graphics2D g2d = (Graphics2D)g;
        g2d.draw(new Arc2D.Double(100,100,100,100,0,30,Arc2D.PIE));
        g2d.fill(new Arc2D.Double(100,100,100,100,30,330,Arc2D.PIE));
    }
}

================================================== ============================

import javax.swing.*;
import java.awt.*;
public class MainClass
{
    public static void main(String[] args)
    {
        JFrame frame = new JFrame();
        JPanel panel = new JPanel();
        final int FRAME_WIDTH  = 400;
        final int FRAME_HEIGHT = 400;
        PaintComponent hi = new PaintComponent();
        panel.add(hi);
        frame.add(panel);
        panel.setBorder(BorderFactory.createLineBorder(Color.red));
        frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.pack();
    }
}
于 2011-03-08T01:52:04.423 に答える