2015-03-17 2 views
-1

Я пытаюсь нарисовать фигуры в JPanel, расширяя JComponent, а затем помещая компонент внутри но это не сработает. У меня есть JFrame (500, 500), и мне нужна правильная половина этого, чтобы внутри было что-то утопить. Я явно делаю что-то неправильно! Это код, который я использовал:Я пытаюсь нарисовать фигуры в JPanel, расширяя JComponent, а затем помещая компонент внутри панели, но он не будет работать

public class Componente extends JComponent{ 
    public void paint(Graphics g){ 
     Graphics2D g2 = (Graphics2D)g; 
     g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 

     Shape linea = new Rectangle2D.Float(50, 50, 50, 50); 
     Shape cerchio = new Ellipse2D.Double(100, 100, 50, 50); 


     g2.setPaint(Color.BLUE); 

     g2.draw(linea); 
     g2.draw(cerchio); 
    } 
} 


    public class PannelloDx extends JPanel{ 
    PannelloDx(){ 
     this.setBackground(Color.CYAN); 
     this.setSize(Esercitazione_Berni1703.finestra.getWidth()/2, Esercitazione_Berni1703.finestra.getHeight()); 
     this.setLocation(Esercitazione_Berni1703.finestra.getWidth()/2, 0); 
     this.add(new Componente()); 
    } 
} 

Теперь выход показывает панель Cyan в JFrame в правой половине, как это предполагается. Он ничего не покажет!

+1

Начните отвечать или принимать ответы в более старых вопросах, прежде чем задавать новые вопросы. – camickr

ответ

1

По умолчанию JPanel использует FlowLayout, а FlowLayout соответствует размеру добавленного к нему компонента. У вашего пользовательского компонента есть предпочтительный размер (0, 0), поэтому рисовать нечего.

Чтобы вернуть нужный размер, вам необходимо переопределить метод вашей настраиваемой панели getPreferredSize().

Для получения дополнительной информации и примеров ознакомьтесь с разделом из учебника Swing по телефону Custom Painting. Ознакомьтесь с остальной частью учебника по основам Swing.