将单选按钮添加到GUI列表会破坏setSelected功能

时间:2018-08-16 15:22:35

标签: java swing

我对此完全completely之以鼻。这是代码之前的摘要。 我有一个带有3个选项卡的选项卡式窗格,其中2个包含一个带有单选按钮供选择的功能列表(所有选项都放在一个单选按钮组中),第3个用于首选项,用户可以添加任何功能的列表在前两个标签中可用。

在“首选项”选项卡中,还有2个按钮可以更改顺序,因此,如果用户选择了第5个选项并按下向下按钮,则它将变为第6个(第6个变为第5个,依此类推)

这里的问题是用户添加到首选项选项卡的第一个选项列表,上/下按钮工作正常,但是,如果用户希望添加第二个要添加到第一个选项的列表,从第一个批次中取出一个选项,并在到达第二个批次中的第一个选项时将其一直放在底部,setSelected(始终跟随所选选项)将跳至列表中最上面的一个。奇怪的行为,因为采取任何选择并使用向上按钮将其放置在列表中任何位置的相反动作都很好。

以下是构建首选项列表的代码:

private void addRadioButtonToPreferences( List<ValueConverterFunctionType> 
aPreferenceFunctionList )
{

mPrefList = prefListUniquenessValidator( aPreferenceFunctionList );
mNextYPositionForRadioButton = 0;

for( int i = 0 ; i < mPrefList.size() ; i++ )
{

  mGrpConversionFunctionType.add( mBtnPrefList.get( i ) );
  mBtnPrefList.get( i ).setText( mPrefList.get(i).getFunctionDescription());

  GridBagConstraints gbc_RadioButton = new GridBagConstraints();
  gbc_RadioButton.gridx = 0;
  gbc_RadioButton.gridy = mNextYPositionForRadioButton;
  gbc_RadioButton.weightx = 1.0;
  gbc_RadioButton.anchor = GridBagConstraints.NORTHWEST;
  gbc_RadioButton.insets = new Insets(0, 10, 6, 0);

  mPnlPreferencesList.add( mBtnPrefList.get( i ), gbc_RadioButton );

  setPositionsForNextRadioButton();

  mBtnPrefList.get( i ).setBoundValue( mPrefList.get( i ) );
}
mPnlPreferencesList.revalidate();
mPnlPreferencesList.repaint();
}

以下是用于向上/向下移动所选选项的功能:

private void changerPosPref( int aPrefDirection )
{
ValueConverterFunctionType lSelectedFunction = 
mGrpConversionFunctionType.getSelectedButtonBoundValue();
int lIndex = mGrpConversionFunctionType.getSelectedIndex();
int lCurrentIndex = mPrefList.indexOf( lSelectedFunction );

if( aPrefDirection == 1 && lCurrentIndex != 0 )
{
  Collections.swap( mPrefList, lCurrentIndex, lCurrentIndex - 1 );
  addRadioButtonToPreferences( mPrefList );
  setSelectedButton( lIndex - 1 );
}
if( aPrefDirection == 2 && lCurrentIndex != mPrefList.size() - 1 )
{
  Collections.swap( mPrefList, lCurrentIndex, lCurrentIndex + 1 );
  addRadioButtonToPreferences( mPrefList );
  setSelectedButton( lIndex + 1 );
}
}

private void setSelectedButton( int aIndex )
{
mGrpConversionFunctionType.setSelectedIndex( aIndex );
}

这是setSelectedIndex的自制函数:

  public void setSelectedIndex( int aPos )
  {
  if( aPos < getButtonCount() )
  {
  Vector lVect = new Vector( Collections.list( getElements() ) );
  setSelected( (AbstractButton )lVect.get( aPos ) );
  }
  }

  public void setSelected( AbstractButton aBoutonOuRadio )
  {
  setSelected( aBoutonOuRadio.getModel(), true );
  }

任何帮助将不胜感激。 谢谢

0 个答案:

没有答案