2014-03-30 2 views
0

이것은 스택 오버플로가 처음있는 첫 번째 시간이며 필자가 가진 모든 문제에 도움이된다. 마침내 나는 대답을 찾을 수 없다는 의문을 가지고 마침내 계정을 얻을 필요가있었습니다. 지금 Netbeans 7.3을 사용하고 있으며 처음으로 GUI 편집기를 사용하고 있습니다. GUI를 수동으로 수행 할 수 없도록 정확한 위치 지정이 필요했습니다. 내 문제는 JPanel 폼이 추가 된 JFrame 폼이 있고 (그냥 창에 묻어서 잘 동작하는 것처럼 보임) 두 번째 JPanel도 추가하고 싶지만, 내가 할 것인지 아닌지는 문제입니다. 첫 번째 JPanel의 jcombobox 선택을 기반으로합니다. 첫 번째 JFrame에서 jcombobox에 액션 리스너를 추가하기 시작했습니다. 내 계획은 그 jcombobox에 묶인 메소드를 수행 한 액션 내에서 두 번째 JPanel을 추가하는 것이었지만 추가하는 방법을 모르겠습니다. 그 이후로 많이 만들고 있지 않다면 사과드립니다. 나는 초보자이다. 또한 내 코드를 읽으면서 내가하려고하는 것을 발견 할 수도 있지만, GUI가 나오기 전까지는 거기에 도착할 수 없다는 것은 솔직히 말해서. 아마도 몇 가지 코드가 도움이 될 수 있습니다 :ActionListener를 사용하여 JFrame 폼에 JPanel 폼을 추가하는 방법?

이는 JFrame의 코드입니다 :

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package geometry.program; 

import javax.swing.JPanel; 

/** 
* 
* @author maxwellparker 
*/ 
public class Main extends javax.swing.JFrame { 

    /** 
    * Creates new form Main 
    */ 
    public Main() { 
     super("Geometry Sucks"); 
     initComponents(); 
     this.setLocationRelativeTo(null); 
    } 

    public void addPanel(JPanel j){ 
     //i was going to call this method from the first jpanel on this JFrame already to add the second one. 
    } 

    /** 
    * 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() { 

     rP1 = new geometry.program.RP(); 
     control1 = new geometry.program.Control(); 
     rP2 = new geometry.program.RP(); 
     rP3 = new geometry.program.RP(); 
     control2 = new geometry.program.Control(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 
      .add(layout.createSequentialGroup() 
       .addContainerGap() 
       .add(control2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) 
       .addContainerGap(92, Short.MAX_VALUE)) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 
      .add(layout.createSequentialGroup() 
       .addContainerGap() 
       .add(control2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) 
       .addContainerGap(189, 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(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(Main.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 Main().setVisible(true); 
      } 
     }); 
    } 
    // Variables declaration - do not modify      
    private geometry.program.Control control1; 
    private geometry.program.Control control2; 
    private geometry.program.RP rP1; 
    private geometry.program.RP rP2; 
    private geometry.program.RP rP3; 
    // End of variables declaration     
} 

이가 JPanel의 1 코드 :

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package geometry.program; 

/** 
* 
* @author maxwellparker 
*/ 
public class Control extends javax.swing.JPanel { 

    /** 
    * Creates new form Control 
    */ 
    public Control() { 
     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">       
    private void initComponents() { 

     Mode = new javax.swing.JLabel(); 
     ModeComboBox = new javax.swing.JComboBox(); 
     Var = new javax.swing.JLabel(); 
     VarField = new javax.swing.JTextField(); 
     Val = new javax.swing.JLabel(); 
     ValField = new javax.swing.JTextField(); 
     CustomVar = new javax.swing.JLabel(); 

     Mode.setText("Mode:"); 

     ModeComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Regular Polygons", "Second", "Third", "Fourth" })); 
     ModeComboBox.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       ModeComboBoxActionPerformed(evt); 
      } 
     }); 

     Var.setText("Variable:"); 

     Val.setText("Value:"); 

     CustomVar.setText("Custom Variable (Optional):"); 

     org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this); 
     this.setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 
      .add(layout.createSequentialGroup() 
       .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 
        .add(CustomVar) 
        .add(layout.createSequentialGroup() 
         .add(Var) 
         .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) 
         .add(VarField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) 
         .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) 
         .add(Val) 
         .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) 
         .add(ValField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 59, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) 
        .add(layout.createSequentialGroup() 
         .addContainerGap() 
         .add(Mode) 
         .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) 
         .add(ModeComboBox, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))) 
       .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 
      .add(layout.createSequentialGroup() 
       .addContainerGap() 
       .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) 
        .add(Mode) 
        .add(ModeComboBox, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) 
       .add(18, 18, 18) 
       .add(CustomVar) 
       .add(18, 18, 18) 
       .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) 
        .add(Var) 
        .add(Val) 
        .add(VarField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) 
        .add(ValField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) 
       .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
     ); 
    }// </editor-fold>       

    private void ModeComboBoxActionPerformed(java.awt.event.ActionEvent evt) {            
     if(ModeComboBox.getSelectedIndex()==0){ 
      //run option 1 
      System.out.println("Add corresponding option Panel To JFrame."); 
     }else if(ModeComboBox.getSelectedIndex()==1){ 
      System.out.println("Add corresponding option Panel To JFrame."); 
     }else if(ModeComboBox.getSelectedIndex()==2){ 
      System.out.println("Add corresponding option Panel To JFrame."); 
     }else if(ModeComboBox.getSelectedIndex()==3){ 
      System.out.println("Add corresponding option Panel To JFrame."); 
     } 
    }            

    // Variables declaration - do not modify      
    private javax.swing.JLabel CustomVar; 
    private javax.swing.JLabel Mode; 
    private javax.swing.JComboBox ModeComboBox; 
    private javax.swing.JLabel Val; 
    private javax.swing.JTextField ValField; 
    private javax.swing.JLabel Var; 
    private javax.swing.JTextField VarField; 
    // End of variables declaration     
} 

그리고이 두 번째 JPanel의 코드 (내가 원하는 하나입니다 JPanel의 콤보 상자를 기반으로 JFrame에 추가 1).

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package geometry.program; 

/** 
* 
* @author maxwellparker 
*/ 
public class Control extends javax.swing.JPanel { 

    /** 
    * Creates new form Control 
    */ 
    public Control() { 
     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">       
    private void initComponents() { 

     Mode = new javax.swing.JLabel(); 
     ModeComboBox = new javax.swing.JComboBox(); 
     Var = new javax.swing.JLabel(); 
     VarField = new javax.swing.JTextField(); 
     Val = new javax.swing.JLabel(); 
     ValField = new javax.swing.JTextField(); 
     CustomVar = new javax.swing.JLabel(); 

     Mode.setText("Mode:"); 

     ModeComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Regular Polygons", "Second", "Third", "Fourth" })); 
     ModeComboBox.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       ModeComboBoxActionPerformed(evt); 
      } 
     }); 

     Var.setText("Variable:"); 

     Val.setText("Value:"); 

     CustomVar.setText("Custom Variable (Optional):"); 

     org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this); 
     this.setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 
      .add(layout.createSequentialGroup() 
       .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 
        .add(CustomVar) 
        .add(layout.createSequentialGroup() 
         .add(Var) 
         .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) 
         .add(VarField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) 
         .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) 
         .add(Val) 
         .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) 
         .add(ValField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 59, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) 
        .add(layout.createSequentialGroup() 
         .addContainerGap() 
         .add(Mode) 
         .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) 
         .add(ModeComboBox, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))) 
       .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 
      .add(layout.createSequentialGroup() 
       .addContainerGap() 
       .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) 
        .add(Mode) 
        .add(ModeComboBox, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) 
       .add(18, 18, 18) 
       .add(CustomVar) 
       .add(18, 18, 18) 
       .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) 
        .add(Var) 
        .add(Val) 
        .add(VarField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) 
        .add(ValField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) 
       .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
     ); 
    }// </editor-fold>       

    private void ModeComboBoxActionPerformed(java.awt.event.ActionEvent evt) {            
     if(ModeComboBox.getSelectedIndex()==0){ 
      //run option 1 
      System.out.println("Add corresponding option Panel To JFrame."); 
     }else if(ModeComboBox.getSelectedIndex()==1){ 
      System.out.println("Add corresponding option Panel To JFrame."); 
     }else if(ModeComboBox.getSelectedIndex()==2){ 
      System.out.println("Add corresponding option Panel To JFrame."); 
     }else if(ModeComboBox.getSelectedIndex()==3){ 
      System.out.println("Add corresponding option Panel To JFrame."); 
     } 
    }            

    // Variables declaration - do not modify      
    private javax.swing.JLabel CustomVar; 
    private javax.swing.JLabel Mode; 
    private javax.swing.JComboBox ModeComboBox; 
    private javax.swing.JLabel Val; 
    private javax.swing.JTextField ValField; 
    private javax.swing.JLabel Var; 
    private javax.swing.JTextField VarField; 
    // End of variables declaration     
} 

도움 주셔서 대단히 감사합니다.

+0

질문이 정말 이해하기 어렵습니다. – kukis

답변

0

Hej, 나는 당신을 위해 아주 간단한 예를 만들었습니다. 프로그래밍 방식으로 "GUI"를 만들었습니다. JFrame

난 당신이 JComboBox를 찾을 수 있습니다 그리고 당신은 옵션 add new JPanel을 선택하면, 다른 JPanel 당신이 hide JPanel를 선택하면 secondPanel이 될 것이라고 JFrame에 추가됩니다이 패널에 하나의 JPanel는, firstPanel라는 배치 제거되었습니다. actionPerformed() 메서드의 데모 용입니다.

comboBox.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       if(comboBox.getSelectedItem().toString().equalsIgnoreCase("add new JPanel")) { 

        panel.setBackground(Color.ORANGE); 
        panel.setSize(new Dimension(500, 300)); 

        getContentPane().add(panel, BorderLayout.SOUTH); 
       } 

       if(comboBox.getSelectedItem().toString().equalsIgnoreCase("hide JPanel")) { 
        getContentPane().remove(panel); 
       } 
      } 
     }); 

패트릭 :

메인 프레임 클래스

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

public class MainFrame extends JFrame { 

    JPanel firstPanel; 
    JComboBox<String> comboBox; 
    String[] items = {"choose an option", "hide JPanel", "add new JPanel"}; 


    public MainFrame() { 

    } 

    public void createAndShowGui() { 

     initComponents(); 
     this.setTitle("Add new JPanel with ComboBox"); 
     this.setSize(new Dimension(1024, 768)); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     this.getContentPane().add(firstPanel, BorderLayout.NORTH); 
     this.setVisible(true); 
    } 

    private void initComponents() { 
     firstPanel = new JPanel(new GridLayout(3, 1)); 
     firstPanel.add(new JLabel("First Panel")); 
     comboBox = new JComboBox<>(items); 
     JPanel panel = new JPanel(); 
     comboBox.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       if(comboBox.getSelectedItem().toString().equalsIgnoreCase("add new JPanel")) { 

        panel.setBackground(Color.ORANGE); 
        panel.setSize(new Dimension(500, 300)); 

        getContentPane().add(panel, BorderLayout.SOUTH); 
       } 

       if(comboBox.getSelectedItem().toString().equalsIgnoreCase("hide JPanel")) { 
        getContentPane().remove(panel); 
       } 
      } 
     }); 

     firstPanel.add(comboBox); 
    } 
} 
이 앱

import de.professional_webworkx.blog.swingjpanel.frame.MainFrame; 
import java.awt.EventQueue; 

public class SwingJPanel { 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       MainFrame mainFrame = new MainFrame(); 
       mainFrame.createAndShowGui(); 
      } 
     }); 
    } 

} 

를 시작

나는이 관심의 일부가 될 것이라 생각합니다.