2016-06-11 15 views
0

Ich muss die GUI meines Programms in Swing implementiert ändern. Jetzt habe ich viele Diagramme in separaten Fenstern und ich möchte sie ändern, so dass sie alle nur in einem angezeigt werden. Die Contraction der ursprünglichen Version war, dass JFrame ein JPanel-Feld hatte. JFrame hatte kein festgelegtes Layout.Ändern Sie JFrame (ohne Layout) zu 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 erklärt wurde, wie folgt:

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

Wenn ich Vererbung von JFrame entfernen und hinzufügen Vererbung von JPanel, wird die Methode paintcomponent nicht genannt. Ich denke der Grund sind schlechte Layouteinstellungen. Aber Programm berechnet die Abstände von den Kanten, und ich will es nicht ändern. Wie kann ich dieses Programm einfach bearbeiten?

I erzeugt auch neue GUI in NetBeans

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 GUIs müssen auf verschiedenen Betriebssystemen, Bildschirmgrößen, Bildschirmauflösungen usw. mit verschiedenen PLAFs in verschiedenen Locales arbeiten. Als solche sind sie nicht für ein perfektes Pixel-Layout geeignet. Verwenden Sie stattdessen Layout-Manager oder [Kombinationen davon] (http://stackoverflow.com/a/5630271/418556) zusammen mit Layout-Auffüllung und Rahmen für [Leerraum] (http://stackoverflow.com/a/17874718/ 418556). –

Antwort

0

ein Border zum contentPane Set. Fügen Sie Ihr Panel zum ContentPane hinzu. Dadurch wird es zentriert, so dass es sich an die Größe des Fensters anpasst. Im Panel können Sie dann die benötigten Komponenten hinzufügen. Ich empfehle, dass Sie nirgendwo ein Null-Layout verwenden. Vermeiden Sie absolute Positionierung.

+0

* "Ich empfehle Ihnen, nirgendwo ein Null-Layout zu verwenden." * Der dritte Satz ist zu spät für diesen Ratschlag. Es sollte 1. Satz in einem eigenen Absatz sein. –