用例:我试图在括号内提取参数并将其填充到jList。
输入:
title(a1, a3)
代码:
static ArrayList variableList = new ArrayList();
Matcher m = Pattern.compile("\\(([^)]+)\\)").matcher(result.toString().trim());
while(m.find())
{
if (!variableList.contains(m.group(1).trim()))
{
variableList.add(m.group(1).trim());
}
}
DefaultListModel lista1 = new DefaultListModel();
for (int i = 0;i<variableList.size();i++)
{
if (!lista1.contains(variableList.get(i)))
{
lista1.addElement(variableList.get(i));
}
}
jList.setModel(lista1);
revalidate();
repaint();
jList中的预期输出:
代码输出:
错误不是垂直填充列表,而是作为一组附加。请建议我如何纠正这个问题。
答案 0 :(得分:1)
问题不在你的JList中,而是你的匹配器逻辑。
如果你总是知道你的&#34;类型&#34;将在括号内,您可以执行以下操作。
// Declare lists
DefaultListModel<String> lista1 = new DefaultListModel<String>();
ArrayList<String> variableList = new ArrayList<String>();
JList<String> jList = new JList<String>();
String result = "type(t1, t2)";
// Get string within parenthesis
result = result.substring(result.indexOf('(') + 1, result.indexOf(')'));
// Split into elements
String[] types = result.split(",");
// For each, add to list if not duplicate
for (int i = 0; i < types.length; i++)
{
String type = types[i].trim();
if (!variableList.contains(type))
{
variableList.add(type);
lista1.addElement(type);
}
}
jList.setModel(lista1);
// Add to frame/revalidate/repaint as needed
此外,参数化您的JList和DefaultListModel。见here