java - 如何在数组中制作Jpanel?
问题描述
我真的不喜欢代码的编写方式,我知道它的编写方式很糟糕,那么有没有办法以更简单的方式编写它?也许通过制作一个数组并循环?
private JPanel pnl1;
private JPanel pnl2;
private JPanel pnl3;
private JPanel pnl4;
private JPanel pnl5;
public void createGUI() {
setSize(WIDTH, HEIGHT);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
//Panel related code will go here
pnl1 = createPanel(Color.blue);
pnl2 = createPanel(Color.black);
pnl3 = createPanel(Color.cyan);
pnl4 = createPanel(Color.green);
pnl5 = createPanel(Color.darkGray);
this.getContentPane().add(pnl1, BorderLayout.EAST);
this.getContentPane().add(pnl2, BorderLayout.WEST);
this.getContentPane().add(pnl3, BorderLayout.SOUTH);
this.getContentPane().add(pnl4, BorderLayout.CENTER);
this.getContentPane().add(pnl5, BorderLayout.NORTH);
repaint();
this.setVisible(true);
}
private JPanel createPanel(Color c) {
//Create a JPanel object and store it in a local var
//set the background colour to that passed in c
//Return the JPanel object
JPanel jp = new JPanel();
jp.setBackground(c);
return jp;
}
谢谢
解决方案
当然可以使用数组和循环重写您的代码。
在您的createGUI()
方法中,您可以执行以下操作:
Color[] colors = {
Color.blue, Color.black, Color.cyan, Color.green, Color.darkGray
};
Object[] constraints = {
BorderLayout.EAST, BorderLayout.WEST, BorderLayout.SOUTH, BorderLayout.CENTER, BorderLayout.NORTH
};
for (int i = 0; i < 5; i++) {
JPanel panel = createPanel(colors[i]);
this.getContentPane().add(panel, constraints[i]);
}
但正如其他人已经评论的那样:根据您的目标,这可能是也可能不是改进代码的最佳主意。
推荐阅读
- docker-compose - 无法使用 gRPC 客户端连接到 Dapr(自托管)
- flutter - 无法从 CMD 打开 Flutter 应用,但从 Android Studio 打开。Pubspec.yaml 错误
- ruby-on-rails - rails html文件打印数据库中不需要的数据
- python - 使用python将图像从目录的子目录移动到新目录
- javascript - 谁能帮我将代码转换为打字稿?
- java - ARCore – WorldScale 和 LocalScale 有什么区别?
- azure - Azure 机器学习 - 正确的输入数据集但是由于“[Errno 2] 没有这样的文件或目录”而无法打开所需的文件
- r - R中的软件
- javascript - 如何在回调函数 node.js 中传递参数?
- angular - 有没有办法清除 ngx-treeview 组件的过滤器?