面板没有边框

时间:2017-09-22 14:52:47

标签: java swing user-interface jpanel border

我正在开发一个项目,我刚开始使用GUI。由于这不是我最喜欢的话题,我偶然发现了一些不能正常工作的事情。一切(PacmanGrid,PacmanScore)显示正确但我为PacmanScore Panel编写的边框!无论如何这里是代码,希望有人可以提供帮助。

public class PacmanFrame extends JFrame{



public PacmanFrame() {
    this.setLayout(new BorderLayout());
    this.setTitle("Pacman");
    PacmanGrid p1=new PacmanGrid();
    PacmanScore p2 = new PacmanScore();


    this.add(p1,BorderLayout.CENTER);
    this.add(p2,BorderLayout.EAST);
    super.setDefaultCloseOperation(EXIT_ON_CLOSE);
    super.repaint();
    pack();
    super.setVisible(true);


}


public static void main(String[] args) {
    PacmanFrame p1 = new PacmanFrame();
}

 }

PacmanScore

public class PacmanScore extends JPanel{
private TitledBorder t3 = BorderFactory.createTitledBorder("Menu");
private Border etched = BorderFactory.createEtchedBorder(Color.WHITE, Color.white);


public PacmanScore() {
    setLayout(new FlowLayout());
    setPreferredSize(new Dimension(100,800));
    setBackground(Color.DARK_GRAY);
    t3.setBorder(etched);
    setBorder(t3);

    setVisible(true);
    setOpaque(true);


}

public void paint(Graphics g) {
    Graphics2D g2 = (Graphics2D)g;
    super.paintComponent(g2);
    g2.setColor(Color.white);
    g2.drawString("Score: ", 20, 400);

}

}

PacmanGrid也由Panel扩展,并使用预定义模式绘制经典的PacmanGrid。但我不认为这是相关的,因为问题显然在PacmanScore专家组。如果有人需要,我会发布代码。 在此先感谢!

1 个答案:

答案 0 :(得分:1)

public void paint(Graphics g) {
    Graphics2D g2 = (Graphics2D)g;
    super.paintComponent(g2);
    g2.setColor(Color.white);
    g2.drawString("Score: ", 20, 400);

}

你没有正确覆盖paint(),因为你没有调用super.paint(),因此没有绘制边框。

不要覆盖paint()。自定义绘画是通过覆盖paintComponent()

完成的

阅读A Closer Look at the Paint Mechanism上Swing教程中的部分以获取更多信息。

你为什么要做定制绘画?只需在面板中添加JLabel即可。

此外,默认情况下可以看到Swing组件(顶级窗口除外),因此无需使面板可见。