2011-02-13 1 views
4

옴스 법 앱을 구축 중입니다. ,JPanel을 보이지 않게 설정하고 기본 이외의 콤보 상자를 선택하면 표시되지만 구성 요소가 누락됩니다.

http://imgur.com/QYe4V

콤보 상자, 볼트를 계산 옴을 계산하는 옵션이 있습니다 : 당신이 그것을 실행할 때 여기 보이는 방법) = 너무 친절하십시오 (튜토리얼없이) 지금까지 내 첫 번째 프로그램 있음을 유의하시기 바랍니다 등 ...

콤보 상자에서 선택을 할 때까지 중앙 패널이 보이지 않도록 설정됩니다.

http://imgur.com/ZlWJX

내가 직면하고 문제는의 처음 시간이 나는 선택을 즉, JLabel의/JTextArea에 콤보의 한 (각 쌍 : 다음은 선택을 할 때 어떻게 보일지입니다 수직 상자 안에 자신의 패널에)이 표시됩니다 내가 콤보 상자를 클릭하고 다시 같은 선택을 할 경우

http://imgur.com/vNYX1

가 올바르게 표시됩니다. 첫 번째 클릭에서 왜 잘못 작동하는지 파악할 수 없습니다. 아마도 GUI를 만드는 데 잘못된 접근 방식을 사용하고있을 것입니다. 여기에 지금까지 코드입니다 :

private JFrame frame; 
private String[] choiceList = {"", "Calculate Volts", "Calculate Amps", "Calculate Ohms", "Calculate Watts"}; 
private JTextField textField_2; 
private JPanel centerPanel; 
private String volts = "Volts"; 
private String amps = "Amps"; 
private String ohms = "Ohms"; 
private String watts = "Watts"; 
private JLabel var1Label; 
private JLabel var2Label; 
private JLabel var3Label; 
private JFormattedTextField var1TextField; 
private JFormattedTextField var2TextField; 
private JFormattedTextField var3TextField; 



/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       GUI window = new GUI(); 
       window.frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the application. 
*/ 
public GUI() { 
    initialize(); 
} 

/** 
* Initialize the contents of the frame. 
*/ 
private void initialize() { 
    frame = new JFrame(); 
    frame.setTitle("BotsOne ElectriCalc"); 
    frame.setBounds(100, 100, 450, 300); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    JPanel northPanel = new JPanel(); 
    northPanel.setIgnoreRepaint(true); 
    northPanel.setBorder(new LineBorder(Color.GRAY)); 
    frame.getContentPane().add(northPanel, BorderLayout.NORTH); 

    JLabel choiceLabel = new JLabel("Please make a selection:"); 
    northPanel.add(choiceLabel); 

    JComboBox choiceCombo = new JComboBox(choiceList); 
    northPanel.add(choiceCombo); 
    choiceCombo.addActionListener(new ChoiceComboListener()); 

    JPanel southPanel = new JPanel(); 
    southPanel.setIgnoreRepaint(true); 
    southPanel.setBorder(new LineBorder(Color.GRAY)); 
    frame.getContentPane().add(southPanel, BorderLayout.SOUTH); 

    JLabel label = new JLabel("Answer:"); 
    southPanel.add(label); 

    textField_2 = new JTextField(); 
    textField_2.setColumns(10); 
    southPanel.add(textField_2); 

    centerPanel = new JPanel(); 
    centerPanel.setVisible(false); 
    centerPanel.setBorder(new LineBorder(Color.GRAY)); 
    frame.getContentPane().add(centerPanel, BorderLayout.CENTER); 

    Box centerPanelVertBox = Box.createVerticalBox(); 
    centerPanelVertBox.setAlignmentX(Component.CENTER_ALIGNMENT); 
    centerPanel.add(centerPanelVertBox); 
    centerPanelVertBox.setVisible(true); 
    centerPanelVertBox.setBorder(null); 

    JLabel pleaseEnterLabel = new JLabel("Please enter 2 of 3 values:"); 
    pleaseEnterLabel.setBorder(new EmptyBorder(15, 0, 10, 0)); 
    pleaseEnterLabel.setAlignmentX(Component.CENTER_ALIGNMENT); 
    centerPanelVertBox.add(pleaseEnterLabel); 

    JPanel var1Panel = new JPanel(); 
    centerPanelVertBox.add(var1Panel); 

    var1Label = new JLabel("xxx"); 
    var1Label.setAlignmentX(Component.CENTER_ALIGNMENT); 
    var1Panel.add(var1Label); 

    var1TextField = new JFormattedTextField(NumberFormat.getInstance()); 
    var1TextField.setColumns(10); 
    var1Panel.add(var1TextField); 

    Panel var2Panel = new Panel(); 
    centerPanelVertBox.add(var2Panel); 

    var2Label = new JLabel("xxx"); 
    var2Label.setAlignmentX(Component.CENTER_ALIGNMENT); 
    var2Panel.add(var2Label); 

    var2TextField = new JFormattedTextField(NumberFormat.getInstance()); 
    var2TextField.setColumns(10); 
    var2Panel.add(var2TextField); 

    Panel var3Panel = new Panel(); 
    centerPanelVertBox.add(var3Panel); 

    var3Label = new JLabel("xxx"); 
    var3Label.setAlignmentX(Component.CENTER_ALIGNMENT); 
    var3Panel.add(var3Label); 

    var3TextField = new JFormattedTextField(NumberFormat.getInstance()); 
    var3TextField.setColumns(10); 
    var3Panel.add(var3TextField); 

    Panel calculatePanel = new Panel(); 
    centerPanelVertBox.add(calculatePanel); 

    JButton calculateButton = new JButton("Calculate"); 
    calculatePanel.add(calculateButton); 
} 

public class ChoiceComboListener implements ActionListener { //combobox actionlistener 

    public void actionPerformed(ActionEvent ev) { 
     JComboBox cb = (JComboBox)ev.getSource(); 
     String currentComboSelection = (String)cb.getSelectedItem(); 
     if (currentComboSelection.equals(choiceList[1])) {     //choice 1 (Calculate Volts) 
      centerPanel.setVisible(true); 
      var1Label.setText(amps); 
      var2Label.setText(ohms); 
      var3Label.setText(watts);    
      //centerPanel.repaint();     
     } 
     if (currentComboSelection.equals(choiceList[2])) {    //choice 2 (Calculate Amps) 
      centerPanel.setVisible(true); 
      var1Label.setText(volts); 
      var2Label.setText(ohms); 
      var3Label.setText(watts); 
      centerPanel.repaint();    
     } 
     if (currentComboSelection.equals(choiceList[3])) { 
      centerPanel.setVisible(true); 
      var1Label.setText(volts); 
      var2Label.setText(amps); 
      var3Label.setText(watts); 
     } 
     if (currentComboSelection.equals(choiceList[4])) { 
      centerPanel.setVisible(true); 
      var1Label.setText(volts); 
      var2Label.setText(amps); 
      var3Label.setText(ohms); 
     } 
     if (currentComboSelection.equals(choiceList[0])) { 
      centerPanel.setVisible(false); 
      //centerPanel.repaint(); 
     } 
    } 

} 

당신은 하단에 보면은, ChoiceComboListener라는 내부 클래스가있다가,이 콤보 수신기, 내가 칠하고(), 및 기타 다양한 것들로 장난 시도하지만, 나는 아무것도 할 수 없다. 어떤 도움, 안내 또는 비판도 환영합니다.

+1

"내 첫 프로그램이 (튜토리얼없이) 명심하십시오"- 잘 했어, 잘 했어. –

+0

@Bots 의견을 답변으로 게시하고 답변으로 표시하십시오. – WhiteKnight

답변

3

은 어떤 도움, 지침 또는 비판

는 또 다른 opton가 Card Layout를 사용하는 수 있습니다 감사합니다. 튜토리얼에는 원하는 작업을 정확하게 수행하는 예제가 있습니다.

3

"제 첫 프로그램이 (튜토리얼없이) 명심하십시오."- 잘 했어. 한 가지 제안은이 중요한 개념을 연습하기에 완벽한 장소로 보이므로 전기 장치를 열거 형으로 만들 것을 고려하는 것이 좋습니다. 또한, 당신은 JTextFields GridBagLayout 함께 줄을 잘 수 있습니다,하지만 매우 persnickety 사용할 수 있습니다. 열거에

예 :

enum ElectricalUnits { 
    AMPS("Amps"), OHMS("Ohms"), WATTS("Watts"), VOLTS("Volts"); 

    private String text; 
    private ElectricalUnits(String text) { 
     this.text = text; 
    } 
    public String getText() { 
     return text; 
    } 
    @Override 
    public String toString() { 
     return text; 
    } 
} 

그런 다음 사용자의 선택은 열거 할 수 있습니다, 이것은 당신의 GUI의 로직 부분에 코드의 일부를 단순화 할 수있다.

0

JPanel로 선언 된 첫 번째 패널 (올바르게 표시되는 패널)이 있고 다른 패널을 일반 패널로 선언했습니다. 쳇! 어쨌든 누군가가 조언이나 비평을하기 원한다면 환영합니다! - 봇

관련 문제