【发布时间】:2016-05-02 08:48:02
【问题描述】:
我正在尝试解决一个问题,即我有一些按钮和一个底部面板“FlowLayout”、“BorderLayout”、“GridLayout”来切换顶部按钮的布局。到目前为止,我这样做了,但它不起作用。需要一个解决方案。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import static javax.swing.JFrame.EXIT_ON_CLOSE;
class Calculator extends JFrame implements ActionListener {
Container container;
JPanel p = new JPanel();
JPanel panelTop = new JPanel();
JButton b[] = new JButton[12];
JButton layoutButton[] = new JButton[3];
String sLayout[] = {"FlowLayout", "BorderLayout", "GridLayout"};
String s[] = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "11", "12"};
String Screen = "";
public Calculator() {
super("Calculator");
container = getContentPane();
for (int i = 0; i < sLayout.length; i++) {
layoutButton[i] = new JButton(sLayout[i]);
layoutButton[i].addActionListener(this);
p.add(layoutButton[i]);
}
container.add(p, BorderLayout.SOUTH);
}//End Constructor
@Override
public void actionPerformed(ActionEvent event) {
if (event.getSource() == layoutButton[2]) {
panelTop.setLayout(new GridLayout(4, 4, 5, 5));
for (int i = 0; i < s.length; i++) {
b[i] = new JButton("Button " + s[i]);
panelTop.add(b[i]);
}
container.add(panelTop, BorderLayout.NORTH);
}
}
public static void main(String[] args) {
Calculator calculator = new Calculator();
calculator.setSize(500, 500);
calculator.setVisible(true);
calculator.setResizable(true);
calculator.setLocationRelativeTo(null);
calculator.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}//end class
如果我可以让它为一个按钮工作,我相信我可以解决其余的问题。
【问题讨论】:
-
在你更新的容器上调用 revalidate 和 repaint
-
一个问题。如果我继续使用按钮,它会在顶部面板上重新添加我不想要的按钮。如何解决?
-
panelTop.removeAll? -
@MadProgrammer,你为什么总是在 cmets 中给出答案?在它所属的地方给出正确答案只会增加你的声誉。
-
@Hackerdarshi 因为 1- 它是单线; 2- op 应该首先参考 JavaDocs 和教程; 3- 我真的不需要那么严重的代表(至少不是来自这么简单的问题)