new*_*bie 5 java swing jtabbedpane
我创建了一个简单的代码:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
此代码,可以按索引选择选项卡。
在我的问题中,如何通过查找标题来选择标签。因此,如果我输入“ compiler”,则可以选择标题为“ compiler”的标签。
您可以简单地遍历选项卡并找到具有给定名称的选项卡的索引:
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;
}
Run Code Online (Sandbox Code Playgroud)
然后在你的代码中调用 findTabByName() 传递用户输入(和组件),如果返回的索引不是-1你可以调用tab.setSelectedIndex()
简单:做你自己的家务:你创建一个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);
}
Run Code Online (Sandbox Code Playgroud)
(好吧,不仅是为了方便,也是为了确保进入窗格的所有组件也都进入地图!)
然后,您只需替换
tab.add("code",new JPanel());
Run Code Online (Sandbox Code Playgroud)
和
addComponentToPaneAndMap("code", new JPanel());
Run Code Online (Sandbox Code Playgroud)
稍后,当您需要访问选项卡中的某个组件时;您可以进行简单的查找,例如:
Component someComponent = componentsByName.get("compiler");
Run Code Online (Sandbox Code Playgroud)
请注意:
如果您认为您会更频繁地需要它,那么创建您自己的JTabbedPane子类甚至是合理的,该子类使用上述机制并已经提供了相应的 getter 方法。
| 归档时间: |
|
| 查看次数: |
1452 次 |
| 最近记录: |