私は窓10の電卓に基づいて計算機で作業しています。私はそれの外観と感じが好きです。私はJavaをどれだけうまく利用できるかテストするためにこのプロジェクトに自分自身に挑戦しています。しかし、私はメインのデザインが終了した後、私は私の窓の周りに余分なパディングに気づいた。デバッグして計算した後、メインのJPanel(mainPanel)の内側に3つのJPanels(topPanel、middlePanel、bottomPanel)が追加されていることがわかりました。私は、gridBagLayoutを使用しており、すべてのインセットを上、下、左、右に0に設定しています。余分なパディングを取り除く方法はわかりません。これは私のCalculatorクラスJavaスイングのJPanelで余分なパディングを取り除くにはどうすればいいですか?
package javacalculator.calculator;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.BorderFactory;
import javax.swing.border.Border;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.text.Caret;
import javax.swing.text.DefaultCaret;
public class Calculator {
private final String NAME = "Calculator";
private JFrame frame;
private JPanel mainPanel, topPanel, middlePanel, bottomPanel;
private JTextField storedData;
private JTextField data;
private Caret caret;
private Font font;
private Font font2;
private Font font3;
private Font font4;
private Color color;
private JButton zero, one, two, three, four, five, six, seven, eight, nine;
private JButton plus, minus, multiply, divide, equals;
private JButton negative, decimal;
private JButton ce, c, backspace;
private JButton percent, squareRoot, squared, divideFrom1;
private JButton mc, mr, mplus, mminus, ms, mh;
public Calculator() {
frame = new JFrame(NAME);
mainPanel = new JPanel();
topPanel = new JPanel();
middlePanel = new JPanel();
bottomPanel = new JPanel();
storedData = new JTextField();
data = new JTextField();
caret = new DefaultCaret() {
@Override
public void paint(Graphics g) {
}
@Override
public boolean isVisible() {
return false;
}
@Override
public boolean isSelectionVisible() {
return false;
}
};
font = new Font("Sans-Serif", Font.BOLD, 30);
font2 = new Font("Sans-Serif", Font.PLAIN, 20);
font3 = new Font("Sans-Serif", Font.PLAIN, 15);
font4 = new Font("Sans-Serif", Font.PLAIN, 13);
color = new Color(238, 238, 238);
mc = new JButton("MC");
mr = new JButton("MR");
mplus = new JButton("M+");
mminus = new JButton("M-");
ms = new JButton("MS");
mh = new JButton("MH");
percent = new JButton("%");
squareRoot = new JButton("SQRT");
squared = new JButton("x^2");
divideFrom1 = new JButton("1/x");
ce = new JButton("CE");
c = new JButton("C");
backspace = new JButton("<=");
plus = new JButton("+");
minus = new JButton("-");
multiply = new JButton("X");
divide = new JButton("/");
equals = new JButton("=");
decimal = new JButton(".");
negative = new JButton("+/-");
zero = new JButton("0");
one = new JButton("1");
two = new JButton("2");
three = new JButton("3");
four = new JButton("4");
five = new JButton("5");
six = new JButton("6");
seven = new JButton("7");
eight = new JButton("8");
nine = new JButton("9");
Init();
}
private void Init() {
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ConfigureComponents();
AddComponent(topPanel, storedData, 0, 0, 4, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(topPanel, data, 0, 1, 4, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(middlePanel, mc, 0, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(middlePanel, mr, 1, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(middlePanel, mplus, 2, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(middlePanel, mminus, 3, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(middlePanel, ms, 4, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(middlePanel, mh, 5, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(bottomPanel, percent, 0, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(bottomPanel, squareRoot, 1, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(bottomPanel, squared, 2, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(bottomPanel, divideFrom1, 3, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(bottomPanel, ce, 0, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(bottomPanel, c, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(bottomPanel, backspace, 2, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(bottomPanel, divide, 3, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(bottomPanel, seven, 0, 2, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(bottomPanel, eight, 1, 2, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(bottomPanel, nine, 2, 2, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(bottomPanel, multiply, 3, 2, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(bottomPanel, four, 0, 3, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(bottomPanel, five, 1, 3, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(bottomPanel, six, 2, 3, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(bottomPanel, minus, 3, 3, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(bottomPanel, one, 0, 4, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(bottomPanel, two, 1, 4, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(bottomPanel, three, 2, 4, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(bottomPanel, plus, 3, 4, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(bottomPanel, negative, 0, 5, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(bottomPanel, zero, 1, 5, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(bottomPanel, decimal, 2, 5, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(bottomPanel, equals, 3, 5, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(mainPanel, topPanel, 0, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(mainPanel, middlePanel, 0, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
AddComponent(mainPanel, bottomPanel, 0, 2, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE);
frame.add(mainPanel);
frame.pack();
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private void AddComponent(JPanel panel, JComponent component, int x, int y, int width, int height, int position, int stretch) {
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = x;
gbc.gridy = y;
gbc.gridwidth = width;
gbc.gridheight = height;
gbc.weightx = 0;
gbc.weighty = 0;
gbc.anchor = position;
gbc.fill = stretch;
gbc.insets = new Insets(0, 0, 0, 0);
panel.add(component, gbc);
}
private void ConfigureComponents() {
mainPanel.setLayout(new GridBagLayout());
topPanel.setLayout(new GridBagLayout());
middlePanel.setLayout(new GridBagLayout());
bottomPanel.setLayout(new GridBagLayout());
Dimension dim = new Dimension(77, 54);
Dimension dim2 = new Dimension(dim.width * 4, dim.height);
Dimension dim3 = new Dimension(dim.width * 4, dim.height/2);
Dimension dim4 = new Dimension(dim.width * 4/6, dim.height/2);
Border noBorder = BorderFactory.createEmptyBorder(0, 0, 0, 0);
mainPanel.setBorder(noBorder);
topPanel.setBorder(noBorder);
middlePanel.setBorder(noBorder);
bottomPanel.setBorder(noBorder);
//TESTING
topPanel.setBorder(BorderFactory.createLineBorder(Color.GREEN, 1, false));
mainPanel.setBorder(BorderFactory.createLineBorder(Color.BLUE, 3, false));
//END TESTING
storedData.setPreferredSize(dim3);
storedData.setFont(font3);
storedData.setBackground(Color.WHITE);
storedData.setHorizontalAlignment(JTextField.RIGHT);
storedData.setBorder(noBorder);
//TESTING
storedData.setBorder(BorderFactory.createLineBorder(Color.RED, 1, false));
//END TESTING
storedData.setCaret(caret);
storedData.setEditable(false);
data.setPreferredSize(dim2);
data.setFont(font);
data.setBackground(Color.WHITE);
data.setHorizontalAlignment(JTextField.RIGHT);
data.setBorder(noBorder);
data.setCaret(caret);
data.setEditable(false);
ConfigureComponent(mc, dim4, font4, Color.WHITE, Color.BLACK, noBorder, true, false, false);
mc.setPreferredSize(new Dimension(dim4.width + 1, dim4.height));
ConfigureComponent(mr, dim4, font4, Color.WHITE, Color.BLACK, noBorder, true, false, false);
ConfigureComponent(mplus, dim4, font4, Color.WHITE, Color.BLACK, noBorder, true, false, false);
ConfigureComponent(mminus, dim4, font4, Color.WHITE, Color.BLACK, noBorder, true, false, false);
ConfigureComponent(ms, dim4, font4, Color.WHITE, Color.BLACK, noBorder, true, false, false);
ConfigureComponent(mh, dim4, font4, Color.WHITE, Color.BLACK, noBorder, true, false, false);
mh.setPreferredSize(new Dimension(dim4.width + 1, dim4.height));
ConfigureComponent(percent, dim, font2, Color.WHITE, Color.BLACK, noBorder, true, false, false);
ConfigureComponent(squareRoot, dim, font2, Color.WHITE, Color.BLACK, noBorder, true, false, false);
ConfigureComponent(squared, dim, font2, Color.WHITE, Color.BLACK, noBorder, true, false, false);
ConfigureComponent(divideFrom1, dim, font2, Color.WHITE, Color.BLACK, noBorder, true, false, false);
ConfigureComponent(ce, dim, font2, color, Color.BLACK, noBorder, true, false, false);
ConfigureComponent(c, dim, font2, color, Color.BLACK, noBorder, true, false, false);
ConfigureComponent(backspace, dim, font2, color, Color.BLACK, noBorder, true, false, false);
ConfigureComponent(divide, dim, font2, color, Color.BLACK, noBorder, true, false, false);
ConfigureComponent(seven, dim, font2, color, Color.BLACK, noBorder, true, false, false);
ConfigureComponent(eight, dim, font2, color, Color.BLACK, noBorder, true, false, false);
ConfigureComponent(nine, dim, font2, color, Color.BLACK, noBorder, true, false, false);
ConfigureComponent(multiply, dim, font2, color, Color.BLACK, noBorder, true, false, false);
ConfigureComponent(four, dim, font2, color, Color.BLACK, noBorder, true, false, false);
ConfigureComponent(five, dim, font2, color, Color.BLACK, noBorder, true, false, false);
ConfigureComponent(six, dim, font2, color, Color.BLACK, noBorder, true, false, false);
ConfigureComponent(minus, dim, font2, color, Color.BLACK, noBorder, true, false, false);
ConfigureComponent(one, dim, font2, color, Color.BLACK, noBorder, true, false, false);
ConfigureComponent(two, dim, font2, color, Color.BLACK, noBorder, true, false, false);
ConfigureComponent(three, dim, font2, color, Color.BLACK, noBorder, true, false, false);
ConfigureComponent(plus, dim, font2, color, Color.BLACK, noBorder, true, false, false);
ConfigureComponent(negative, dim, font2, color, Color.BLACK, noBorder, true, false, false);
ConfigureComponent(zero, dim, font2, color, Color.BLACK, noBorder, true, false, false);
ConfigureComponent(decimal, dim, font2, color, Color.BLACK, noBorder, true, false, false);
ConfigureComponent(equals, dim, font2, color, Color.BLACK, noBorder, true, false, false);
middlePanel.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, color));
}
private void ConfigureComponent(JButton component, Dimension size, Font font, Color backgroundColor, Color foreGroundColor, Border border, boolean contentAreaFilled, boolean borderPainted, boolean focusPainted) {
component.setPreferredSize(size);
component.setFont(font);
component.setOpaque(true);
component.setBackground(backgroundColor);
component.setForeground(foreGroundColor);
component.setBorder(border);
component.setContentAreaFilled(contentAreaFilled);
component.setBorderPainted(borderPainted);
component.setFocusPainted(focusPainted);
}
}
私はJPanel.setMarginまたはJPanel.setInsetsを探してみましたし、何かを見つけることができませんでしたから、私の完全なコードです。次はどこに見えるか分からない。
レッドボーダーtopPanelの内側に、私のJTextFieldの周りです。緑色の枠線は、topPanelの周りにあります。青色の境界線はmainPanelの周りにあります。私は緑と青の境界の間のスペースを取り除きたい。私はもともとボーダーを空のボーダーに設定していましたが、私は自分のプログラムをテストするためにこれを使用しています。
編集:私はちょうどtopPanel.setLocation(0, 0);
を試しましたが、何もしませんでした。
EDIT2:私はちょうど代わりのGridBagLayoutのBorderLayoutのようにmainPanelを変更し、緑と青の枠線の間のスペースを処分したこれ、PAGE_ENDしCENTERとbottomPanelにPAGE_START、middlePanelにtopPanelを整列。しかし今、私は赤と緑の間に隙間があります。
Hmmm。奇妙な。私はそれを知らなかった。それは素晴らしい作品です。 – Vince