【发布时间】:2019-04-29 16:49:24
【问题描述】:
我正在编写一个小应用程序,其中我想要一个将窗口分成两个部分的 gui,每个部分将由 JPanel 控制。我想在左侧添加一个输入字段和一组按钮。我有代码:
public ModalModeller() {
super("Modal Modeller");
//setLayout(new GridBagLayout());
setSize(1000, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
font = new Font("Sans-serif", Font.PLAIN, 20);
setUpTextInputField();
setUpButtons();
setUpPanels();
setVisible(true);
}
public void setUpTextInputField() {
inputField = new JTextField(30);
inputField.addActionListener( // anonymous inner class
new ActionListener() {
public void actionPerformed(ActionEvent e) {
String s = inputField.getText();
ExprStr inputExpression = new ExprStr(s);
System.out.println(s);
}
});
//add(inputField);
}
public void setUpButtons() {
buttonPanel = new JPanel();
buttonPanel.setLayout(new GridBagLayout());
GridBagConstraints buttonConstraints = new GridBagConstraints();
buttonConstraints.gridx = 0;
buttonConstraints.gridy = GridBagConstraints.RELATIVE;
buttonConstraints.anchor = GridBagConstraints.WEST;
reflexB = new JRadioButton();
reflexB.addActionListener(this);
reflexB.setFont(font);
transB = new JRadioButton();
transB.addActionListener(this);
transB.setFont(font);
symmB = new JRadioButton();
symmB.addActionListener(this);
symmB.setFont(font);
hereditaryB = new JRadioButton();
hereditaryB.addActionListener(this);
hereditaryB.setFont(font);
buttonPanel.add(reflexB);
buttonPanel.add(transB);
buttonPanel.add(symmB);
buttonPanel.add(hereditaryB);
}
public void setUpPanels() {
leftPanel = new JPanel();
rightPanel = new JPanel();
leftPanel.setLayout(new GridBagLayout());
rightPanel.setLayout(new GridBagLayout());
leftPanel.setBackground(Color.black);
GridBagConstraints leftConstraints = new GridBagConstraints();
GridBagConstraints rightConstraints = new GridBagConstraints();
leftConstraints.fill = GridBagConstraints.BOTH;
leftConstraints.gridx = 0;
leftConstraints.gridy = 0;
leftPanel.add(inputField, leftConstraints);
leftConstraints.fill = GridBagConstraints.BOTH;
leftConstraints.gridx = 1;
leftConstraints.gridy = 0;
leftPanel.add(buttonPanel, leftConstraints);
add(leftPanel);
add(rightPanel);
}
我知道当我不在 JPanel 中绘制 inputTextField 时它可以工作,但由于某种原因,我的窗口中都没有绘制任何 JPanel。为什么是这样?我是否将它们添加到错误的位置?我选择的布局有问题吗?
谢谢:)
【问题讨论】:
-
您考虑过使用
JSplitPane吗? -
由于您将代码分解为组件,这很好,我会考虑将它们制作成自定义组件,这将简化您的代码并使其更易于维护
-
buttonPanel 是方法 setUpButtons() 的本地变量。由于您没有将该面板添加到任何内容,因此当该方法结束时,buttonPanel 及其所有内容都将被丢弃。