2017-01-04 4 views
1

Я собираюсь разработать программу калькулятора в Java, я использовал GridBagLayout, я хочу поместить большую кнопку «=» внизу справа, но высота этой кнопки не будет расходоваться на последнее место, как ожидалось, мой основной код приклеивается, как показано ниже, пожалуйста, помогите посоветовать, как понять, что: my problem one is like thisКак установить высоту последней строки строки в компоненте GridBagLayout?

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

Смежные вопросы