Java将图形添加到JPanel,然后添加到JFrame
好吧,我花了很多时间寻找我问题的答案,但我运气很差。我正在尝试将我绘制的图形添加到JPanel,然后将JPanel添加到JFrame。这是我的密码:Java将图形添加到JPanel,然后添加到JFrame,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,好吧,我花了很多时间寻找我问题的答案,但我运气很差。我正在尝试将我绘制的图形添加到JPanel,然后将JPanel添加到JFrame。这是我的密码: import java.awt.*; import javax.swing.*; public class Testing { public static void main(String[] args) { JFrame f = new JFrame("JFrame with a JPanel"); f.setSize(5
import java.awt.*;
import javax.swing.*;
public class Testing
{
public static void main(String[] args)
{
JFrame f = new JFrame("JFrame with a JPanel");
f.setSize(500,500);
JLabel l1 = new JLabel("Hello !");
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
DrawBox dB = new DrawBox(400,200,20,20);
p1.add(l1);
p2.add(dB);
f.add(p1,BorderLayout.PAGE_END);
f.add(p2,BorderLayout.CENTER);
//f.add(dB); //Adding directly to the JFrame works fine
f.setVisible(true);
}
}
接下来是创建图形的类
public class DrawBox extends JPanel {
int xVal = 0;
int yVal = 0;
int width = 0;
int height = 0;
public DrawBox(int x, int y, int w, int h) {
xVal = x;
yVal = y;
width = w;
height = h;
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawRect(xVal, yVal, width, height);
}
}
如果我将DrawBox直接添加到JFrame中,它似乎可以正常工作。但是,如果我尝试将多个图形直接添加到JFrame,则只会显示其中一个图形。根据您的评论
//f.add(dB)//直接添加到JFrame效果很好
这是因为框架的边框布局不考虑首选尺寸。它将拉伸绘图面板以适合
另一方面,在另一个面板中添加“包裹”图形面板时,包裹面板具有默认的FlowLayout,该布局不考虑首选尺寸。如果未通过重写getPreferredSize()
+1在您的自定义类上使用setPreferredSize()setMinimumSize()和setMaximumSize()几乎是一次完整的尝试。@nespowerglood请参见(是)。上面的答案是否建议根本不重写这些方法?
@Override
public Dimension getPreferredSize() {
return new Dimension( ... , ... );
}