2016-03-25 4 views
0

私はパネルの内容をグラフィカルにデザインし、jframeで可能なすべてのメソッドをデザインし、別のフレームで他のフレームのインスタンスを作成してパネルを取得して影響を及ぼす必要がある別のjframeでそのパネルを使用します私の現在のjframeのパネル。ここ他のJframeの別のパネルからJframeのパネルコンテンツを設定するのが効果がないのはなぜですか?

は私が 私の設計されたパネルのモデルが含まれている最初のJFrameをしようとしたコードは次のとおりです。

私は最初のフレームを呼び出し、私はモデル化1にパネルを設定
package chemsou; 

    import java.util.Hashtable; 
    import javax.swing.JCheckBox; 
    import javax.swing.JPanel; 

    public class CheckListe extends javax.swing.JFrame { 

    /** 
    * Creates new form NewJFrame 
    */ 
    Hashtable<String, JCheckBox> model = new Hashtable<>(); 
    public JPanel getPanel(){ 
     return jPanel1; 
    } 

    public CheckListe(String[] list) { 
     initComponents(); 
     jPanel1.setLayout(new java.awt.GridLayout(0, 1, 0, 4)); 
     for (String element : list) { 

      model.put(element, new JCheckBox(element)); 
      jPanel1.add(model.get(element)); 
     } 

    } 

    public CheckListe() { 

     initComponents(); 

    } 
    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code">       
    private void initComponents() { 

    jPanel1 = new javax.swing.JPanel(); 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

    jPanel1.setLayout(new java.awt.GridLayout(0, 1, 0, 4)); 

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
    getContentPane().setLayout(layout); 
    layout.setHorizontalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 93, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addGap(0, 388, Short.MAX_VALUE)) 
    ); 
    layout.setVerticalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 535, Short.MAX_VALUE) 
    ); 

    pack(); 
}// </editor-fold>       

/** 
* @param args the command line arguments 
*/ 
    public static void main(String args[]) { 
     /* Set the Nimbus look and feel */ 
     //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> 
     /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. 
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */ 
     try { 
      for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
       if ("Nimbus".equals(info.getName())) { 
        javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
        break; 
       } 
      } 
     } catch (ClassNotFoundException ex) { 
      java.util.logging.Logger.getLogger(CheckListe.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(CheckListe.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(CheckListe.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(CheckListe.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } 
     //</editor-fold> 
     //</editor-fold> 

     /* Create and display the form */ 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new CheckListe().setVisible(true); 
      } 
     }); 
    } 

    // Variables declaration - do not modify      
    private javax.swing.JPanel jPanel1; 
    // End of variables declaration     
} 

私のJFrame:

private void jRadioButton1ActionPerformed(java.awt.event.ActionEvent evt) {            
    // TODO add your handling code here: 
    String[] list =new String[]{"e1","e2","e3"}; 
    CheckListe checkListe = new CheckListe(list); 
    // CheckListePanel.setLayout(checkListe.getPanel().getLayout()); 
    CheckListePanel = checkListe.getPanel(); 

    checkListe.setVisible(true); 
    CheckListePanel.setVisible(true); 
    CheckListePanel.setSize(100, 500); 
    CheckListePanel.revalidate(); 
    CheckListePanel.repaint(); 
    System.out.println("done"); 
}            

私は他のJFrameが設計されたパネルが、発信者のJFrameは、どのようなI MS何

を行ういけない含まれていることを見ることができるコードを実行しますやりたい?

+1

さて、私は混乱している:上記のクラスは/選択が行われたとき、このクラスの別のコンポーネント、JListのは、新しい選択を表示することができるようにクラスにPropertyChangeListenerを追加したJPanelは、使用しています。最初のフレームのプロパティを設定しようとしていますか?別のフレームでパネルを再利用しようとしていますか? – MadProgrammer

+0

[複数のJFramesの使い方、良い/悪い練習]を参照してください(http://stackoverflow.com/q/9554636/418556) –

+0

@HovercraftFullOfEels私が本当に欲しいのは、次のように言いましょう。あなたパネルこのフレームでデザインしたパネル。パネルは言う:私は自分自身を変身させ、私はあなたと同じようになり、あなたが望むパネルのように行動します。最終的に私のパネルには私がグラフィカルにデザインしたものがあることがわかります。どうやってするの?私はそれを見つけようとしています。 –

答えて

1
  1. CheckListePanel変数に入れているJPanelオブジェクトでは、何もしないので、表示することができます。
  2. JPanelオブジェクトを追加する必要があります。
  3. また、コンポーネントを1つのコンテナに追加することもできます。一度しか見ることができません。
  4. JPanelを作成するために初めて使用する場合は、最初のコードでJFrameを作成するのはなぜですか?
  5. お願い:"is there a way to make a copy a the panel that i designed" - ありがとうございます。それを作成するのではなく、何らかのファクトリメソッドでJPanelを作成します。たとえば、public JPanel createMyPanel() { /* creational code goes in here */ }
  6. JPanelを拡張してこのようにJPanelオブジェクトを作成するクラスを作成します。たとえば、

、ここでのJRadioButtonの列として文字列のリストを表示して、選択のいずれかのオブザーバーを通知するのJPanelを作成するクラスです:

import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.List; 
import javax.swing.*; 
import javax.swing.border.Border; 

@SuppressWarnings("serial") 
public class BunchARadios extends JPanel { 
    private static final int GAP = 5; 
    public static final String SELECTION = "selection"; 
    private ButtonGroup buttonGroup = new ButtonGroup(); 

    public BunchARadios(String title, List<String> radioLabels) { 
     Border innerBorder = BorderFactory.createEmptyBorder(GAP, GAP, GAP, GAP); 
     Border outerBorder = BorderFactory.createTitledBorder(title); 
     Border border = BorderFactory.createCompoundBorder(outerBorder, innerBorder); 
     setBorder(border); 
     setLayout(new GridLayout(0, 1, GAP, GAP)); 

     RButtonListener rButtonListener = new RButtonListener(); 
     for (String radioLabel : radioLabels) { 
      JRadioButton radioButton = new JRadioButton(radioLabel); 
      radioButton.setActionCommand(radioLabel); 
      add(radioButton); 
      buttonGroup.add(radioButton); 
      radioButton.addActionListener(rButtonListener); 
     }   
    } 

    public String getSelection() { 
     ButtonModel model = buttonGroup.getSelection(); 
     if (model == null) { 
      return null; // throw exception? 
     } else { 
      return model.getActionCommand(); 
     } 
    } 

    private class RButtonListener implements ActionListener { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      firePropertyChange(SELECTION, null, e.getActionCommand()); 
     } 
    } 
} 

そして、ここでは、そのクラスです

import java.awt.BorderLayout; 
import java.beans.PropertyChangeEvent; 
import java.beans.PropertyChangeListener; 
import java.util.Arrays; 
import java.util.List; 
import javax.swing.*; 

@SuppressWarnings("serial") 
public class TestBunchARadios extends JPanel { 
    private static final int GAP = 5; 
    private String title = "Weekdays"; 
    private List<String> labels = Arrays.asList(new String[] { "Monday", "Tuesday", "Wednesday", 
      "Thursday", "Friday" }); 
    private BunchARadios bunchARadios = new BunchARadios(title, labels); 
    private DefaultListModel<String> listModel = new DefaultListModel<>(); 
    private JList<String> selectionList = new JList<>(listModel); 

    public TestBunchARadios() { 
     selectionList.setPrototypeCellValue("xxxxxxxxxxxxxxxxx"); 
     selectionList.setVisibleRowCount(5); 
     JScrollPane scrollPane = new JScrollPane(selectionList); 
     scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 

     setBorder(BorderFactory.createEmptyBorder(GAP, GAP, GAP, GAP)); 
     setLayout(new BorderLayout(GAP, GAP)); 
     add(bunchARadios, BorderLayout.CENTER); 
     add(scrollPane, BorderLayout.LINE_END); 

     bunchARadios.addPropertyChangeListener(BunchARadios.SELECTION, 
       new BunchARadiosChangeListener()); 
    } 

    private class BunchARadiosChangeListener implements PropertyChangeListener { 
     @Override 
     public void propertyChange(PropertyChangeEvent evt) { 
      String selection = (String) evt.getNewValue(); 
      listModel.addElement(selection); 
     } 
    } 

    private static void createAndShowGui() { 
     TestBunchARadios mainPanel = new TestBunchARadios(); 

     JFrame frame = new JFrame("TestBunchARadios"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(() -> { 
      createAndShowGui(); 
     }); 
    } 
} 
+3

*「JPanelを作成するためにのみ使用する場合、最初のコードでJFrameを作成するのはなぜですか?」* - これは答えが必要な質問です:P – MadProgrammer

+0

@Hovercraft Full Of Eels私が設計したパネルをコピーしてください。 –

+0

@MohammedHousseynTaleb:編集してください。 –

関連する問題