我正在尝试为计算器GUI安排两组按钮.每个人都使用GroupLayout来制作它们.一组是数字(和"."),另一组是操作按钮.这基本上有效但如果其中一个按钮具有双倍长度(例如我的操作集上的等号按钮),则会抛出其他按钮.我将使用操作集作为示例.有两列和四行按钮.最后一行只有一个按钮 - 等于.我希望在两列上进行双倍长度拉伸.目前,当我希望第二列位于其上时,它只是将第二列推到它的末端.
这是布局的代码 - operLayout是操作布局的名称,第一行是左右括号,第二行是+和 - ,第三行是*和/,最后一行是等于.每个按钮在其他地方都设置了minimumSize(它们都是相同的,除了equals是两倍长).
operLayout.setAutoCreateGaps(true);
operLayout.setAutoCreateContainerGaps(true);
operLayout.setVerticalGroup(operLayout
.createSequentialGroup()
.addGroup(
operLayout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(leftBracket)
.addComponent(rightBracket))
.addGroup(operLayout.createParallelGroup().addComponent(add).addComponent(subtract))
.addGroup(operLayout.createParallelGroup().addComponent(multiply).addComponent(divide))
.addGroup(operLayout.createParallelGroup().addComponent(equals)));
operLayout.setHorizontalGroup(operLayout
.createSequentialGroup()
.addGroup(
operLayout.createParallelGroup().addComponent(leftBracket).addComponent(add)
.addComponent(multiply).addComponent(equals))
.addGroup(
operLayout.createParallelGroup().addComponent(rightBracket).addComponent(subtract)
.addComponent(divide)));
Run Code Online (Sandbox Code Playgroud)
我明白为什么会这样,但我不知道如何解决这个问题.有一个简单的方法吗?或者我应该改变我的方式吗?谢谢
可能重复:
对单个线程使用sleep()
使用Thread.sleep()时,我遇到了JTextField.setText()的问题.这是我正在制作的基本计算器.当输入字段中的输入格式不正确时,我希望"INPUT ERROR"在输出字段中出现5秒钟,然后清除它.当我只将文本设置为"INPUT ERROR"并打印出中间的文本时,setText()方法确实有效,我发现它确实可以同时使用它和setText("").当我在它们之间放置Thread.sleep()时会出现问题.这是代码的SSCCE版本:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.regex.Pattern;
import javax.swing.*;
public class Calc {
static Calc calc = new Calc();
public static void main(String args[]) {
GUI gui = calc.new GUI();
}
public class GUI implements ActionListener {
private JButton equals;
private JTextField inputField, outputField;
public GUI() {
createFrame();
}
public void createFrame() {
JFrame baseFrame = new JFrame("Calculator");
baseFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel contentPane = new JPanel();
BoxLayout layout = new BoxLayout(contentPane, BoxLayout.Y_AXIS);
contentPane.setLayout(layout);
baseFrame.setContentPane(contentPane);
baseFrame.setSize(320, 100); …Run Code Online (Sandbox Code Playgroud)