2016-05-01 3 views
-2

я создаю этот класс JPanelCaso, который расширяет JPanel:Java Swing: Не могу видеть компоненты класса, который расширяет JPanel

public class JPanelCaso extends JPanel implements MouseListener{ 
    JCheckBox checkBox; 
    JTextArea textArea; 
    String frasePerCliente = ""; 
    private int distanzaDaBordi = 0; 
    private int distanzaCheckTextA = 5; 
    private SpringLayout layoutPnlCaso = new SpringLayout(); 

    /** 
    * Costruttore della classe Caso 
    * 
    * @param checkBox l' oggetto di tipo JCheckBox relativo al caso 
    * @param textArea l' oggetto di tipo JtextArea relativo al caso 
    */ 
    JPanelCaso(String strTitoloCaso, String frasePerCliente){ 
     this.addMouseListener(this); 

     checkBox = new JCheckBox(); 
     checkBox.addMouseListener(this); 

     textArea = new JTextArea(strTitoloCaso); 
     textArea.setLineWrap(true); 
     textArea.setWrapStyleWord(true); 
     textArea.addMouseListener(this); 
     textArea.setEditable(false); 

     this.frasePerCliente = frasePerCliente; 

     componiPannello(); 

    } 

    private void componiPannello() { 
     this.setLayout(layoutPnlCaso); 

     //Dispongo i controlli 
     layoutPnlCaso.putConstraint(SpringLayout.WEST, checkBox, distanzaDaBordi, SpringLayout.WEST, this); 
     layoutPnlCaso.putConstraint(SpringLayout.EAST, checkBox, -distanzaCheckTextA, SpringLayout.WEST, textArea); 
     layoutPnlCaso.putConstraint(SpringLayout.WEST, textArea, -distanzaDaBordi, SpringLayout.WEST, this); 
     layoutPnlCaso.putConstraint(SpringLayout.NORTH, checkBox, distanzaDaBordi, SpringLayout.NORTH, this); 
     layoutPnlCaso.putConstraint(SpringLayout.NORTH, textArea, distanzaDaBordi, SpringLayout.NORTH, this); 
     layoutPnlCaso.putConstraint(SpringLayout.SOUTH, textArea, distanzaDaBordi, SpringLayout.SOUTH, this); 

     this.add(checkBox); 
     this.add(textArea); 

    } 
} 

Чем я буду вставлять различные JPanelCaso в JPanel, который является визитной карточкой другого JPanel с карты Компоновка:

public class GuidaBpoEse{ 

    public static void main(String[] args) { 

     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       new GuidaBpoEse(); 
      } 
     }); 
    } 

    public GuidaBpoEse() {  
     creaFinestraMain(); 
    } 


    Workbook wbDbCommentiEse = null; 
    Dimension grandezzaSchermo = Toolkit.getDefaultToolkit().getScreenSize(); 
    int larghezzaMain = (int)(grandezzaSchermo.getWidth() * 0.20); 
    int altezzaMain = (int)(grandezzaSchermo.getHeight() * 0.95); 
    Point inizioMain = new Point((int)grandezzaSchermo.getWidth() - larghezzaMain, 0); 
    JFrame frmMain = new JFrame(); 

    int nFogli; 
    int iFoglio = 0; 
    int righe; //conta le righe del iFoglio fino all' ultima piena 
    int colonne; //conta le colonne del iFoglio fino all' ultima piena 
    int riga; 
    int colonna; 

    int distanzaTraCasi = 5; 
    int distanzaDaBordi = 0; 

    static JTextArea txtaFrasiTrovate; 

    private void creaFinestraMain() { 
     try { 
      wbDbCommentiEse = Workbook.getWorkbook(new File("db.xls")); 
     } catch (BiffException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     nFogli = wbDbCommentiEse.getNumberOfSheets(); 

     ... 

     SpringLayout layoutMain = new SpringLayout(); 
     JPanel pnlMain = new JPanel(layoutMain); 

     ... 

      // Pannello della scelta delle macrocasistiche ================================================== 

      JPanel pnlMacrocasistiche = new JPanel(new GridLayout(nFogli - 2, 1)); 
      JScrollPane spnlMacrocasistiche = null; 
      JButton[] btnMacrocasistiche = new JButton[nFogli]; //Salterò il primo elemento per far corrispondere l' indice dei fogli nel file excel con l' indice dei fogli nell' array di tasti 
      Sheet sAppoggio; 
      iFoglio++; 
      while (iFoglio < nFogli - 1) { 
       iFoglio++; 
       sAppoggio = wbDbCommentiEse.getSheet(iFoglio); 
       btnMacrocasistiche[iFoglio] = new JButton(sAppoggio.getName()); 
       pnlMacrocasistiche.add(btnMacrocasistiche[iFoglio]); 
       btnMacrocasistiche[iFoglio].addMouseListener(new MouseListener() { 

        @Override 
        public void mouseEntered(MouseEvent arg0) { 
         JButton btnAppoggio = (JButton)arg0.getSource(); 
         layoutPnlDettagli.show(pnlDettagli, btnAppoggio.getText()); 
         frmDettagli.setVisible(true); 
        } 

        ... 

       }); 
      } 
      spnlMacrocasistiche = new JScrollPane(pnlMacrocasistiche); 
      spnlMacrocasistiche.setBorder(BorderFactory.createTitledBorder("Macrocasistiche")); 
      pnlMain.add(spnlMacrocasistiche); 
      // ============================================================================================== 



      //Posiziono spnlMacrocasistiche 
      spnlMacrocasistiche.setPreferredSize(new Dimension((int)frmMain.getWidth(), (int)(frmMain.getHeight() * 0.4)));; 
      layoutMain.putConstraint(SpringLayout.NORTH, spnlMacrocasistiche, distanzaDaBordi, SpringLayout.SOUTH, pnlDatiCliente); 
      layoutMain.putConstraint(SpringLayout.WEST, spnlMacrocasistiche, distanzaDaBordi, SpringLayout.WEST, pnlMain); 
      layoutMain.putConstraint(SpringLayout.EAST, spnlMacrocasistiche, -distanzaDaBordi, SpringLayout.EAST, pnlMain); 

     frmMain.add(pnlMain); 
     creaFinestraDettagliCasistiche(); 

     frmMain.validate(); 
     //frmMain.pack(); 
     frmMain.setVisible(true); 
     frmMain.setAlwaysOnTop(true); 


    } 


    JFrame frmDettagli; 
    JPanel pnlDettagli; 
    JScrollPane spnlDettagli; 
    CardLayout layoutPnlDettagli = new CardLayout(); 
    SpringLayout layoutPnlCasistiche = new SpringLayout(); 

    private void creaFinestraDettagliCasistiche() { 
     int larghezzaFrmDettagli = (int)(grandezzaSchermo.getWidth() * 0.15); 
     int altezzaFrmDettagli = altezzaMain; 
     frmDettagli = new JFrame(); 
     frmDettagli.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frmDettagli.setTitle("Controllo documenti ESE"); 
     frmDettagli.setSize(larghezzaFrmDettagli, altezzaFrmDettagli); 
     Point inizioFrmDettagli = new Point((int)(inizioMain.getX() - frmDettagli.getWidth()), (int)(inizioMain.getY())); 
     frmDettagli.setLocation(inizioFrmDettagli); 


      pnlDettagli = new JPanel(layoutPnlDettagli); 
      Dimension dimMinPnlDettagli = new Dimension((int)(frmDettagli.getWidth()), (int)frmDettagli.getHeight()); 
      pnlDettagli.setPreferredSize(dimMinPnlDettagli); 

      iFoglio = 1; 
      Sheet sAppoggio; 
      JPanel[] pnlCasistiche = new JPanel[nFogli]; 
      JPanelCaso[] pnlCaso; 

      while (iFoglio < nFogli - 1) { 
       iFoglio++; 
       sAppoggio = wbDbCommentiEse.getSheet(iFoglio); 
       righe = sAppoggio.getRows(); 
       colonne = sAppoggio.getColumns(); 
       riga = 0; 
       colonna = 0; 

       pnlCasistiche[iFoglio] = new JPanel(layoutPnlCasistiche); 
       pnlCasistiche[iFoglio].setBorder(BorderFactory.createTitledBorder(sAppoggio.getName())); 
        pnlCaso = new JPanelCaso[righe]; 
        while (riga < righe) { 
         pnlCaso[riga] = new JPanelCaso(sAppoggio.getCell(colonna, riga).getContents(), sAppoggio.getCell(colonna + 1, riga).getContents()); 


         //pnlCasistiche[iFoglio].add(new JLabel("Prova")); 

         pnlCasistiche[iFoglio].setSize(frmDettagli.getSize()); 
         if (riga == 0) { 
          layoutPnlCasistiche.putConstraint(SpringLayout.NORTH, pnlCaso[riga], distanzaDaBordi, SpringLayout.NORTH, pnlCasistiche[iFoglio]); 
          layoutPnlCasistiche.putConstraint(SpringLayout.WEST, pnlCaso[riga], distanzaDaBordi, SpringLayout.WEST, pnlCasistiche[iFoglio]); 
          layoutPnlCasistiche.putConstraint(SpringLayout.EAST, pnlCaso[riga], distanzaDaBordi, SpringLayout.EAST, pnlCasistiche[iFoglio]); 
         } else { 
          layoutPnlCasistiche.putConstraint(SpringLayout.NORTH, pnlCaso[riga], distanzaTraCasi, SpringLayout.SOUTH, pnlCaso[riga - 1]); 
          layoutPnlCasistiche.putConstraint(SpringLayout.WEST, pnlCaso[riga], distanzaDaBordi, SpringLayout.WEST, pnlCasistiche[iFoglio]); 
          layoutPnlCasistiche.putConstraint(SpringLayout.EAST, pnlCaso[riga], distanzaDaBordi, SpringLayout.EAST, pnlCasistiche[iFoglio]); 
         } 
         pnlCasistiche[iFoglio].add(pnlCaso[riga]); 
         riga++; 
        } 

        pnlDettagli.add(pnlCasistiche[iFoglio], sAppoggio.getName()); 


      } 

      pnlDettagli.addMouseListener(new MouseListener() { 

       ... 

       @Override 
       public void mouseExited(MouseEvent e) { 
        frmDettagli.dispose(); 

       } 

       ... 

      }); 

      frmDettagli.add(pnlDettagli); 
      frmDettagli.validate(); 
    } 

} 

карточки pnlDettagli которые показали, и я могу видеть границу, но я не могу видеть содержимое, различная pnlCaso [рига];

Я не могу понять, почему. Я поставил Spring Layout, прежде чем добавлять компоненты и файл XLS полна данных

Большое спасибо, кто ответил и извините за мой плохой английский

+1

Пожалуйста, создайте [mcve ], акцент на ** минимальный **. –

+0

@ DarkV1 * «Нам нужны только части ..» * .., которые составляют MCVE. Проводка MCVE гарантирует, что части, необходимые для отображения проблемы, включены в код (снятый). –

+0

Извините за мою плохую практику. Я думаю, что моя проблема в классе, который расширяет JPanel .. –

ответ

-1

Я решен .... Мне просто нужно, чтобы установить нужный размер для моего JPanelCaso .......

Спасибо всем, camickr для прежде всего органов поддержки

+0

(1-) Это не правильное решение. Задача менеджера компоновки - вернуть предпочтительный размер панели. Если диспетчер компоновки НЕ делает этого, вы неправильно используете диспетчер компоновки. Либо не используйте SpringLayout, либо используйте SpringLayout правильно. Прочтите раздел из учебника Swing [Как использовать SpringLayout] (http://docs.oracle.com/javase/tutorial/uiswing/layout/spring.html) для правильных рабочих примеров. Обратите внимание, что в учебнике также будет показано, как лучше структурировать ваш код. – camickr

+0

Вы правы. Я установил все с методом putConstraint –

2
frmMain.add(pnlMain); 
    //frmMain.pack(); 
    frmMain.setVisible(true); 
    frmMain.setAlwaysOnTop(true); 

    creaFinestraDettagliCasistiche(); 

Все компоненты должны быть добавлены к раме ПЕРЕД рама выполнена видимый. Таким образом, код должен быть:

frmMain.add(pnlMain); 
    creaFinestraDettagliCasistiche(); 
    frmMain.pack(); 
    frmMain.setVisible(true); 
    frmMain.setAlwaysOnTop(true); 

Если это не решает проблему, то я бы сказал, что проблема с вашим кодом SpringLayout. Этот макет, как правило, используется только IDE, поскольку определение ограничений может быть затруднено. Я предлагаю вам попробовать другой менеджер компоновки (или комбинацию менеджеров компоновки).

+0

к сожалению он не работал –

+0

@FrancescoPiccolomini, что не сработало? Вы изменили код, чтобы использовать лучший менеджер макетов? – camickr

+0

Я имею в виду put creaFinestraDettagliCasistiche(); перед frmMain.setVisible (true); Когда я добавил один флажок и текстовое поле, он сработал. Я думаю, что я должен использовать объект Caso, содержащий checkBox и textArea, и собрать их в главном классе, вызывающем их из объекта Caso. Я попробую и обращусь к вам –

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