我的课程Main
延伸JFrame
,课程DrawingPanel
延伸JPanel
。
DrawingPanel
用paintComponent()
方法填充一个正方形。 Main
是一个简单的JFrame
。
Main
将DrawingPanel
的实例添加到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();
}
}
感谢您的帮助:)
答案 0 :(得分:2)
如果我没有为Main设置布局,则正确显示正方形。如果我做 设置Main的布局,假设FlowLayout(),方块没有得到 显示。
FlowLayout
FlowLayout
服从要添加到Container的组件的首选大小。扩展组件并覆盖getPreferredSize(Dimenstion)
对于提供大小提示更为可取,因为它允许根据组件的内容调整组件大小。setSize(Dimension)
。当您完成从用例中添加所有组件后,请调用pack()
。 pack方法调整框架的大小,使其所有内容都达到或超过其首选大小。setVisible(true)
上调用pack()
之后,应调用JFrame
框架。JFrame.setVisible(true)
也应该在EDT内部执行。在这种情况下使用SwingUtilities.invokeLater(Runnable)
。查看官方教程页: