带有彩绘方块的JPanel无法正确显示

时间:2013-12-26 15:56:43

标签: java swing jpanel

我的课程Main延伸JFrame,课程DrawingPanel延伸JPanelDrawingPanelpaintComponent()方法填充一个正方形。 Main是一个简单的JFrame

MainDrawingPanel的实例添加到JFrame

问题是:

如果我没有为Main设置布局,则DrawingPanel中的方块会正确显示。 如果我为Main设置了布局,假设FlowLayout(),广场不会显示,但我知道paintComponent()中的DrawingPanel方法确实在运行,因为我打印了从这个方法里面检查控制台的东西。此外,面板的黑色边框也是如此。

代码:

类DrawingPanel:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class DrawingPanel extends JPanel {

    Rectangle rect = new Rectangle(50,50,50,50);

    public void paintComponent(Graphics g){
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
        g2d.fill(rect);
    }   

}

班级主要:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Main extends JFrame {

    JPanel panel;

    public Main(){

        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(400,400);
        setVisible(true);
        setLayout(new FlowLayout());//If I delete this line, the square gets
                                      //displayed correctly. Otherwise, the panel
                                      //and it's black border are displayed without
                                      //a black square inside of them.

        panel = new DrawingPanel();
        panel.setBorder(BorderFactory.createLineBorder(Color.BLACK));

        add(panel);

    }

    public static void main(String[] args) {
        Main m = new Main();
    }

}

感谢您的帮助:)

1 个答案:

答案 0 :(得分:2)

  

如果我没有为Main设置布局,则正确显示正方形。如果我做   设置Main的布局,假设FlowLayout(),方块没有得到   显示。

  • 始终使用LayoutManager:正在使用FlowLayout
  • 设置组件的首选大小,因为FlowLayout服从要添加到Container的组件的首选大小。扩展组件并覆盖getPreferredSize(Dimenstion)对于提供大小提示更为可取,因为它允许根据组件的内容调整组件大小。
  • 不要使用JFrame的setSize(Dimension)。当您完成从用例中添加所有组件后,请调用pack()。 pack方法调整框架的大小,使其所有内容都达到或超过其首选大小。
  • 在添加所有组件之后以及在setVisible(true)上调用pack()之后,应调用
  • JFrame框架。
  • 并且不要忘记将GUI渲染任务放在EDT中。甚至JFrame.setVisible(true)也应该在EDT内部执行。在这种情况下使用SwingUtilities.invokeLater(Runnable)
  • 正如@camickr建议的那样,不要忘记查看Performing Custom Painting Steps以查看上述所有建议。

查看官方教程页

  1. How to use FLowLayout
  2. Solving Common Layout Problems