Задержка обновления заголовка TitledBorder / обновить, почему? - PullRequest
6 голосов
/ 04 июля 2011

У меня есть JPanel A с границей заголовка внутри JPanel B для JTabbedPanel C. У меня есть метод обновления содержимого A и B, который время от времени вызывается.

К сожалению, все элементы A и B обновляются во времени, но не в заголовке A. Мне явно приходится переключаться на другую панель с вкладками и возвращаться к C, чтобы заголовок A отображался правильно. Почему?

Код, который я использую, следующий:

    TitledBorder tmp
            = (TitledBorder) this.GroupingProfilePanel.getBorder();

    // Resetting header
    if ( this.c != null ) {
        tmp.setTitle("Set - " + this.c.getName());
    } else {
        tmp.setTitle("Set");
    }

1 Ответ

10 голосов
/ 04 июля 2011

После обновления заголовка убедитесь, что вы вызываете repaint() для компонента, имеющего границу заголовка или одного из его предков.

enter image description here

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.util.Date;
import javax.swing.AbstractAction;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.border.TitledBorder;

/** @see http://stackoverflow.com/questions/6566612 */
public class TitledBorderTest {

     public static void main(String[] args) {
          EventQueue.invokeLater(new Runnable() {
              public void run() {
                  new TitledBorderTest().create();
              }
          });
     }

     private void create() {

         String s = "This is a TitledBorder update test.";
         final JLabel label = new JLabel(s);
         final TitledBorder tb =
             BorderFactory.createTitledBorder(new Date().toString());
         label.setBorder(tb);
         JFrame f = new JFrame("Titled Border Test");
         f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         f.add(label);
         f.add(new JButton(new AbstractAction("Update") {

            public void actionPerformed(ActionEvent e) {
                tb.setTitle(new Date().toString());
                label.repaint();
            }
        }), BorderLayout.SOUTH);
         f.pack();
         f.setLocationRelativeTo(null);
         f.setVisible(true);
         System.out.println(tb.getMinimumSize(f));
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...