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

时间:2013-06-09 20:58:46

标签: java swing jpanel layout-manager

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

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

BoxLayout有时会切断面板.. 这就是为什么我需要访问大小...我到目前为止尝试了一切...或者你知道一个替代的Layoutmanager与垂直BoxLayout相同的resuts需要manualy读取大小吗?

早些时候发布同样的问题.. 修改:我覆盖了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?即使课堂上有实体,它也会有初始价值。

1 个答案:

答案 0 :(得分:2)

  

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

答案在评估中描述,其余部分是问题 - (Should I avoid the use of set[Preferred|Maximum|Minimum]Size methods in Java Swing?)

  

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

  1. JPanel(对所有JComponents有效)返回自己的Dimension
    • 在屏幕上可见
    • 调用JFrame(JDialog, etc.).pack()
  2. 覆盖JPAnel的getPreferredSize
  3. JPanel在API
  4. 中实现了FlowLayout
  5. BoxLayout接受(与其他LayoutManagers相比)min,max和preferred size
相关问题