0

如何获得构建在另一个类中的 JPanel 的 Dimension(无论是 prefferedSize 还是 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]' 这显然是错误的..

顺便说一句:你知道如何处理这个错误:http ://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4915023

BoxLayout 有时会切断面板..这就是我需要访问大小的原因...到目前为止我尝试了所有方法...或者您是否知道另一种 Layoutmanager 具有相同的结果,例如垂直 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?即使在课堂上实例化它也将具有初始值。

4

1 回答 1

2

你知道如何处理这个错误: http ://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4915023

答案在评估中描述,其余是问题 - (我应该避免在 Java Swing 中使用 set[Preferred|Maximum|Minimum]Size 方法吗?)

如何获得构建在另一个类中的 JPanel 的 Dimension(无论是 prefferedSize 还是 Size)?

  1. JPanel(对所有 JComponents 有效)在以下情况下返回自己的 Dimension
    • 在屏幕上可见
    • 之后JFrame(JDialog, etc.).pack()被调用
  2. 覆盖 JPanel 的 getPreferredSize
  3. JPanel 在 API 中实现了 FlowLayout
  4. BoxLayout 接受(与其他 LayoutManager 相比)最小、最大和首选尺寸
于 2013-06-09T21:11:21.747 回答