2016-06-11 4 views
0

Swingで実装されたプログラムのGUIを変更する必要があります。今私は別々のウィンドウで多くのチャートを持っているので、それらをすべて1つだけに表示するように変更したい。元のバージョンの構成では、 JFrameにはJPanelフィールドがありました。 JFrameには設定されたレイアウトがありませんでした。JFrame(レイアウトなし)をJPanelに変更

private void initComponents() {// GEN-BEGIN:initComponents 

     getContentPane().setLayout(null); 

     setTitle("Wykres"); 
     addComponentListener(new java.awt.event.ComponentAdapter() { 
      public void componentResized(java.awt.event.ComponentEvent evt) { 
       resizedWindow(evt); 
      } 
     }); 
     addWindowListener(new java.awt.event.WindowAdapter() { 
      public void windowClosing(java.awt.event.WindowEvent evt) { 
       exitForm(evt); 
      } 
     }); 

     java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); 
     setBounds((screenSize.width - MIN_WIDTH)/2, (screenSize.height - MIN_HEIGHT)/2, MIN_WIDTH, MIN_HEIGHT); 
    } 

次のようにJPanelのが宣言されました:

BorderLayout borderLayout = new BorderLayout(); 
      borderLayout.setHgap(0); 
      borderLayout.setVgap(0); 
      drawPanel = new JDrawPanel(); 
      drawPanel.setLayout(borderLayout); 
      drawPanel.setComponentOrientation(ComponentOrientation.UNKNOWN); 
setContentPane(drawPanel); 

私はJFrameので継承を削除し、JPanelので継承を追加する場合、メソッドpaintComponentが呼び出されません。理由はレイアウト設定が悪いと思う。しかし、プログラムはエッジからの距離を計算し、それを変更したくありません。どうすればこのプログラムを簡単に編集できますか?

私はまた、NetBeansの

contentPaneにはBorderLayoutを設定
public class ViewPanel extends javax.swing.JFrame { 

    public ViewPanel() { 
     // initComponents(); 
    } 
    public ViewPanel(JPanel histo, JPanel dystrybu, JPanel time){ 
     initComponents(histo, dystrybu, time); 
    } 
    /** 
    * This method is called from within the constructor to initialize the form. 
    * WARNING: Do NOT modify this code. The content of this method is always 
    * regenerated by the Form Editor. 
    */ 
    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code">       
    private void initComponents(JPanel histo, JPanel dystrybu, JPanel time) { 

     MainTabs = new javax.swing.JTabbedPane(); 
     jHistoTab = histo; 
     jDystybuTab = dystrybu; 
     jTimeTab = time; 



     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
     setTitle("zaleznosc czasowa"); 

     MainTabs.setToolTipText(""); 
     MainTabs.addTab("histogram", jHistoTab); 
     MainTabs.addTab("dystrybuanta", jDystybuTab); 
     MainTabs.addTab("zalenosc czasowa", jTimeTab); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addContainerGap() 
       .addComponent(MainTabs, javax.swing.GroupLayout.DEFAULT_SIZE, 712, Short.MAX_VALUE) 
       .addContainerGap()) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addContainerGap() 
       .addComponent(MainTabs, javax.swing.GroupLayout.DEFAULT_SIZE, 363, Short.MAX_VALUE) 
       .addContainerGap()) 
     ); 

     MainTabs.getAccessibleContext().setAccessibleName(""); 


     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(ViewPanel.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(ViewPanel.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(ViewPanel.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(ViewPanel.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 ViewPanel().setVisible(true); 
       AppSMO.main(null); 
      } 
     }); 
    } 
    public void setHistoTab(JPanel panel){ 
     jHistoTab=panel; 
    } 

    // Variables declaration - do not modify      
    private javax.swing.JTabbedPane MainTabs; 
    private JPanel jDystybuTab; 
    private JPanel jHistoTab; 
    private JPanel jTimeTab; 
    // End of variables declaration     
} 
+0

Java GUIは、異なるロケールの異なるPLAFを使用して、異なるOS、画面サイズ、画面解像度などで動作する必要があります。したがって、ピクセルの完全なレイアウトには役立ちません。代わりに、レイアウトマネージャや[それらの組み合わせ](http://stackoverflow.com/a/5630271/418556)と[空白](http://stackoverflow.com/a/17874718/)のレイアウトパディングとボーダーを使用してください。 418556)。 –

答えて

0

に新しいGUIを生成しました。パネルをcontentPaneに追加します。 それはそれがウィンドウのサイズに適応するようにそれに中心制約を与えるでしょう。 パネルに必要なコンポーネントを自由に追加できます。どこでもヌルレイアウトを使用しないことをお勧めします。 絶対配置は避けてください。

+0

* "どこにでもヌルレイアウトを使用しないことをお勧めします。" * 3番目の文はそのアドバイスには遅すぎます。それはそれ自身のパラグラフの1番目の文でなければなりません。 –

関連する問題