extract base class from PullUpDialog

This commit is contained in:
Max Medvedev
2013-09-20 17:35:30 +04:00
parent 10d89d644c
commit 4edd102a68
8 changed files with 304 additions and 160 deletions
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2009 JetBrains s.r.o.
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -261,40 +261,34 @@ class ExtractClassDialog extends RefactoringDialog implements MemberInfoChangeLi
protected JComponent createCenterPanel() {
final JPanel panel = new JPanel(new BorderLayout());
final MemberSelectionPanel memberSelectionPanel =
new MemberSelectionPanel(RefactorJBundle.message("members.to.extract.label"), memberInfo, "As enum") {
@Override
protected MemberSelectionTable createMemberSelectionTable(final List<MemberInfo> memberInfo, String abstractColumnHeader) {
return new MemberSelectionTable(memberInfo, abstractColumnHeader) {
@Nullable
@Override
protected Object getAbstractColumnValue(MemberInfo memberInfo) {
if (isExtractAsEnum()) {
final PsiMember member = memberInfo.getMember();
if (isConstantField(member)) {
return Boolean.valueOf(enumConstants.contains(memberInfo));
}
}
return null;
}
@Override
protected boolean isAbstractColumnEditable(int rowIndex) {
final MemberInfo info = memberInfo.get(rowIndex);
if (info.isChecked()) {
final PsiMember member = info.getMember();
if (isConstantField(member)) {
if (enumConstants.isEmpty()) return true;
final MemberInfo currentEnumConstant = enumConstants.get(0);
if (((PsiField)currentEnumConstant.getMember()).getType().equals(((PsiField)member).getType())) return true;
}
}
return false;
}
};
final MemberSelectionTable table = new MemberSelectionTable(memberInfo, "As enum") {
@Nullable
@Override
protected Object getAbstractColumnValue(MemberInfo memberInfo) {
if (isExtractAsEnum()) {
final PsiMember member = memberInfo.getMember();
if (isConstantField(member)) {
return Boolean.valueOf(enumConstants.contains(memberInfo));
}
}
};
final MemberSelectionTable table = memberSelectionPanel.getTable();
return null;
}
@Override
protected boolean isAbstractColumnEditable(int rowIndex) {
final MemberInfo info = memberInfo.get(rowIndex);
if (info.isChecked()) {
final PsiMember member = info.getMember();
if (isConstantField(member)) {
if (enumConstants.isEmpty()) return true;
final MemberInfo currentEnumConstant = enumConstants.get(0);
if (((PsiField)currentEnumConstant.getMember()).getType().equals(((PsiField)member).getType())) return true;
}
}
return false;
}
};
table.setMemberInfoModel(new DelegatingMemberInfoModel<PsiMember, MemberInfo>(table.getMemberInfoModel()) {
@Override
@@ -342,6 +336,10 @@ class ExtractClassDialog extends RefactoringDialog implements MemberInfoChangeLi
return cause;
}
});
final MemberSelectionPanelBase<PsiMember, MemberInfo, MemberSelectionTable> memberSelectionPanel =
new MemberSelectionPanelBase<PsiMember, MemberInfo, MemberSelectionTable>(RefactorJBundle.message("members.to.extract.label"), table);
panel.add(memberSelectionPanel, BorderLayout.CENTER);
table.addMemberInfoChangeListener(this);
extractAsEnum.addActionListener(new ActionListener() {
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2009 JetBrains s.r.o.
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -153,16 +153,17 @@ public class JavaPullUpHandler implements RefactoringActionHandler, PullUpDialog
public boolean checkConflicts(final PullUpDialog dialog) {
final MemberInfo[] infos = dialog.getSelectedMemberInfos();
final List<MemberInfo> infos = dialog.getSelectedMemberInfos();
final MemberInfo[] memberInfos = infos.toArray(new MemberInfo[infos.size()]);
final PsiClass superClass = dialog.getSuperClass();
if (!checkWritable(superClass, infos)) return false;
if (!checkWritable(superClass, memberInfos)) return false;
final MultiMap<PsiElement, String> conflicts = new MultiMap<PsiElement, String>();
if (!ProgressManager.getInstance().runProcessWithProgressSynchronously(new Runnable() {
public void run() {
final PsiDirectory targetDirectory = superClass.getContainingFile().getContainingDirectory();
final PsiPackage targetPackage = targetDirectory != null ? JavaDirectoryService.getInstance().getPackage(targetDirectory) : null;
conflicts
.putAllValues(PullUpConflictsUtil.checkConflicts(infos, mySubclass, superClass, targetPackage, targetDirectory, dialog.getContainmentVerifier()));
.putAllValues(PullUpConflictsUtil.checkConflicts(memberInfos, mySubclass, superClass, targetPackage, targetDirectory, dialog.getContainmentVerifier()));
}
}, RefactoringBundle.message("detecting.possible.conflicts"), true, myProject)) return false;
if (!conflicts.isEmpty()) {
@@ -28,43 +28,40 @@ import com.intellij.psi.util.TypeConversionUtil;
import com.intellij.refactoring.HelpID;
import com.intellij.refactoring.JavaRefactoringSettings;
import com.intellij.refactoring.RefactoringBundle;
import com.intellij.refactoring.classMembers.MemberInfoChange;
import com.intellij.refactoring.classMembers.DelegatingMemberInfoModel;
import com.intellij.refactoring.ui.AbstractMemberSelectionTable;
import com.intellij.refactoring.ui.ClassCellRenderer;
import com.intellij.refactoring.ui.DocCommentPanel;
import com.intellij.refactoring.ui.MemberSelectionPanel;
import com.intellij.refactoring.ui.RefactoringDialog;
import com.intellij.refactoring.ui.MemberSelectionTable;
import com.intellij.refactoring.util.DocCommentPolicy;
import com.intellij.refactoring.util.RefactoringHierarchyUtil;
import com.intellij.refactoring.util.classMembers.InterfaceContainmentVerifier;
import com.intellij.refactoring.util.classMembers.MemberInfo;
import com.intellij.refactoring.util.classMembers.MemberInfoStorage;
import com.intellij.refactoring.util.classMembers.UsesAndInterfacesDependencyMemberInfoModel;
import com.intellij.usageView.UsageViewUtil;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.List;
/**
* @author dsl
* Date: 18.06.2002
*/
public class PullUpDialog extends RefactoringDialog {
public class PullUpDialog extends PullUpDialogBase<MemberInfoStorage, MemberInfo, PsiMember, PsiClass> {
private final Callback myCallback;
private MemberSelectionPanel myMemberSelectionPanel;
private MyMemberInfoModel myMemberInfoModel;
private final PsiClass myClass;
private final List<PsiClass> mySuperClasses;
private final MemberInfoStorage myMemberInfoStorage;
private List<MemberInfo> myMemberInfos;
private DocCommentPanel myJavaDocPanel;
private JComboBox myClassCombo;
private final InterfaceContainmentVerifier myInterfaceContainmentVerifier = new InterfaceContainmentVerifier() {
public boolean checkedInterfacesContain(PsiMethod psiMethod) {
return PullUpHelper.checkedInterfacesContain(myMemberInfos, psiMethod);
}
};
private static final String PULL_UP_STATISTICS_KEY = "pull.up##";
public interface Callback {
@@ -72,42 +69,16 @@ public class PullUpDialog extends RefactoringDialog {
}
public PullUpDialog(Project project, PsiClass aClass, List<PsiClass> superClasses, MemberInfoStorage memberInfoStorage, Callback callback) {
super(project, true);
myClass = aClass;
mySuperClasses = superClasses;
myMemberInfoStorage = memberInfoStorage;
myMemberInfos = myMemberInfoStorage.getClassMemberInfos(aClass);
super(project, aClass, superClasses, memberInfoStorage, JavaPullUpHandler.REFACTORING_NAME);
myCallback = callback;
setTitle(JavaPullUpHandler.REFACTORING_NAME);
init();
}
@Nullable
public PsiClass getSuperClass() {
if (myClassCombo != null) {
return (PsiClass) myClassCombo.getSelectedItem();
}
else {
return null;
}
}
public int getJavaDocPolicy() {
return myJavaDocPanel.getPolicy();
}
public MemberInfo[] getSelectedMemberInfos() {
ArrayList<MemberInfo> list = new ArrayList<MemberInfo>(myMemberInfos.size());
for (MemberInfo info : myMemberInfos) {
if (info.isChecked() && myMemberInfoModel.isMemberEnabled(info)) {
list.add(info);
}
}
return list.toArray(new MemberInfo[list.size()]);
}
protected String getDimensionServiceKey() {
return "#com.intellij.refactoring.memberPullUp.PullUpDialog";
}
@@ -116,51 +87,23 @@ public class PullUpDialog extends RefactoringDialog {
return myInterfaceContainmentVerifier;
}
protected JComponent createNorthPanel() {
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
GridBagConstraints gbConstraints = new GridBagConstraints();
gbConstraints.insets = new Insets(4, 0, 4, 8);
gbConstraints.weighty = 1;
gbConstraints.weightx = 1;
gbConstraints.gridy = 0;
gbConstraints.gridwidth = GridBagConstraints.REMAINDER;
gbConstraints.fill = GridBagConstraints.BOTH;
gbConstraints.anchor = GridBagConstraints.WEST;
final JLabel classComboLabel = new JLabel();
panel.add(classComboLabel, gbConstraints);
myClassCombo = new JComboBox(mySuperClasses.toArray());
myClassCombo.setRenderer(new ClassCellRenderer(myClassCombo.getRenderer()));
classComboLabel.setText(RefactoringBundle.message("pull.up.members.to", UsageViewUtil.getLongName(myClass)));
classComboLabel.setLabelFor(myClassCombo);
final PsiClass preselection = getPreselection();
int indexToSelect = 0;
if (preselection != null) {
indexToSelect = mySuperClasses.indexOf(preselection);
}
myClassCombo.setSelectedIndex(indexToSelect);
myClassCombo.addItemListener(new ItemListener() {
@Override
protected void initClassCombo(JComboBox classCombo) {
classCombo.setRenderer(new ClassCellRenderer(classCombo.getRenderer()));
classCombo.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
updateMemberInfo();
if (myMemberSelectionPanel != null) {
myMemberInfoModel.setSuperClass(getSuperClass());
((MyMemberInfoModel)myMemberInfoModel).setSuperClass(getSuperClass());
myMemberSelectionPanel.getTable().setMemberInfos(myMemberInfos);
myMemberSelectionPanel.getTable().fireExternalDataChange();
}
}
}
});
gbConstraints.gridy++;
panel.add(myClassCombo, gbConstraints);
return panel;
}
private PsiClass getPreselection() {
protected PsiClass getPreselection() {
PsiClass preselection = RefactoringHierarchyUtil.getNearestBaseClass(myClass, false);
final String statKey = PULL_UP_STATISTICS_KEY + myClass.getQualifiedName();
@@ -185,15 +128,6 @@ public class PullUpDialog extends RefactoringDialog {
HelpManager.getInstance().invokeHelp(HelpID.MEMBERS_PULL_UP);
}
private void updateMemberInfo() {
final PsiClass targetClass = (PsiClass) myClassCombo.getSelectedItem();
myMemberInfos = myMemberInfoStorage.getIntermediateMemberInfosList(targetClass);
/*Set duplicate = myMemberInfoStorage.getDuplicatedMemberInfos(targetClass);
for (Iterator iterator = duplicate.getSectionsIterator(); getSectionsIterator.hasNext();) {
((MemberInfo) iterator.next()).setChecked(false);
}*/
}
protected void doAction() {
if (!myCallback.checkConflicts(this)) return;
JavaRefactoringSettings.getInstance().PULL_UP_MEMBERS_JAVADOC = myJavaDocPanel.getPolicy();
@@ -203,21 +137,15 @@ public class PullUpDialog extends RefactoringDialog {
StatisticsManager
.getInstance().incUseCount(new StatisticsInfo(PULL_UP_STATISTICS_KEY + myClass.getQualifiedName(), name));
}
invokeRefactoring(new PullUpHelper(myClass, superClass, getSelectedMemberInfos(),
List<MemberInfo> infos = getSelectedMemberInfos();
invokeRefactoring(new PullUpHelper(myClass, superClass, infos.toArray(new MemberInfo[infos.size()]),
new DocCommentPolicy(getJavaDocPolicy())));
close(OK_EXIT_CODE);
}
protected JComponent createCenterPanel() {
JPanel panel = new JPanel(new BorderLayout());
myMemberSelectionPanel = new MemberSelectionPanel(RefactoringBundle.message("members.to.be.pulled.up"), myMemberInfos, RefactoringBundle.message("make.abstract"));
myMemberInfoModel = new MyMemberInfoModel();
myMemberInfoModel.memberInfoChanged(new MemberInfoChange<PsiMember, MemberInfo>(myMemberInfos));
myMemberSelectionPanel.getTable().setMemberInfoModel(myMemberInfoModel);
myMemberSelectionPanel.getTable().addMemberInfoChangeListener(myMemberInfoModel);
panel.add(myMemberSelectionPanel, BorderLayout.CENTER);
@Override
protected void addCustomElementsToCentralPanel(JPanel panel) {
myJavaDocPanel = new DocCommentPanel(RefactoringBundle.message("javadoc.for.abstracts"));
myJavaDocPanel.setPolicy(JavaRefactoringSettings.getInstance().PULL_UP_MEMBERS_JAVADOC);
boolean hasJavadoc = false;
@@ -233,14 +161,17 @@ public class PullUpDialog extends RefactoringDialog {
}
UIUtil.setEnabled(myJavaDocPanel, hasJavadoc, true);
panel.add(myJavaDocPanel, BorderLayout.EAST);
return panel;
}
private final InterfaceContainmentVerifier myInterfaceContainmentVerifier =
new InterfaceContainmentVerifier() {
public boolean checkedInterfacesContain(PsiMethod psiMethod) {
return PullUpHelper.checkedInterfacesContain(myMemberInfos, psiMethod);
}
};
@Override
protected AbstractMemberSelectionTable<PsiMember, MemberInfo> createMemberSelectionTable(List<MemberInfo> infos) {
return new MemberSelectionTable(infos, RefactoringBundle.message("make.abstract"));
}
@Override
protected DelegatingMemberInfoModel<PsiMember, MemberInfo> createMemberInfoModel() {
return new MyMemberInfoModel();
}
private class MyMemberInfoModel extends UsesAndInterfacesDependencyMemberInfoModel {
public MyMemberInfoModel() {
@@ -296,11 +227,9 @@ public class PullUpDialog extends RefactoringDialog {
PsiClass currentSuperClass = getSuperClass();
if (currentSuperClass != null && currentSuperClass.isInterface()) {
PsiElement element = member.getMember();
if (element instanceof PsiModifierListOwner) {
if (((PsiModifierListOwner) element).hasModifierProperty(PsiModifier.STATIC)) {
return super.checkForProblems(member);
}
PsiMember element = member.getMember();
if (element.hasModifierProperty(PsiModifier.STATIC)) {
return super.checkForProblems(member);
}
return OK;
}
@@ -1,14 +0,0 @@
package com.intellij.refactoring.ui;
import com.intellij.psi.PsiElement;
import com.intellij.refactoring.classMembers.MemberInfoBase;
import javax.swing.*;
/**
* Nikolay.Tropin
* 8/20/13
*/
public abstract class AbstractMemberSelectionPanel<T extends PsiElement, M extends MemberInfoBase<T>> extends JPanel {
public abstract AbstractMemberSelectionTable<T, M> getTable();
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2009 JetBrains s.r.o.
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -0,0 +1,150 @@
/*
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.refactoring.memberPullUp;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.refactoring.RefactoringBundle;
import com.intellij.refactoring.classMembers.AbstractMemberInfoStorage;
import com.intellij.refactoring.classMembers.DelegatingMemberInfoModel;
import com.intellij.refactoring.classMembers.MemberInfoBase;
import com.intellij.refactoring.classMembers.MemberInfoChange;
import com.intellij.refactoring.ui.AbstractMemberSelectionTable;
import com.intellij.refactoring.ui.MemberSelectionPanelBase;
import com.intellij.refactoring.ui.RefactoringDialog;
import com.intellij.usageView.UsageViewUtil;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.List;
/**
* @author Max Medvedev
*/
public abstract class PullUpDialogBase<Storage extends AbstractMemberInfoStorage<Member, Class, MemberInfo>,
MemberInfo extends MemberInfoBase<Member>,
Member extends PsiElement,
Class extends PsiElement> extends RefactoringDialog {
protected MemberSelectionPanelBase<Member, MemberInfo, AbstractMemberSelectionTable<Member, MemberInfo>> myMemberSelectionPanel;
protected DelegatingMemberInfoModel<Member, MemberInfo> myMemberInfoModel;
protected final Class myClass;
protected final List<Class> mySuperClasses;
protected final Storage myMemberInfoStorage;
protected List<MemberInfo> myMemberInfos;
private JComboBox myClassCombo;
public PullUpDialogBase(Project project, Class aClass, List<Class> superClasses, Storage memberInfoStorage, String title) {
super(project, true);
myClass = aClass;
mySuperClasses = superClasses;
myMemberInfoStorage = memberInfoStorage;
myMemberInfos = myMemberInfoStorage.getClassMemberInfos(aClass);
setTitle(title);
}
@Nullable
public Class getSuperClass() {
if (myClassCombo != null) {
return (Class) myClassCombo.getSelectedItem();
}
else {
return null;
}
}
public List<MemberInfo> getSelectedMemberInfos() {
ArrayList<MemberInfo> list = new ArrayList<MemberInfo>(myMemberInfos.size());
for (MemberInfo info : myMemberInfos) {
if (info.isChecked() && myMemberInfoModel.isMemberEnabled(info)) {
list.add(info);
}
}
return list;
}
protected JComponent createNorthPanel() {
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
GridBagConstraints gbConstraints = new GridBagConstraints();
gbConstraints.insets = new Insets(4, 0, 4, 8);
gbConstraints.weighty = 1;
gbConstraints.weightx = 1;
gbConstraints.gridy = 0;
gbConstraints.gridwidth = GridBagConstraints.REMAINDER;
gbConstraints.fill = GridBagConstraints.BOTH;
gbConstraints.anchor = GridBagConstraints.WEST;
final JLabel classComboLabel = new JLabel();
panel.add(classComboLabel, gbConstraints);
myClassCombo = new JComboBox(mySuperClasses.toArray());
initClassCombo(myClassCombo);
classComboLabel.setText(RefactoringBundle.message("pull.up.members.to", UsageViewUtil.getLongName(myClass)));
classComboLabel.setLabelFor(myClassCombo);
final Class preselection = getPreselection();
int indexToSelect = 0;
if (preselection != null) {
indexToSelect = mySuperClasses.indexOf(preselection);
}
myClassCombo.setSelectedIndex(indexToSelect);
myClassCombo.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
updateMemberInfo();
}
}
});
gbConstraints.gridy++;
panel.add(myClassCombo, gbConstraints);
return panel;
}
protected abstract void initClassCombo(JComboBox classCombo);
protected abstract Class getPreselection();
private void updateMemberInfo() {
final Class targetClass = (Class) myClassCombo.getSelectedItem();
myMemberInfos = myMemberInfoStorage.getIntermediateMemberInfosList(targetClass);
}
protected JComponent createCenterPanel() {
JPanel panel = new JPanel(new BorderLayout());
myMemberSelectionPanel = new MemberSelectionPanelBase<Member, MemberInfo, AbstractMemberSelectionTable<Member, MemberInfo>>(RefactoringBundle.message("members.to.be.pulled.up"), createMemberSelectionTable(myMemberInfos));
myMemberInfoModel = createMemberInfoModel();
myMemberInfoModel.memberInfoChanged(new MemberInfoChange<Member, MemberInfo>(myMemberInfos));
myMemberSelectionPanel.getTable().setMemberInfoModel(myMemberInfoModel);
myMemberSelectionPanel.getTable().addMemberInfoChangeListener(myMemberInfoModel);
panel.add(myMemberSelectionPanel, BorderLayout.CENTER);
addCustomElementsToCentralPanel(panel);
return panel;
}
protected void addCustomElementsToCentralPanel(JPanel panel) { }
protected abstract AbstractMemberSelectionTable<Member,MemberInfo> createMemberSelectionTable(List<MemberInfo> infos);
protected abstract DelegatingMemberInfoModel<Member, MemberInfo> createMemberInfoModel();
}
@@ -0,0 +1,29 @@
/*
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.refactoring.ui;
import com.intellij.psi.PsiElement;
import com.intellij.refactoring.classMembers.MemberInfoBase;
import javax.swing.*;
/**
* Nikolay.Tropin
* 8/20/13
*/
public abstract class AbstractMemberSelectionPanel<T extends PsiElement, M extends MemberInfoBase<T>> extends JPanel {
public abstract AbstractMemberSelectionTable<T, M> getTable();
}
@@ -0,0 +1,51 @@
/*
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.refactoring.ui;
import com.intellij.psi.PsiElement;
import com.intellij.refactoring.classMembers.MemberInfoBase;
import com.intellij.ui.ScrollPaneFactory;
import com.intellij.ui.SeparatorFactory;
import javax.swing.*;
import java.awt.*;
/**
* @author Max Medvedev
*/
public class MemberSelectionPanelBase<Member extends PsiElement,
MemberInfo extends MemberInfoBase<Member>,
Table extends AbstractMemberSelectionTable<Member, MemberInfo>> extends AbstractMemberSelectionPanel<Member, MemberInfo> {
private final Table myTable;
/**
* @param title if title contains 'm' - it would look and feel as mnemonic
*/
public MemberSelectionPanelBase(String title, Table table) {
super();
setLayout(new BorderLayout());
myTable = table;
JScrollPane scrollPane = ScrollPaneFactory.createScrollPane(myTable);
add(SeparatorFactory.createSeparator(title, myTable), BorderLayout.NORTH);
add(scrollPane, BorderLayout.CENTER);
}
public Table getTable() {
return myTable;
}
}