2013-05-12 4 views
0

Почему порядок вкладок в JTabbedPane влияет, если содержимое вкладки работает так, как ожидалось?Вкладки в JTabbedPane влияют на содержимое

Я пишу свое первое расширенное приложение и испытываю некоторые проблемы с моей JTabbedPane. Вот что у меня есть:

public ProjectTracker() { 
    initialize(); 
    newJobTab(); 
    newUpdateTab(); 
    newReportsTab(); 
} 

newJobTab(), newUpdateTab() и newReportsTab() помещаются в JTabbed панели в методе Initialize(). Каждый из них создает экземпляр класса GUI, который я создал. В основном он имеет кучу текстовых полей и comboboxes и т. Д., И они взаимодействуют с базой данных, чтобы заполнить поля или собрать информацию из полей.

Функциональность кнопок на вкладке - основное различие между тремя. Индивидуально каждая вкладка работает так, как я ожидал. Когда я помещаю их в панель Tabbed, только третья вкладка работает правильно. Если я переключаю порядок, это та же сделка. Какая бы ни была третья вкладка, она единственная, которая функционирует так, как я хочу.

Вот мой вариант моего первоначального сообщения ... теперь с кодом.

public class SampleTracker { 

private JFrame frmProjectTracker; 
private JTabbedPane tabbedPane; 
public String Title; 

SampleTJV newJobPanel; 
SampleTJV updatePanel; 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       SampleTracker window = new SampleTracker(); 
       window.frmProjectTracker.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the application. 
*/ 
public SampleTracker() { 
    initialize(); 
    newJobTab(); 
    newUpdateTab(); 
} 

/** 
* Initialize the contents of the frame. 
*/ 
private void initialize() { 
    frmProjectTracker = new JFrame(); 
    frmProjectTracker.setBounds(100, 100, 662, 461); 
    frmProjectTracker.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frmProjectTracker.getContentPane().setLayout(new FormLayout(new ColumnSpec[] { 
      ColumnSpec.decode("662px"),}, 
     new RowSpec[] { 
      RowSpec.decode("50px"), 
      RowSpec.decode("389px"),})); 

    tabbedPane = new JTabbedPane(JTabbedPane.TOP); 
    frmProjectTracker.getContentPane().add(tabbedPane, "1, 2, fill, fill"); 
} 


private void newJobTab(){ 
    newJobPanel = new SampleTJV(); 
    newJobPanel.UpdateButton.setText("Enter Job"); 
    tabbedPane.addTab("Enter New Job", null, newJobPanel, null); 
    newJobPanel.UpdateButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
       newJobPanel.collectInfo(); 
       Title = newJobPanel.Title; 
       //Here the connection to DB is made and the Title is written to DB 
       newJobPanel.newJobField.setText(Title); 
      } 
    }); 
} 

private void newUpdateTab(){ 
    updatePanel = new SampleTJV(); 
    newJobPanel.UpdateButton.setText("Update Job"); 
    tabbedPane.addTab("Update Job", null, updatePanel, null); 
    updatePanel.UpdateButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      updatePanel.collectInfo(); 
      Title = updatePanel.Title; 
      updatePanel.updateJobField.setText(Title); 
     } 
    }); 
} 

}

public class SampleTJV extends JPanel { 

private static final long serialVersionUID = 1L; 
public static JTextField TitleField; 

public String Title; 
public JButton UpdateButton; 
public JTextField newJobField; 
public JTextField updateJobField; 
/** 
* Create the panel. 
*/ 
public SampleTJV() { 
    setLayout(null); 
    TitleField = new JTextField(); 

    TitleField.setColumns(10); 
    TitleField.setBounds(109, 6, 134, 28); 
    add(TitleField); 

    newJobField = new JTextField(); 
    newJobField.setBounds(171, 79, 134, 28); 
    add(newJobField); 
    newJobField.setColumns(10); 

    UpdateButton = new JButton("Update Job"); 
    UpdateButton.setBounds(267, 7, 112, 29); 
    add(UpdateButton); 

    JLabel lblNewJobResult = new JLabel("New Job Result"); 
    lblNewJobResult.setBounds(47, 85, 112, 16); 
    add(lblNewJobResult); 

    JLabel lblUpdateJobResult = new JLabel("Update Job Result"); 
    lblUpdateJobResult.setBounds(47, 125, 112, 16); 
    add(lblUpdateJobResult); 

    updateJobField = new JTextField(); 
    updateJobField.setColumns(10); 
    updateJobField.setBounds(171, 119, 134, 28); 
    add(updateJobField); 

} 

public void collectInfo(){ 
    Title = TitleField.getText(); 
} 

}

+2

Вам нужно будет отправить код. Я предполагаю, что у вас есть статические переменные и методы, которые должны быть переменными и методами экземпляра. Также не забудьте определить, что «не работает». Что происходит точно? Любое исключение? что? –

+0

как вы добавляете эти вкладки в JTabbedPane? некоторый код ...? –

+1

1) * «Я не уверен, как я могу опубликовать больше кода, не отправляя тонны кода». * Для лучшей помощи, скорее всего, отправьте ** [SSCCE] (http://sscce.org/). ** 2) Всегда копировать/вставлять вывод ошибок и исключений. –

ответ

1

Следующая ошибка копирования:

private void newUpdateTab(){ 
    updatePanel = new SampleTJV(); 
    newJobPanel.UpdateButton.setText("Update Job"); 

newJobPanel есть, вероятно, не предназначен.


Также неправильно это поле static GUI:

static JTextField TitleField; 
+0

Вы правы. Это была просто ошибка копирования. Чисто косметический, а не ответ на проблему. – phischer

+0

Тогда 'статический' тоже; не видели в первый раз. –

0

Проблема была именно то, что JB Nizet догадался раньше. Это были статические методы и переменные, которые должны были быть переменными экземпляра. В моем примере кода SampleTJV, если вы удаляете слово static из public static JTextField TitleField; Программа работает точно так, как предполагалось.

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