1

我制作了自己的组件,将其命名为“hi”并将其放入 JPanel 中,然后将该 JPanel 放入 JFrame 中,但没有任何显示。我在 JPanel 周围做了一个边框,以查看 JPanel 是否甚至在 JFrame 上,果然,它在那里,但我的组件(顺便画了弧线)不在 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

试试这个代码:

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 回答
1

您的组件可能没有设置首选尺寸。因此,它的宽度和高度为零。您必须至少实现getPreferredSize方法以返回适当的首选大小。

于 2011-03-08T01:44:07.373 回答