Как сделать TitledBorder невидимым?

#java #swing #jpanel #jcomponent #titled-border

#java #качать #jpanel #jcomponent #titled-граница

Вопрос:

Итак, у меня есть следующий JComponent, который я хотел бы сделать невидимым в определенных условиях:

 private final JComponent createStop()
{
    JPanel          jp;
    GridPlacement   gp;

    jp = new JPanel();
    jp.setOpaque( false );
    jp.setBorder( buildBorder(Res.getIntl(RES "$Border.Stop")) ); // -----> Here's the problem

    gp = new GridPlacement( jp, INS_SMALL );
    gp.add( stopNo, 0,0,false,"N","NW",1,1 );
    gp.add( stopYes, 1,0,false,"N","NW",1,1 );
    gp.add( stopTimeout, 2,0,false,"N","NW",1,1 );
    gp.add( stopKill, 3,0,false,"N","NW",1,1 );
    //gp.add( new FillArea(0,0), 3,2,true,"H","C",1,1 );
    gp.add( new FillArea(0,0), 100,100,true,"B","C",1,1 );

    return jp;
}
  

Я могу сделать все невидимым, за исключением TitledBorder, который по какой-то причине не исчезает, когда я делаю:

     createStop().setVisible(false);
  

Даже когда я пытаюсь принудительно установить для него значение null, оно все равно остается видимым:

         createStop().setBorder(null);
  

То же самое, когда я пытаюсь это сделать:

 createStop().setBorder(BorderFactory.createEmptyBorder());
  

Вот как создается граница:

 protected Border buildBorder( String s )
{
    return BorderFactory.createTitledBorder( BORDER_TITLE, s, TitledBorder.LEADING, TitledBorder.TOP, FONT_TITLE );
}
  

Могу ли я каким-либо образом сделать его невидимым, как и остальные элементы метода createStop()?

Ответ №1:

Хорошо, на случай, если кто-то еще столкнется с такой же проблемой, вот что я сделал, чтобы ее решить:

Я убрал переменную jp из createStop() метода и сделал ее глобальной переменной.

Затем, в зависимости от условия, я вызвал revalidate() на JPanel сразу после установки для его видимости значения true или false:

 if (Condition){
    jp.setVisible(false);
    jp.revalidate();
} else {
    jp.setVisible(true);
    jp.revalidate();
}