Java JFrame 按钮组织
Java JFrame button organization
如何创建组织文本框和 jbutton 的 jframe,文本框在顶部,按钮 1-10 为 3 x 4 网格布局?
"TEXT BOX HERE"
[1][2][3]
[4][5][6]
[7][8][9]
[(][0][)]
这是我目前拥有的:
setTitle("Test");
setSize(400, 400);
// Create JButton and JPanel
JButton[] buttons = new JButton[12];
JButton buttonLpar = new JButton("(");
JButton buttonRpar = new JButton(")");
JPanel panel = new JPanel();
JPanel panel2 = new JPanel(new GridLayout(3, 4));
// adding 10 buttons
for(int i = 0; i < 10; i++) {
buttons[i] = new JButton(String.valueOf(i));
}
buttons[11].add(buttonLpar);
buttons[12].add(buttonRpar);
JTextField text = new JTextField("",10);
text.setFont(new Font("Helvetica Neue", Font.BOLD, 12));
panel.add(text, BorderLayout.NORTH);
panel.add(panel2, BorderLayout.CENTER);
this.getContentPane().add(panel);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
但这就是我卡住的地方。
好的,我应该注意到我需要一个 for 循环来填充 3 x 4 网格布局。但是我不知道我在循环中需要什么。
对于这种网格,假设您在旅途中创建它,您只需要 if-else
看看您是否在最后一行数据上。
例如:
import java.awt.GridLayout;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class GridLayoutWithEmptyComponents {
private JFrame frame;
private JPanel pane;
private JPanel buttonsPane;
private JButton[] buttons;
private void createAndShowGUI() {
frame = new JFrame(getClass().getSimpleName());
pane = new JPanel();
pane.setLayout(new BoxLayout(pane, BoxLayout.PAGE_AXIS));
buttonsPane = new JPanel();
buttonsPane.setLayout(new GridLayout(4, 3));
buttons = new JButton[10];
for (int i = 0; i < buttons.length; i++) {
buttons[i] = new JButton("" + (i + 1));
if (i == buttons.length - 1) {
buttonsPane.add(new JButton("("));
buttonsPane.add(buttons[i]);
buttonsPane.add(new JButton(")"));
} else {
buttonsPane.add(buttons[i]);
}
}
pane.add(new JLabel("Text box"));
pane.add(buttonsPane);
frame.add(pane);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new GridLayoutWithEmptyComponents()::createAndShowGUI);
}
}
或者您可以将所有数据放在 String[]
中,例如:
String[] buttonValues = {"1", "2", "3", ..., "8", "9", "(", "0", ")"};
然后将这些值用作 JButton
s 值,而无需在循环内使用 if-else
。
如何创建组织文本框和 jbutton 的 jframe,文本框在顶部,按钮 1-10 为 3 x 4 网格布局?
"TEXT BOX HERE"
[1][2][3]
[4][5][6]
[7][8][9]
[(][0][)]
这是我目前拥有的:
setTitle("Test");
setSize(400, 400);
// Create JButton and JPanel
JButton[] buttons = new JButton[12];
JButton buttonLpar = new JButton("(");
JButton buttonRpar = new JButton(")");
JPanel panel = new JPanel();
JPanel panel2 = new JPanel(new GridLayout(3, 4));
// adding 10 buttons
for(int i = 0; i < 10; i++) {
buttons[i] = new JButton(String.valueOf(i));
}
buttons[11].add(buttonLpar);
buttons[12].add(buttonRpar);
JTextField text = new JTextField("",10);
text.setFont(new Font("Helvetica Neue", Font.BOLD, 12));
panel.add(text, BorderLayout.NORTH);
panel.add(panel2, BorderLayout.CENTER);
this.getContentPane().add(panel);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
但这就是我卡住的地方。
好的,我应该注意到我需要一个 for 循环来填充 3 x 4 网格布局。但是我不知道我在循环中需要什么。
对于这种网格,假设您在旅途中创建它,您只需要 if-else
看看您是否在最后一行数据上。
例如:
import java.awt.GridLayout;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class GridLayoutWithEmptyComponents {
private JFrame frame;
private JPanel pane;
private JPanel buttonsPane;
private JButton[] buttons;
private void createAndShowGUI() {
frame = new JFrame(getClass().getSimpleName());
pane = new JPanel();
pane.setLayout(new BoxLayout(pane, BoxLayout.PAGE_AXIS));
buttonsPane = new JPanel();
buttonsPane.setLayout(new GridLayout(4, 3));
buttons = new JButton[10];
for (int i = 0; i < buttons.length; i++) {
buttons[i] = new JButton("" + (i + 1));
if (i == buttons.length - 1) {
buttonsPane.add(new JButton("("));
buttonsPane.add(buttons[i]);
buttonsPane.add(new JButton(")"));
} else {
buttonsPane.add(buttons[i]);
}
}
pane.add(new JLabel("Text box"));
pane.add(buttonsPane);
frame.add(pane);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new GridLayoutWithEmptyComponents()::createAndShowGUI);
}
}
或者您可以将所有数据放在 String[]
中,例如:
String[] buttonValues = {"1", "2", "3", ..., "8", "9", "(", "0", ")"};
然后将这些值用作 JButton
s 值,而无需在循环内使用 if-else
。