彩绘组件大于框架
Painted component bigger than frame
我使用与绘制矩形相同的数字来设置框架的大小,但图形比我的 JFrame 大。这是为什么?
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Test {
public static void main(String[] arguments) {
Test test = new Test();
JFrame frame = new JFrame();
DrawPane contentPane = test.new DrawPane();
frame.setContentPane(contentPane);
frame.setSize(300, 400);
frame.setVisible(true);
}
private class DrawPane extends JPanel {
@Override
protected void paintComponent(Graphics g) {
g.setColor(Color.YELLOW);
g.fillRect(0, 0, 300, 400);
}
}
}
是因为边框。这是一个很好的例子,说明为什么您不应该明确确定 JFrame
的大小。而是从 JPanel
:
调用 setSize
override getPreferredSize
方法
private class DrawPane extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.YELLOW);
g.fillRect(0, 0, 300, 400);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(300, 400);
}
}
然后为您的 JFrame
调用 pack
而不是 setSize
,您的 JFrame
将根据其内容调整其大小。
我使用与绘制矩形相同的数字来设置框架的大小,但图形比我的 JFrame 大。这是为什么?
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Test {
public static void main(String[] arguments) {
Test test = new Test();
JFrame frame = new JFrame();
DrawPane contentPane = test.new DrawPane();
frame.setContentPane(contentPane);
frame.setSize(300, 400);
frame.setVisible(true);
}
private class DrawPane extends JPanel {
@Override
protected void paintComponent(Graphics g) {
g.setColor(Color.YELLOW);
g.fillRect(0, 0, 300, 400);
}
}
}
是因为边框。这是一个很好的例子,说明为什么您不应该明确确定 JFrame
的大小。而是从 JPanel
:
setSize
override getPreferredSize
方法
private class DrawPane extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.YELLOW);
g.fillRect(0, 0, 300, 400);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(300, 400);
}
}
然后为您的 JFrame
调用 pack
而不是 setSize
,您的 JFrame
将根据其内容调整其大小。