Select 标签按标题
Select tab by title
我已经创建了一个简单的代码:
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();
}
}
这段代码,可以select按索引编辑标签。
在我的问题中,如何通过查找标题来 selected 选项卡。所以如果我输入 "compiler" 它可以 select 标签那个标题 "compiler".
简单:做你自己的内务管理:你创建一个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");
请注意:
- 我 "fixed" 你的名字 class - class 名字总是以大写开头。
- 我将您的字段更改为私有字段和最终字段 - 这就像您应该争取的 "default":确保您的 [=47= 的 internals ]es 留在内部(使用私有);并且您无需担心不小心覆盖它们的内容(使用 final)。
如果您认为您会更频繁地需要它,创建您自己的 JTabbedPane 的 subclass 甚至是合理的,它使用上述机制并提供相应的getter 个方法。
您可以简单地遍历选项卡并找到具有给定名称的索引:
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() 并传递用户输入(和组件),如果返回的索引不是 -1
,您可以调用 tab.setSelectedIndex()
我已经创建了一个简单的代码:
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();
}
}
这段代码,可以select按索引编辑标签。
在我的问题中,如何通过查找标题来 selected 选项卡。所以如果我输入 "compiler" 它可以 select 标签那个标题 "compiler".
简单:做你自己的内务管理:你创建一个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");
请注意:
- 我 "fixed" 你的名字 class - class 名字总是以大写开头。
- 我将您的字段更改为私有字段和最终字段 - 这就像您应该争取的 "default":确保您的 [=47= 的 internals ]es 留在内部(使用私有);并且您无需担心不小心覆盖它们的内容(使用 final)。
如果您认为您会更频繁地需要它,创建您自己的 JTabbedPane 的 subclass 甚至是合理的,它使用上述机制并提供相应的getter 个方法。
您可以简单地遍历选项卡并找到具有给定名称的索引:
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() 并传递用户输入(和组件),如果返回的索引不是 -1
,您可以调用 tab.setSelectedIndex()