我创建了一个简单的代码:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
class tab extends JFrame
{
JTabbedPane tab=new JTabbedPane();
JTextField input=new JTextField();
JButton button=new JButton("process");
tab()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(600,600);
setLocation(100,100);
setLayout(new BorderLayout());
add(tab,"Center");
tab.add("code",new JPanel());
tab.add("assembly",new JPanel());
tab.add("compiler",new JPanel());
tab.add("Execution",new JPanel());
tab.add("Structure",new JPanel());
JPanel panel=new JPanel();
add(panel,"South");
panel.setLayout(new BorderLayout());
panel.add(input,"Center");
panel.add(button,"East");
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
tab.setSelectedIndex(Integer.parseInt(input.getText()));
}
});
show();
}
public static void main(String[]args)
{
new tab();
}
}
此代码,它可以按索引选择制表符。
在我的问题中如何通过查找标题来选择标签。所以,如果我输入"编译器"它可以选择标题"编译器"。
答案 0 :(得分:4)
您可以简单地遍历选项卡并找到具有给定名称的索引:
public int findTabByName(String title, JTabbedPane tab)
{
int tabCount = tab.getTabCount();
for (int i=0; i < tabCount; i++)
{
String tabTitle = tab.getTitleAt(i);
if (tabTitle.equals(title)) return i;
}
return -1;
}
然后在你的代码中调用findTabByName()传递用户输入(和compoenent),如果返回的索引不是-1
,你可以调用tab.setSelectedIndex()
答案 1 :(得分:2)
简单:执行拥有内务管理:创建Map<String, Component> componentsByName
;每当您向TabbedPane添加组件时,您也会将该组件添加到该地图中。
当然,您希望尽可能方便;所以你应该做点什么:
public class Tab extends JFrame {
private final JTabbedPane tab=new JTabbedPane();
private final Map<String, Component> componentsByName = new HashMap<>();
...
private void addComponentToPaneAndMap(String title, Component component) {
tab.add(title, component);
componentsByName.put(title, component);
}
(好吧,不仅为了方便起见,还要确保进入您的窗格的所有组件也会进入地图!)
然后,您只需替换
tab.add("code",new JPanel());
带
addComponentToPaneAndMap("code", new JPanel());
稍后,当您需要访问标签中的某个组件时;你可以做一个简单的查找,如:
Component someComponent = componentsByName.get("compiler");
请注意:
如果你认为你会更频繁地需要这个,那么创建你自己的子类的JTabbedPane甚至是合理的,它使用上述机制并提供相应的getter方法。