Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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 在getPreferredSize()之后调用Paint()_Java_Swing - Fatal编程技术网

Java 在getPreferredSize()之后调用Paint()

Java 在getPreferredSize()之后调用Paint(),java,swing,Java,Swing,我想显示带有自定义标题渲染器(旋转的两行文本)的JTable。 用于设置自定义渲染器的伪代码: table.getColumnModel().getColumn(0..colCount).setHeaderRenderer(new TableCellHeaderRendererGraphics()); 类TableCellHeaderRenderGraphics扩展了DefaultTableCellRenderer 这里覆盖了方法paint(Graphics g)和getPreferredSi

我想显示带有自定义标题渲染器(旋转的两行文本)的JTable。

用于设置自定义渲染器的伪代码:

table.getColumnModel().getColumn(0..colCount).setHeaderRenderer(new TableCellHeaderRendererGraphics());
TableCellHeaderRenderGraphics
扩展了
DefaultTableCellRenderer

这里覆盖了方法
paint(Graphics g)
getPreferredSize()
。在
paint
中,我使用文本、字体、图形2D和仿射变换来旋转文本,并以粗体和素色显示两行。

问题是在
绘制(图形g)
之前调用了
getPreferredSize()

问:在我有机会使用仅在
paint()
中引用的
图形计算尺寸之前,如何返回首选尺寸?

我能够回答自己的问题:


在没有
Graphics
上下文的情况下,可以计算所需矩形的大小。使用组件(
JLabel
在本例中)方法
getFontMetrics()

在此类中,使用
stringWidth(txt)
获取文本的宽度
文本的高度可以通过
getFontMetrics().getHeight(),.getAscent(),.getDescent()

请求。您不能:p,API就是这样工作的。您可以直接向组件询问
FontMetrics
是否有效我认为我可以在这里看到设计缺陷-绘制时计算组件大小??当你要画画的时候,你应该已经知道你要画什么,所以你必须知道所有的界限。为什么不使用专用的方法来计算这些任务的大小,比如get*size()。您可以始终实现自己的布局管理器,只针对这一个组件。@MadProgrammer:thx,我想我会在收到您的提示后让它工作。第一次测试给了我希望。JLabel FontMetrics可以在没有图形的情况下计算文本长度2d,高度可以是固定值-这对我很有用。@Antoniosss:我知道画什么(两行文本)。我也知道课文的内容。但我似乎需要一个图形上下文来计算像素大小。如何在没有图形上下文的情况下计算给定文本的高度?布局管理器:我在“Java教程”中找到了“创建自定义布局管理器”。这是了解更多这方面的好起点吗?你不需要。就像前面提到的@MadProgrammer一样,使用FontMetrics