我正在编写一个Java GUI应用程序,它是这样的:
JPanel main = new JPanel(new GridLayout(1, 1));
JPanel buttonPanel = new JPanel();
buttonPanel.add(button);
main.add(buttonPanel)
我想添加一个按钮到网格,但我希望它在网格面板的中心。将按钮添加到另一个JPanel
允许我将其居中到网格。
有更短的方法吗?
例如:JPanel main = new JPanel(new GridLayout(1, 1));
JPanel buttonPanel = JPanel();
main.add(new JPanel().add(button));
这对我不起作用。
谢谢:)
我同意其他评论者的看法,即减少代码行数可能没有您想象的那么必要:一般来说,您的目标应该是减少代码复杂性,而不是代码长度,尽量减少长度通常会导致代码更复杂/难以理解,而不是更简单。
也就是说,应用基本的OO原则可以使您在保持(如果不是增加)代码清晰度的同时缩短代码:
class CenteredContentPanel extends JPanel {
CenteredContentPanel(JComponent addTo){
this.setLayout(new GridLayout(1,1));
JPanel parentPanel = new JPanel();
parentPanel.add(addTo);
this.add(parentPanel);
}
}
现在,您可以使用一行代码向父容器添加任意多的这些元素:
JPanel main = new JPanel();
main.add(new CenteredContentPanel(button));
//repeat above line to add as many "centered" components as you need to
(代码是未经测试的,因为我没有访问IDE的时刻,但你得到的要点…)
你需要添加main到框架:
add(main.add(new JPanel().add(button)));
这对我很好:
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MyFrameClass extends JFrame
{
public MyFrameClass(){
JPanel main = new JPanel(new GridLayout(1, 1));
JButton button = new JButton();
add(main.add(new JPanel().add(button)));
setSize(800,600);
setVisible(true);
}
public static void main (String [] args)
{
new MyFrameClass();
}
}