2017-01-04 1 views
1

Java로 계산기 프로그램을 개발하려고합니다. GridBagLayout을 사용했습니다. 오른쪽 하단에 큰 "="버튼을 넣고 싶지만, 버튼의 높이가 예상대로 마지막 공간까지 확장되지는 않을 것입니다. 다음과 같이 붙여, 그 파악하는 방법에 대해 조언을 도와주세요 : my problem one is like thisGridBagLayout 구성 요소에서 마지막 버튼의 높이를 설정하는 방법은 무엇입니까?

import java.awt.BorderLayout; 
import java.awt.Button; 
import java.awt.Color; 
import java.awt.Frame; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.GridLayout; 
import java.awt.Panel; 
import java.awt.TextField; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 

import javax.swing.JButton; 

import org.omg.CORBA.PUBLIC_MEMBER; 

public class MyCalculater { 
    private Frame frame = new Frame("My-Calculator"); 
    private GridBagConstraints gBagConstraints = new GridBagConstraints(); 
    private GridBagLayout gBagLayout = new GridBagLayout(); 
    private Panel screen = new Panel(); 
    private Panel arithSymbolArea = new Panel(); 
    private Panel digitalArea = new Panel(); 
    private JButton[] digitalButtons = new JButton[10]; 

    public void init() { 
     // Put a screen for output 
     screen.add(new TextField(40)); 
     frame.add(screen, BorderLayout.NORTH); 

     // To put the Arith symbols 
     arithSymbolArea.setLayout(new GridLayout(6, 4)); 
     frame.add(arithSymbolArea); 

     digitalArea.setLayout(gBagLayout); 
     initDigitalArea(); 
     frame.add(digitalArea, BorderLayout.EAST); 

     frame.addWindowListener(new WindowAdapter() { 
      @Override 
      public void windowClosing(WindowEvent e) { 
       // TODO Auto-generated method stub 
       super.windowClosing(e); 
       System.exit(0); 
      } 
     }); 

      frame.pack(); 
      frame.setVisible(true); 
     } 

    private void initDigitalArea() { 

     JButton mc = new JButton("mc"); 
     JButton mplus = new JButton("m+"); 
     JButton mminus = new JButton("m-"); 
     JButton mr = new JButton("mr"); 

     JButton ac = new JButton("AC"); 
     JButton pn = new JButton("+/-"); 
     JButton divide = new JButton("÷"); 
     JButton times = new JButton("×"); 
     JButton plus = new JButton("+"); 
     JButton minus = new JButton("-"); 
     JButton equal = new JButton("="); 
     JButton dot = new JButton("."); 
     for (int i = 0; i < 10; i++) { 
      digitalButtons[i] = new JButton(String.valueOf(i)); 
     } 

     gBagConstraints.fill = GridBagConstraints.BOTH; 
     gBagConstraints.weightx = 1; 
     addButton(mc); 
     addButton(mplus); 
     addButton(mminus); 
     gBagConstraints.gridwidth = GridBagConstraints.REMAINDER; 
     addButton(mr); 

     gBagConstraints.gridwidth = 1; 
     gBagConstraints.gridheight = 1; 
     addButton(ac); 
     addButton(pn); 
     addButton(divide); 
     gBagConstraints.gridwidth = GridBagConstraints.REMAINDER; 
     addButton(times); 

     gBagConstraints.gridwidth = 1; 
     gBagConstraints.gridheight = 1; 
     addButton(digitalButtons[7]); 
     addButton(digitalButtons[8]); 
     addButton(digitalButtons[9]); 
     gBagConstraints.gridwidth = GridBagConstraints.REMAINDER; 
     addButton(minus); 

     gBagConstraints.gridwidth = 1; 
     gBagConstraints.gridheight = 1; 
     addButton(digitalButtons[4]); 
     addButton(digitalButtons[5]); 
     addButton(digitalButtons[6]); 
     gBagConstraints.gridwidth = GridBagConstraints.REMAINDER; 
     addButton(plus); 

     gBagConstraints.gridwidth = 1; 
     gBagConstraints.gridheight = 1; 
     addButton(digitalButtons[1]); 
     addButton(digitalButtons[2]); 
     addButton(digitalButtons[3]); 
     gBagConstraints.gridwidth = GridBagConstraints.REMAINDER; 
     gBagConstraints.gridheight = 2; 
     addButton(equal); 

     gBagConstraints.gridheight = 1; 
     gBagConstraints.gridwidth = 2; 
     addButton(digitalButtons[0]); 
     gBagConstraints.gridwidth = 1; 
     addButton(dot); 

    } 

    private void addButton(JButton button) { 
     gBagLayout.setConstraints(button, gBagConstraints); 
     digitalArea.add(button); 
    } 

    public static void main(String[] args) { 
     new MyCalculater().init(); 
    } 


    private void calculate() { 

    } 



    class DigitalButton extends JButton { 
     public DigitalButton() { 
      // TODO Auto-generated constructor stub 
      this.setBackground(new Color(0, 0, 0)); 
     } 
    } 

    class ArithSymbol extends JButton { 
     public ArithSymbol() { 
      // TODO Auto-generated constructor stub 
      this.setBackground(new Color(128, 128, 128)); 
     } 
    } 

} 
+0

지금은 오랜 시간 동안의 GridBagLayout을 사용하지 않은 시도,하지만 당신은 시도 할 수 있습니다 한 줄에 줄을 만들 때까지 열마다 단추 열을 만드시겠습니까? – SebVb

+0

게시물의 스냅 샷을 확인하십시오. 이제 빈 공간이없는 바로 밑에 큰 버튼이 나타납니다. –

답변

0

이 하나

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Frame; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.GridLayout; 
import java.awt.Insets; 
import java.awt.Panel; 
import java.awt.TextField; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 

import javax.swing.JButton; 

public class MyCalculater 
{ 
    private static final Insets insets = new Insets(0, 0, 0, 0); 

    private Frame frame = new Frame("My-Calculator"); 
    private GridBagConstraints gBagConstraints = new GridBagConstraints(); 
    private GridBagLayout gBagLayout = new GridBagLayout(); 
    private Panel screen = new Panel(); 
    private Panel arithSymbolArea = new Panel(); 
    private Panel digitalArea = new Panel(); 
    private JButton[] digitalButtons = new JButton[10]; 

    public void init() { 
     // Put a screen for output 
     screen.add(new TextField(40)); 
     frame.add(screen, BorderLayout.NORTH); 

     // To put the Arith symbols 
     arithSymbolArea.setLayout(new GridLayout(6, 4)); 
     frame.add(arithSymbolArea); 

     digitalArea.setLayout(gBagLayout); 
     initDigitalArea(); 
     frame.add(digitalArea, BorderLayout.EAST); 

     frame.addWindowListener(new WindowAdapter() { 
      @Override 
      public void windowClosing(WindowEvent e) { 
       // TODO Auto-generated method stub 
       super.windowClosing(e); 
       System.exit(0); 
      } 
     }); 

      frame.pack(); 
      frame.setVisible(true); 
     } 

    private void initDigitalArea() { 

     JButton mc = new JButton("mc"); 
     JButton mplus = new JButton("m+"); 
     JButton mminus = new JButton("m-"); 
     JButton mr = new JButton("mr"); 

     JButton ac = new JButton("AC"); 
     JButton pn = new JButton("+/-"); 
     JButton divide = new JButton("÷"); 
     JButton times = new JButton("×"); 
     JButton plus = new JButton("+"); 
     JButton minus = new JButton("-"); 
     JButton equal = new JButton("="); 
     JButton dot = new JButton("."); 
     for (int i = 0; i < 10; i++) { 
      digitalButtons[i] = new JButton(String.valueOf(i)); 
     } 

     addComponent(mc, 0, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); 
     addComponent(mplus, 1, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); 
     addComponent(mminus, 2, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); 
     addComponent(mr, 3, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); 

     addComponent(ac, 0, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); 
     addComponent(pn, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); 
     addComponent(divide, 2, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); 
     addComponent(times, 3, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); 

     addComponent(digitalButtons[7], 0, 2, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); 
     addComponent(digitalButtons[8], 1, 2, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); 
     addComponent(digitalButtons[9], 2, 2, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); 
     addComponent(minus, 3, 2, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); 

     addComponent(digitalButtons[4], 0, 3, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); 
     addComponent(digitalButtons[5], 1, 3, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); 
     addComponent(digitalButtons[6], 2, 3, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); 
     addComponent(plus, 3, 3, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); 

     addComponent(digitalButtons[1], 0, 4, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); 
     addComponent(digitalButtons[2], 1, 4, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); 
     addComponent(digitalButtons[3], 2, 4, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); 
     addComponent(equal, 3, 4, 1, 2, GridBagConstraints.CENTER, GridBagConstraints.BOTH); 

     addComponent(digitalButtons[0], 0, 5, 2, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); 
     addComponent(dot, 2, 5, 1, 2, GridBagConstraints.CENTER, GridBagConstraints.BOTH); 

    } 

    private void addComponent(JButton button, int gridx, int gridy, 
       int gridwidth, int gridheight, int anchor, int fill) { 
      GridBagConstraints gbc = new GridBagConstraints(gridx, gridy, gridwidth, gridheight, 1.0, 1.0, 
       anchor, fill, insets, 0, 0); 
      gBagConstraints = gbc; 
      addButton(button); 
      } 


    private void addButton(JButton button) { 
     gBagLayout.setConstraints(button, gBagConstraints); 
     digitalArea.add(button); 
    } 

    public static void main(String[] args) { 
     new MyCalculater().init(); 
    } 


    private void calculate() { 

    } 



    class DigitalButton extends JButton { 
     public DigitalButton() { 
      // TODO Auto-generated constructor stub 
      this.setBackground(new Color(0, 0, 0)); 
     } 
    } 

    class ArithSymbol extends JButton { 
     public ArithSymbol() { 
      // TODO Auto-generated constructor stub 
      this.setBackground(new Color(128, 128, 128)); 
     } 
    } 

} 
+0

그것은 작동합니다! 고맙습니다! 전에이 접근법을 배우지 못했지만, gBagConstraints.gridwidth = GridBagConstraints.REMAINDER를 설정하는 것보다 훨씬 간단합니다. 나는 이것을 더 많이 연구 할 것이고, 다시 한번 감사 할 것이다! –

+0

가장 환영합니다 ... !!! – Pradnyarani

관련 문제