Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从java中的另一个类获取JPanel对象的大小_Java_Swing_Jpanel_Layout Manager - Fatal编程技术网

从java中的另一个类获取JPanel对象的大小

从java中的另一个类获取JPanel对象的大小,java,swing,jpanel,layout-manager,Java,Swing,Jpanel,Layout Manager,如何获取在另一个类中构建的JPanel的维度(无论是PreferedSize还是Size) 在构建GUI的类中,我实例化了一个新面板,如下所示: PlotPanel specificPlot = gui.BuildPlottingData.makeImagePlot(discDbSpecific, sections, windowLength, 1, algoParam1, algoParam2, leadWindowSize, 0, errorAcc); 如您所见,此面板的行为与普通JPan

如何获取在另一个类中构建的JPanel的维度(无论是PreferedSize还是Size)

在构建GUI的类中,我实例化了一个新面板,如下所示:

PlotPanel specificPlot = gui.BuildPlottingData.makeImagePlot(discDbSpecific, sections,
windowLength, 1, algoParam1, algoParam2, leadWindowSize, 0, errorAcc);
如您所见,此面板的行为与普通JPanel类似:

public class PlotPanel extends JPanel {...
我正确设置了它的preferredSize(它被正确地可视化)

调用specificPlot.getPreferredSize()会给出“java.awt.Dimension[width=10,height=10]”,这显然是错误的

顺便说一句: 您是否知道如何处理此错误:

BoxLayout有时会切断面板。。 这就是为什么我需要访问的大小。。。到目前为止我什么都试过了。。。或者,您是否知道,具有相同结果的替代布局管理器(如垂直箱布局)需要手动读取尺寸

前面的文章提到了同样的问题。。 编辑:我覆盖
getPreferredSize
-方法。问题是,我无法访问影响大小的所有参数,如下所示

package getdata;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JPanel;

public class Test extends JPanel{

@Override
public Dimension getPreferredSize(){
    return new Dimension(10,20);

}
@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    setBackground(Color.white);
    Graphics2D paint = (Graphics2D) g;

    paint.drawString("test", 0, 10);
    int strWdt = paint.getFontMetrics().stringWidth("test");
}
}

如何阅读strWdt?即使在类中实例化,它也会有初始值。

  • 不知道,没有张贴
您是否知道如何处理此错误:

答案在评估中描述,其余为问题-

我怎样才能获得一个对象的维度(无论是首选大小) JPanel哪个是在另一个类中构建的

  • JPanel(对所有JComponents有效)在以下情况下返回自己的维度:
    • 在屏幕上是可见的
    • JFrame(JDialog等)之后调用.pack()
  • 覆盖JPanel的getPreferredSize
  • JPanel在API中实现了FlowLayout
  • BoxLayout接受(与其他LayoutManager相比)最小、最大和首选尺寸

  • 到目前为止,谢谢你,很抱歉错过了SSCCE。。它只是另一个类的一个jpanel。。当我重写
    getPreferredSize()
    时,我得到了正确的大小。问题是,在这种方法中,我无法访问影响面板高度的所有参数。。(在Overwriten'paintComponent()`-method中设置它们…重载这些方法,创建私有的空白,构造函数