2015-12-10 3 views
0

У меня есть класс Jpanel, представляющий 3 панели для каждой вкладки. Он решает, что добавить на панель, а что нет. Тогда у меня есть класс, где храню свои данные, которые использует программа. но когда я делаю 3 экземпляра, по одному для каждой вкладки, я должен убедиться, что класс данных одинаков для каждого экземпляра и что даже когда он будет изменен, он все равно останется прежним.Общий экземпляр класса над несколькими вкладками Jpanel

Здесь я создании экземпляра вкладки, и я передать номер вкладки и данные (Mensola)

Mensola m = new Mensola(20); 

    JTabbedPane tabbedPane = new JTabbedPane(); 

    JComponent panel1 = new MyPanel1(1,m); 
    tabbedPane.addTab("Aggiungi",null ,panel1,"Aggiungi"); 

    JComponent panel2 = new MyPanel1(2,m); 
    tabbedPane.addTab("Cerca",null, panel2,"Cerca"); 

    JComponent panel3 = new MyPanel1(3,m); 
    tabbedPane.addTab("Togli",null, panel3,"Togli"); 

    add(tabbedPane); 

    tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT); 

Panel класс:

import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*; 
import javax.swing.event.*; 

public class MyPanel1 extends JPanel implements ActionListener, ListSelectionListener{ 

    private Libro temp; 

    ActionEvent Event; 

    Mensola m = new Mensola(20); 

    private String sTemp = "Non conosiuto"; 

    private JLabel title; 
    private JLabel author; 
    private JLabel editor; 
    private JLabel pages; 
    private JLabel price; 
    private JLabel type; 
    private JLabel inProduzione; 
    private JLabel message; 
    private JLabel nummeroLibri; 

    private JRadioButton si; 
    private JRadioButton no; 

    private ButtonGroup group; 

    private JList list; 

    private String[] generi = {"Horror", "Commedia", "Thriller", "Comic"}; 

    private JTextField titleField; 
    private JTextField authorField; 
    private JTextField editorField; 
    private JTextField pagesField; 
    private JTextField priceField; 

    private JButton aggiungi; 
    private JButton cerca; 
    private JButton togli; 

    public MyPanel1(int sheet,Mensola x){ 

     m = x; 

     this.setLayout(new FlowLayout()); 

     m = new Mensola(20); 

     title = new JLabel("Titolo: "); 
     author = new JLabel("autore: "); 
     editor = new JLabel("editore: "); 
     pages = new JLabel("pagine: "); 
     price = new JLabel("prezzo: "); 

     type = new JLabel("genere: "); 
     type.setPreferredSize(new Dimension(280,20)); 

     inProduzione = new JLabel("In porduzione: "); 

     message = new JLabel(""); 
     message.setPreferredSize(new Dimension(280,170)); 

     nummeroLibri = new JLabel("Nummero di liberi: 0"); 

     list = new JList(generi); 
     list.addListSelectionListener(this); 
     list.setPreferredSize(new Dimension(280,70)); 

     titleField = new JTextField("",20); 
     authorField = new JTextField("",20); 
     editorField = new JTextField("",20); 
     pagesField = new JTextField("",20); 
     priceField = new JTextField("",20); 

     aggiungi = new JButton("Aggiungi Libro"); 
     aggiungi.addActionListener(this); 
     aggiungi.setPreferredSize(new Dimension(280,30)); 

     cerca = new JButton("Cerca Libro In Base Al Titolo"); 
     cerca.addActionListener(this); 
     cerca.setPreferredSize(new Dimension(280,30)); 

     togli = new JButton("Togli Libro In Base Al Titolo"); 
     togli.addActionListener(this); 
     togli.setPreferredSize(new Dimension(280,30)); 

     si = new JRadioButton("Si"); 
     si.addActionListener(this); 
     no = new JRadioButton("No"); 
     no.addActionListener(this); 
     group = new ButtonGroup(); 
     group.add(si); 
     group.add(no); 

     if(sheet == 1){ 
      this.add(title); 
      this.add(titleField); 
      this.add(author); 
      this.add(authorField); 
      this.add(editor); 
      this.add(editorField); 
      this.add(pages); 
      this.add(pagesField); 
      this.add(price); 
      this.add(priceField); 
      this.add(inProduzione); 
      this.add(si); 
      this.add(no); 
      this.add(type); 
      this.add(list); 
      this.add(aggiungi); 
      this.add(nummeroLibri); 
      this.add(message); 

     }else if (sheet == 2){ 
      this.add(title); 
      this.add(titleField); 
      this.add(cerca); 
      this.add(nummeroLibri); 
      this.add(message); 

     }else { 
      this.add(title); 
      this.add(titleField); 
      this.add(togli); 
      this.add(nummeroLibri); 
      this.add(message); 
     } 
    } 
} 
+0

Так что удалите 'm = new Mensola (20);' в конструкторе вашей панели? – Manu

ответ

1

Если я правильно понимаю вашу проблему правильно, вы можете для использования Singleton Design Pattern.

Таким образом, вместо создания новых объектов каждый раз вы создаете метод getInstance(), который либо создает новый объект (если его еще нет), либо возвращает текущий экземпляр. Поэтому гарантируется, что вы всегда работаете с одним и тем же экземпляром объекта.

Другой метод будет использовать переменную-конструктор каждый раз, но вы не должны создавать новый объект, иначе вы будете использовать разные экземпляры, конечно.

Edit: уточнить мой ответ:

Добавьте метод getInstance() к классу Mensola. Упрощенная:

private static Mensola mensolaInstance; 
[...] 
public static Mensola getInstance() { 
    if (mensolaInstance == null) 
     mensolaInstance = new Mensola(20); // or whatever 
    return mensolaInstance; 
} 

В любое время и в любом месте вы хотите получить доступ к объекту Mensola, вы просто используете Mensola.getInstance(). Вам больше не нужно передавать его в качестве параметра.

Для этого класса A требуется Mensola, вы можете позвонить getInstance() оттуда. Позже, класс B должен работать с Mensola, снова вы просто вызываете getInstance().

+0

Итак, в примере я не использую 'inctance', но' m' – BRHSM

+0

Да, вы можете использовать m так же, как и вы, но вы не можете создать новый объект в конструкторе. Если вы хотите изменить существующий экземпляр, вы должны использовать метод, если что-то изменилось, т. Е. 'M.setParameter (20);' вместо 'new Mensola (20);' – LordAnomander

+0

Как мне это сделать. Я не знаю, как бы я это сделал. – BRHSM

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