2016-08-27 1 views
0

도구의 크기를 조정에 따라 스윙 구성 요소의 크기를 조정 netbeans GUI 빌더는 분명히 모든 것이 GroupLayout에 있습니다. 현재 사용중인 GUI에서는 텍스트 영역 만 말하고 다른 구성 요소는 추가하지 않았습니다. 그래서 우리는 JFrame을 가지고 >> JPanel1 >> jTextArea는 상단과 양면에 고정되어 있으므로 도구의 크기를 조정할 때 전체 공간을 채우기 위해 수평으로 확장되지만 크기를 조정할 때는 하단에 채워지지 않으므로 하단에 고정되어 있기 때문에 JPanel1의 크기가 변경이되는이 변경됩니다 만약 내가 하단에 빈 공간이 탈락하고 공간 .. 내가 도구가 수동으로 내가 크기 조정 ..</p> <p>사용하고 않는 전체 화면 또는 누군가를 갈 때 텍스트 영역의 크기를 변경해야 스윙 UI를 개발하고

내가 노력 해왔다은

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

내가 여기서 뭘 시도하고있을 때 우리 크기 조정 .. 그것은 호출되어야하고 너무 수직으로 textArea의 크기를 변경하는 무언가를해야합니다 ..

이것은 모두 당신에게 줄 것이 었습니다. 내 질문의 기초. 이제 실제로 가지고있는 것은 Jpanel1입니다. 맨 위에는이 TextArea가 양쪽에 수평으로 고정되어 있으며 그 아래에는 작은 JPanel2가 데이터를 표시하기 위해 한면에서 다른면으로 수평으로 고정되어 있습니다. 전체 화면으로 가면 JPanel2와 textArea가 양쪽으로 이동하도록 크기가 조정되지만 세로로 가면 textArea와 JPanel2 사이에 빈 공간이 생깁니다. 그래서 내가 생각했던 것은 textArea bottom과 Jpanel2 top 사이의 공간의 높이를 얻는 것입니다. (이것 또한 어떻게 해야할지 모르겠습니다.) 위에서 언급 한 메서드에서 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 빌더를 사용하고 있습니다. NetBeans를 사용하면 패널에 요소를 넣을 때 생성되는 코드 내용을 수정할 수 없으며, 코드의 모든 부분이 자동 생성되므로 수정 될 수 없습니다.
2. 내가 겪은 해결책에는 모두 공통점이 1 가지는 자동 생성 코드가 없습니다. 그들은 처음부터 그것을 buiding하고있다. 내가 처음부터 그 일을 할 수 있다면 그렇게 할 수는 있지만 여기서는 그렇지 않다.

우리가 생성 된 코드를 수정하지 못할하지만 일부 청취자를 호출하고 크기를 변경할 수 있도록 크기 조정을 동적으로 수행 할 수 있습니다 어디 정확한 시나리오에 대한 솔루션을 원하는

..

이 하나 나와 함께하시기 바랍니다 곰 , 나는이 많은 제약이 당신을 돕기 위해 극한 상황에 처한 것을 압니다.

+2

* * ". 나도이에 대한 몇 가지 다른 스레드가 알고, 그래서 중복으로 표시하지 마십시오"보다는 가까이하지에 우리를 간청 귀하가 본 상위 5 개 질문을 나열하고 질문에 답하지 않은 이유를 설명하십시오. 이것은 우리가 당신의 요구 사항의 제약 조건을 더 잘 이해할 수있게 도와 주며 실제로 약간 수정 된 답변 중 일부는 대답 할 수 있습니다. 그것이 그렇듯이, 나는 WTE를 "나는 이미 그 접근법을 보았고, 그것은 나를 위해 일하지 않는다"고 말할 때, 대답하려고 애쓰는 데 방해가 될 수 없었다. –

+0

물론입니다. Andrew에게 감사드립니다. –

+2

GUI 편집기가 디자인에 영향을주지 않도록하십시오. 중첩 된 패널을 관리하려면이 [접근] (http://stackoverflow.com/a/2561540/230513)을 고려하십시오. – trashgod

답변

0

귀하의 문제는 layaoutmanager 및 netbeans gui biulder와 관련이있는 것으로 보입니다. 당신은 다른 레이아웃 관리자를 사용하여 시도 할 수 있습니다 귀하의 상황에 맞는 borderlayout 아주 잘 맞는. 적합한 layoutmanager (예 : borderlayout)를 사용하면 componentresized 이벤트를 수신 할 필요가 없습니다.

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 만 사용하여 개발해야합니다. 또한 기본적으로 당신이 BrotherLayout에 JTextArea를 추가 할 때 기본적으로 모든면에서 앵커가되므로 모든면에서 크기가 조정되므로 크기가 조정되므로 사용자의 작업이 작동하지 않을 것이라고 생각합니다. 미안하지만 처음부터 모든 것을 다시 빌드해야하기 때문에 다른 레이아웃을 사용할 수 없습니다. –

+0

코드를 게시 할 수 있습니까? – guleryuz

+0

작은 부분을 만들어 보겠습니다. –

관련 문제