2016-08-27 62 views
0

我開發一個擺動UI在我需要的時候工具會全屏或有人手動並調整大小..調整基於

我使用改變textarea的大小工具調整Swing組件NetBeans GUI生成器顯然一切都在GroupLayout中。 我目前的圖形用戶界面只允許說文本區域,我沒有添加其他組件。所以我們有JFrame >> JPanel1 >> jTextArea,它被錨定在頂部和兩側,所以當我調整工具的大小時,它會水平擴展以填充整個空間,但由於它不固定在底部,因此調整大小不會填滿底部空間,我離開了在底部空格..

我一直在努力

jPanel1.addComponentListener(new ComponentAdapter() { 
     @Override 
     public void componentResized(ComponentEvent e) { 
      } 
    }); 

我想在這裏做的是如果的JPANEL1的大小而變化,這將改變我們調整大小..它應該被調用,並做一些事情,將改變textArea垂直的大小..

這是全部給你我的問題的基礎。現在我實際上有 Jpanel1。在頂部,我將這個TextArea水平地固定在兩側,並且在它下面我有一個從一側水平錨定到另一側的小JPanel2,以顯示一些數據。 當我全屏顯示時,JPanel2和textArea都調整大小以完全左右擺動,但是垂直方向上會在該textArea和JPanel2之間形成一些空白區域。所以我在想的是獲得textArea底部和Jpanel2頂部之間的空間高度(這也是我不知道該怎麼做的)。在上面提到的方法中,我會做一些事情來增加textArea的大小與我發現的空白空間高度。

這裏是我的代碼:

public class NewJFrame extends javax.swing.JFrame { 

/** 
* Creates new form NewJFrame 
*/ 
public NewJFrame() { 
    initComponents(); 
} 

/** 
* 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">//GEN-BEGIN:initComponents 
private void initComponents() { 

    jPanel1 = new javax.swing.JPanel(); 
    jScrollPane1 = new javax.swing.JScrollPane(); 
    jTextArea1 = new javax.swing.JTextArea(); 
    jPanel2 = new javax.swing.JPanel(); 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

    jTextArea1.setColumns(20); 
    jTextArea1.setRows(5); 
    jScrollPane1.setViewportView(jTextArea1); 

    jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("MyBorder")); 

    javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); 
    jPanel2.setLayout(jPanel2Layout); 
    jPanel2Layout.setHorizontalGroup(
     jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 0, Short.MAX_VALUE) 
    ); 
    jPanel2Layout.setVerticalGroup(
     jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 30, Short.MAX_VALUE) 
    ); 

    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); 
    jPanel1.setLayout(jPanel1Layout); 
    jPanel1Layout.setHorizontalGroup(
     jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(jPanel1Layout.createSequentialGroup() 
      .addContainerGap() 
      .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
      .addContainerGap()) 
     .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE) 
    ); 
    jPanel1Layout.setVerticalGroup(
     jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(jPanel1Layout.createSequentialGroup() 
      .addGap(57, 57, 57) 
      .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addGap(88, 88, 88) 
      .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
    ); 

    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(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
      .addContainerGap()) 
    ); 
    layout.setVerticalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addContainerGap() 
      .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
      .addContainerGap()) 
    ); 

    pack(); 
}// </editor-fold>//GEN-END:initComponents 

/** 
* @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(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (InstantiationException ex) { 
     java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (IllegalAccessException ex) { 
     java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
     java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } 
    //</editor-fold> 

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

// Variables declaration - do not modify//GEN-BEGIN:variables 
private javax.swing.JPanel jPanel1; 
private javax.swing.JPanel jPanel2; 
private javax.swing.JScrollPane jScrollPane1; 
private javax.swing.JTextArea jTextArea1; 
// End of variables declaration//GEN-END:variables 

}

,但我不知道該怎麼在這裏面做。 我知道還有一些其他線程關於此,所以請不要將其標記爲重複。 如果沒有其他解決辦法是存在,請幫我找到它..

我已經通過其他鏈接了這顯示了不同的方法解決此問題的解決。但是我將無法使用它,因爲下面的約束條件:
1.我使用的是NetBeans的GUI生成器,它不允許我修改將元素放置在Panel和東西上時生成的代碼內容,所有代碼部分都是自動生成的,因此無法修改。
2.我所經歷的解決方案都有一個共同點,他們沒有任何自動生成的代碼。他們正在從頭開始建設。如果我要從頭開始做,我就能做到,但事實並非如此。

我想對於確切的情況的解決方案,我們不能修改生成的代碼,但調整大小可以動態地做,這樣我可以調用一些聽衆和改變大小..

請容忍我在這一個,我知道這些限制讓像你這樣的人在極端情況下得到幫助。

+2

*「我知道有一些其他的線程也對此,所以請不要將其標記爲重複的。」 *而不是懇求我們不要靠近這列出了你看到的前5個問題,並解釋他們爲什麼沒有回答你的問題。這有助於我們更好地理解您的要求的約束條件,並且確實可以稍微調整一些答案來回答這個問題。事實上,我不能因爲試圖回答而煩惱,因爲你可能會說WTE「我已經看到了這種方法,但它對我不起作用」。 –

+0

當然..謝謝安德魯我會做到這一點。 –

+2

不要讓GUI編輯器指定您的設計;考慮這個[方法](http://stackoverflow.com/a/2561540/230513)來管理嵌套面板。 – trashgod

回答

0

看來你的問題與你的layaoutmanager和netbeans gui biulder有關。你可以嘗試使用另一個佈局管理器和borderlayout適合你的情況。 使用合適的佈局管理器(例如這裏的borderlayout),您不需要偵聽組件事件。

public class Example extends JPanel { 

    public Example() { 
     super(new BorderLayout()); 
     add(new JScrollPane(new JTextArea()), BorderLayout.CENTER); 
    } 

    private static void createAndShowGUI() { 
     JFrame frame = new JFrame(); 
     frame.setContentPane(new Example()); 
     frame.setSize(200, 200); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 
} 

編輯:使用的GroupLayout

public class Example extends JFrame { 

    private JPanel contentPane; 

    public static void main(String[] args) { 
     javax.swing.SwingUtilities.invokeLater(() -> { 
      Example frame = new Example(); 
      frame.setVisible(true); 
     }); 
    } 

    public Example() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(100, 100, 450, 300); 
     contentPane = new JPanel(); 
     setContentPane(contentPane); 
     JPanel panel = new JPanel(); 
     JPanel panel_1 = new JPanel(); 
     panel_1.setBorder(new TitledBorder("JPanel 2")); 
     GroupLayout gl_contentPane = new GroupLayout(contentPane); 
     gl_contentPane.setHorizontalGroup(
      gl_contentPane.createParallelGroup(Alignment.LEADING) 
       .addGroup(gl_contentPane.createSequentialGroup() 
        .addComponent(panel)) 
       .addComponent(panel_1) 
     ); 
     gl_contentPane.setVerticalGroup(
      gl_contentPane.createParallelGroup(Alignment.LEADING) 
       .addGroup(gl_contentPane.createSequentialGroup() 
        .addComponent(panel) 
        .addComponent(panel_1)) 
     ); 
     panel.setLayout(new BorderLayout(0, 0)); 

     JTextArea textArea = new JTextArea(); 
     panel.add(textArea); 
     contentPane.setLayout(gl_contentPane); 
    } 
} 
+0

這不會爲我工作。我只能使用GroupLayout來開發它。此外,我不認爲你的工作太多,因爲默認情況下,當你將JTextArea添加到BroderLayout時,它將在所有方面錨定,因此當我們調整它的大小時,它將在所有方面調整大小。 我很抱歉,但我不能使用另一個佈局,因爲那樣我就不得不從頭開始重新構建所有東西。 –

+0

你可以發佈你的代碼嗎? – guleryuz

+0

讓我爲你創建一小部分.. –