Кнопки изначально не рисуются - PullRequest
3 голосов
/ 18 января 2012

У меня проблема с моим апплетом, когда кнопки не рисуются, пока вы не наведете на них курсор мыши. Они остаются после этого, но как только вы нажмете одну, они снова уйдут. Вот мой код:

    checkPanel = new JPanel();

    buttonPanel = new JPanel();
    buttonPanel.setLayout( new GridLayout( 1, 7 ) );

    openAdvancedSettings = new JButton( "Advanced Settings" );
    openAdvancedSettings.addActionListener( this );

    checkPanel = new JPanel();
    checkvolt = new Checkbox( "Voltage", true );
    checkv = new Checkbox( "v gate", false );
    checkw = new Checkbox( "w gate", false );
    checks = new Checkbox( "s gate", false );

    checkvolt.addItemListener( this );
    checkv.addItemListener( this );
    checkw.addItemListener( this );
    checks.addItemListener( this );

    checkPanel.setLayout( new GridLayout( 20, 8 ) );
    checkPanel.add( butp );
    checkPanel.add( prompt0 );
    checkPanel.add( checkvolt );
    checkPanel.add( prompt1 );

    butt = new JButton( "Start" );
    butt.addActionListener( this );
    buttonPanel.add( butt );

    setLayout( new BorderLayout() );
    add( checkPanel, BorderLayout.EAST );
    add( buttonPanel, BorderLayout.NORTH );
    add( openAdvancedSettings, BorderLayout.SOUTH );

Первые 2 добавления - это JPanels, а последнее - JButton. Большинство кнопок (все, кроме последней) находятся на этих двух панелях.

Я также пришел к выводу, что метод repaint () вызывает это. Что я делаю не так?

Ответы [ 2 ]

4 голосов
/ 18 января 2012

Я предполагаю, что в отсутствие хорошего SSCCE вы, должно быть, не смогли поместить свой код, который отвечает за создание и отображение вашего GUI, для достижения Параллелизма в Swing внутри SwingUtilities.invokeLater (...);Во-вторых, вы можете попробовать вызвать метод revalidate () на своей панели перед вызовом repaint ().Это может решить проблему на данный момент.

Надеюсь, что это может как-то помочь.Привет

3 голосов
/ 18 января 2012
  • Не смешивайте компоненты Swing (например, JPanel) и AWT (например, CheckBox). Закомментируйте любой импорт AWT и убедитесь, что отсутствуют только макеты.
  • Убедитесь, что validate() вызывается после добавления всех компонентов.
  • И, как советовал Гагандип Бали: - Создайте графический интерфейс на EDT и опубликуйте SSCCE, если вы не можете его отсортировать.
...