Компонент в JPanel в JFrame - PullRequest
       80

Компонент в JPanel в JFrame

1 голос
/ 08 марта 2011

Я сделал свой собственный Компонент, назвал его '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

Ответы [ 2 ]

1 голос
/ 08 марта 2011

Попробуйте этот код:

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();
    }
}
1 голос
/ 08 марта 2011

Ваш компонент, вероятно, не имеет предпочтительного размера .Из-за этого это проявляется с нулевой шириной и высотой.Вы должны по крайней мере реализовать метод getPreferredSize , чтобы вернуть соответствующий предпочтительный размер.

...