2013-10-24 45 views
2

我真的很困惑,我试着将椭圆形设置在红色的JPanel内,而椭圆形的图像太低了5个像素。我试图将y1更改为-5,所以它将完全在JPanel中,椭圆形移动到正确的位置,但椭圆形的五个顶行被擦除了为什么会发生这些事情?以及如何将椭圆放置在JPanel中间?椭圆形的五个顶行被擦除。为什么?

package il.co.atlantis; 

import javax.swing.*; 

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


public class PanelExample_Extended{ 

public static final int WID = 20, HEI = 20; 
public static int x1 = 0, y1 = -5; 

public class MyGraphics extends JComponent { 

    private static final long serialVersionUID = 7526472295622776147L; 

    MyGraphics() { 
     setPreferredSize(new Dimension(20,20)); 
    } 

    public void paintComponent(Graphics g){ 
     super.paintComponents(g); 
     g.setColor(Color.blue); 
     g.fillOval(x1, y1, WID, HEI); 
    } 

} 

public JPanel createContentPane(){ 

    JPanel totalGUI = new JPanel(); 
    totalGUI.setLayout(null); 

    JPanel redPanel = new JPanel(); 
    redPanel.setBackground(Color.red); 
    redPanel.setLocation(10, 10); 
    redPanel.setSize(20,20); 
    MyGraphics tr = new MyGraphics(); 
    tr.setLocation(0, 0); 
    redPanel.add(tr); 
    totalGUI.add(redPanel); 

    JPanel bluePanel = new JPanel(); 
    bluePanel.setBackground(Color.blue); 
    bluePanel.setLocation(220, 10); 
    bluePanel.setSize(50, 50); 
    totalGUI.add(bluePanel); 

    totalGUI.setOpaque(true); 
    return totalGUI; 
} 

private static void createAndShowGUI() { 

    JFrame.setDefaultLookAndFeelDecorated(true); 
    JFrame frame = new JFrame("[=] ??? [=]"); 


    PanelExample_Extended demo = new PanelExample_Extended(); 
    frame.setContentPane(demo.createContentPane()); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(290, 100); 
    frame.setVisible(true); 
} 

public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGUI(); 
     } 
    }); 
} 
} 
+0

使用适当的变量名称“WID”和“HEI”没有多大意义。如果你想让人们阅读你的代码,然后使用可理解的名字。也不要为X,Y使用静态变量。您将永远无法更改您可能使用的其他组件的位置。所有这些属性都属于该类组件的颜色。 – camickr

回答

3

如果您开始在-5绘图,您正在绘制JComponent,所以图像的该部分不显示是有意义的。我认为你的问题源于试图在默认使用FlowLayout的JPanel上使用绝对定位(一种避免的事情)。

如果您更好地描述了您正在尝试做的事情,并且可能会给我们提供您想要的图像,我们可能会提供更好的帮助。

尝试给你的红色JPanel一个BorderLayout并看看会发生什么。

JPanel redPanel = new JPanel(new BorderLayout()); 

但最重要的是,请仔细阅读并理解布局经理。

+0

当我将x1和y1 sas设置为0时,为什么它不从左上角开始?我想要rec – Atlantis

+0

@עמוסרום:它不会从左上角开始,可能是因为布局的错误使用。 –

+0

我想要矩形边界椭圆形,这样当我移动JPanel时,椭圆形将移动到,我可以添加其中的一些来制作一排椭圆形。 – Atlantis