gpt4 book ai didi

java - 从另一个类绘制不会采用 JPanel 的正确尺寸

转载 作者:行者123 更新时间:2023-11-29 05:33:06 25 4
gpt4 key购买 nike

好的,我有一个像这样的 JPanel:

 public class GUI {
JFrame frame = new JFrame("Net");

JPanel panel = new JPanel();
public GUI()
{
frame.setSize(835,650);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setVisible(true);
frame.add(panel);
panel.setSize(600,600);
panel.setLocation(215,5);
panel.add(new DrawPlanes(300,300,200,Color.BLACK));}

那里还有一些其他的面板等等。我的主要是这个:

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable(){
@Override
public void run(){
//new GUI();
new GUI().buildTable();

}

});

我还有另外一个类:

public class DrawPlanes extends JPanel 
{

private static int centreX, centreY, radius;
private Color colour;

public DrawPlanes()
{
centreX = 300;
centreY = 300;
radius = 200;
colour = Color.BLACK;
}

public DrawPlanes(int centreX,int centreY, int radius, Color colour)
{
this.centreX = centreX;
this.centreY = centreY;
this.radius = radius;
this.colour = colour;

}

@Override
protected void paintComponent(Graphics g)
{

super.paintComponent(g);
System.out.println("ppp");
Graphics2D g2D = (Graphics2D) g;
g2D.setStroke(new BasicStroke(2F));
g.setColor(Color.BLACK);
g.drawOval(centreX - radius , centreY - radius, radius * 2 , radius * 2);
......
}
}

好的,我已经将我的面板的背景颜色设置为红色,以查看整个面板上发生了什么,它是红色的,但是有一个灰色的小方 block ,我认为是图纸。我已经尝试更改不透明,因为可能存在不兼容问题,但根本没有任何改变。有什么建议吗?我缺少什么吗?

什么是结果的链接

 panel.add(new DrawPlanes(300,300,200,Color.BLACK))

http://dc626.4shared.com/img/FeYopZC1/s7/142d22f1be0/2013-12-08_142846.png?async&rand=0.9010817544924218

当我检查 DrawPlanes 类在 DrawPlanes 本身中有主面板和面板等时,DrawPlanes 类绘制了什么 http://dc626.4shared.com/img/NPDkiQRJ/s7/142d22f23b0/1451491_586878858047235_191988.jpg?async&rand=0.27479583155781395 .当我应用布局管理器时,当我使用 getPreferredSize 覆盖或不覆盖时,灰色方 block 移动到中心,整个红色面板显示为灰色。

最佳答案

  • frame.add(component) 函数最终将您的组件添加到框架的内容 Pane ,该 Pane 将 BorderLayout 作为默认布局管理器。
  • JPanel 使用 FlowLayout 作为默认布局,它尊重组件的首选大小。
  • 由于您的“面板”和“框架”满足以上两个作为默认值,使用 setSize(Dimension)setBounds(Dimension) 的尺寸提示将不会出现'没有效果。
  • 您应该使用 setPreferredSize(Dimention)(到您上下文的 DrawPanel 实例)提供尺寸提示,如果指定最小/最大尺寸是需要 setMinimumSize(Dimenstion)setMaximumSize(Dimenstion)
  • 然而,覆盖 getXXXSize(Dimenstion) 被认为是更好的做法:xxx 代表 Preferred/Minimmum/Maximum 始终允许根据内容调整组件的大小。
  • 与其在窗口上调用 setSize(Dimension),不如在添加子组件结束时调用 pack()
  • 我们应该在完成添加所有子组件并遵循上述点之后调用 setVisible(true),在 pack() 之后。

请从教程开始:Laying Out Components Within a Container


编辑:

让我们编辑您的 GUI() 构造函数代码,看看会发生什么:

public GUI()
{
frame.setSize(835,650);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
//frame.setVisible(true); // <<--- call it at the end of the code
frame.add(panel);
//panel.setSize(600,600); <<--- removing set size

panel.add(new DrawPlanes(300,300,200,Color.BLACK));
frame.setVisible(true);
}

DrawPnales 将扩展 JComponent:

public class DrawPlanes extends JComponent{
public DrawPlanes(int centreX,int centreY, int radius, Color colour)
{
this.centreX = centreX;
this.centreY = centreY;
this.radius = radius;
this.colour = colour;
}

@Override
public Dimension getPreferredSize() {

return new Dimenstion(width, height);
// ^ provide your required size
}

}

如果这对您仍然没有任何意义,那么请尝试进一步学习 Swing 布局管理器。否则不管我们怎么用头撞 table ,也可能什么也做不成。

关于java - 从另一个类绘制不会采用 JPanel 的正确尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20443018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com