2014-05-05 45 views
0

我可以很容易地为标题边界设置标题。如何找到边框为“标题边框”的文本框的标题?

c.setBorder(BorderFactory.createTitledBorder(title)); 

文档说使用getTitle()找到标题的内容,但我找不到什么很自然的任何例子或工作组合。的下面没有,甚至会编译:

c.getBorder().getTitle(); 

    c.getTitle(); 

    Border b = null; 
... 
    b = BorderFactory.createTitledBorder(new LineBorder(BLACK, 2),title); 
    c.setBorder(b); 
    b = c.getBorder(); 
    b.getTitle(); 

我如何获得一个JTextField,其边框类型是createTitledBorder的标题字符串内容?

+0

@ gla3dr - 好点;我知道类型不是'createTitledBorder',因为这是一种方法,但我没有想到让b具有'TitledBorder'类型。但正如它发生的那样,我不能将b声明为'TitledBorder'类型(在大图中),一些单元格是'TitledBorder'类型和'LineBorder'类型的一部分,并且所有单元格都被传递给需要的方法区分。所以我想开始一个关于这个的新线索。 – DSlomer64

回答

1

边框类型不是createTitledBorder。这只是您正在使用的静态工厂方法的名称。它返回一个TitledBorder。在JTextField上调用getBorder()仅返回类型为Border的边框,该边框没有getTitle()方法,因为并非所有边框都有标题。

你需要有就是TitledBorder类型的,这样的Java知道边界有一个标题边框的引用:

TitledBorder b = null; 
... 
b = BorderFactory.createTitledBorder(new LineBorder(BLACK, 2),title); 
c.setBorder(b); 
b = (TitledBorder)c.getBorder(); 
b.getTitle(); 

,或者,如果你不想保持类型的引用TitledBorder,你可以这样做:

Border b = null; 
... 
b = BorderFactory.createTitledBorder(new LineBorder(BLACK, 2),title); 
c.setBorder(b); 
b = c.getBorder(); 
((TitledBorder)b).getTitle(); 

编辑
这里是做你已经在你发布的回答做了什么的更简洁的方式:

Border b; 
String title; 

b = c.getBorder(); 
if(b instanceof TitledBorder) 
{ 
    title = ((TitledBorder)b).getTitle(); 
} 
+0

我认为我对你的第一个答案的评论仍然适用。对于不是'TitledBorder'类型的单元格,我得到'ClassCastException:javax.swing.border.LineBorder不能转换为javax.swing.border.TitledBorder',但可能这是使用'instance of'实例的情况。 – DSlomer64

1

试着这么做

TitledBorder border = BorderFactory.createTitledBorder("Title"); 
c.setBorder(border); 

然后,您可以调用使用东西的getTitle方法类似

System.out.println(border.getTitle()); 
0

这工作:

Border b; 
TitledBorder tb; 
String title; 

    b = c.getBorder(); 
    if(b instanceof TitledBorder) 
    { 
     c.getBorder(); 
     tb = (TitledBorder)c.getBorder(); 
     title = tb.getTitle(); 
    } 

无论什么类型的边框c有,如果它是TitledBorder,我得到的广告标题。如果不是,照常进行。

谢谢,gla3dr,提示。

有没有人看到一个不太详细的方式来完成任务?

+0

嘿,我添加了一个编辑我的文章与一个不太详细的方法做你在这里有什么。您不必将边界存储为'TitledBorder',并将if语句的主体放到一行。 – gla3dr

+0

@ gla3dr:不错!谢谢。 – DSlomer64