2016-09-15 6 views
1

У меня есть создать простой код:Выберите вкладку по названию

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(); 
    } 
} 

этот код, он может выбран вкладку по индексу.

в моем вопросе, как выбрать вкладку, найдя название. поэтому, если я ввожу «компилятор», он может выбрать вкладку «title» компилятора.

ответ

2

Простой: сделайте свой собственными силами Уборка: вы создаете Map<String, Component> componentsByName; и всякий раз, когда вы добавляете компонент в свою вкладку, вы добавляете этот компонент к этой карте.

Конечно, вы хотели бы сделать это максимально удобным; так что вы должны сделать что-то вроде:

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"); 

Обратите внимание:

  1. I «фиксированный» имя вашего класса - имена классов всегда начинают UpperCase.
  2. Я изменил свои поля, чтобы быть закрытыми & final - это похоже на «по умолчанию», за которым вы должны стремиться: убедитесь, что внутренние внутренности ваших классов остаются внутренними (с использованием личных данных); и что вам не нужно беспокоиться о том, чтобы случайно перезаписать их содержимое (используя окончательный вариант).

Если вы думаете, что вам нужно будет это чаще, это было бы даже разумно, чтобы создать свой собственный подкласс из JTabbedPane, который использует вышеуказанные механизмы и обеспечивает соответствующие методы геттер уже.

+0

Можете ли вы сделать пример из моего кода? Мне немного сложно понять ваш ответ, извините, я начинаю. – newbie

+0

Кажется, так. Просто внимательно посмотрите: код, который я положил в своем ответе, должен быть просто добавлен ** к вашей текущей базе кода. Ну, одна незначительная часть пропала; который я добавлю за секунду. Другими словами: у вас уже есть решение для вашей базы кода. Не поймите меня теперь неправильно: если ваши навыки действительно находятся на уровне, который вы не понимаете; то я бы предложил STOP написать UI-материал на данный момент.Потому что тогда вам не хватает супер-базовых знаний о Java. Затем вы должны сначала изучить эти ** основы **; вместо того, чтобы пытаться создавать приложения пользовательского интерфейса. – GhostCat

+0

OK; обновил мой ответ. Он действительно содержит все элементы, которые вам нужны; вам просто нужно втянуть их в свой код! Сообщите мне, если это сработает для вас; и если да, не забывайте о принятии ответа ;-) – GhostCat

3

Вы можете просто перебирать вкладки и найти индекс одной с заданным именем:

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()

+0

что такое индекс? – newbie

+0

@newbie: извините, опечатка. Это должно быть 'i' (переменная из цикла) –

+0

следует написать' findTabByName («компилятор», вкладка); 'внутри кнопки прослушивателя? Кажется, я не работаю. – newbie

Смежные вопросы