Java 是否可以从值表单数组中选择边界布局位置?

Java 是否可以从值表单数组中选择边界布局位置?,java,swing,user-interface,layout,Java,Swing,User Interface,Layout,我在网格布局框架中有5个标签。我想将gridlayout更改为border layout,使用数组中的位置名称(例如字符串gborders[]={“北”、“中”、“南”、“东”、“西”};)并枚举标签位置。可能吗 这就是我所拥有的: package w1; import java.awt.*; import javax.swing.border.*; import javax.swing.*; public class LayShow { private static JLabel l

我在网格布局框架中有5个标签。我想将gridlayout更改为border layout,使用数组中的位置名称(例如字符串gborders[]={“北”、“中”、“南”、“东”、“西”};)并枚举标签位置。可能吗

这就是我所拥有的:

package w1;

import java.awt.*;
import javax.swing.border.*;
import javax.swing.*;

public class LayShow {

  private static JLabel lLabel;

  public static void main(String[] args) {


    int t = 15;

    String lmNames[] = {"Label 1", "Label 2", 
            "Label 3", "Label 4", "Label 5"};


    String gborders[] = { "North", "Center", "South", "East", "West" };

    Color colors[] = { new Color(11, 125, 155), new Color(155, 55, 200),
        new Color(201, 245, 145), new Color(255, 255, 140),
        new Color(161, 224, 224), new Color(11, 125, 155) };


    Font fonts[] = {new Font("SansSerif", Font.BOLD, t), 
            new Font("Arial", Font.BOLD, t+1), 
            new Font("SansSerif", Font.PLAIN, t+2), 
            new Font("SansSerif", Font.ITALIC, t+3),
            new Font("SansSerif", Font.ITALIC, t+4)};


    JFrame frame = new JFrame("Frame"); 
    frame.setLayout(new GridLayout(0, 2));


    for (int i = 0; i < lmNames.length; i++) {


      final Border
      borderColor = BorderFactory.createLineBorder(colors[i+1]);    
      JPanel p = new JPanel();
      p.setBackground(colors[i]);  
      p.setBorder(BorderFactory.createTitledBorder(borderColor , lmNames[i])); 

      lLabel = new JLabel("label number: " + (i+1));
      p.add(lLabel);
      lLabel.setFont(fonts[i]);
      lLabel.setForeground(colors[i+1]);
      lLabel.setToolTipText("ToolTip for label number: " + (i+1));

      frame.add(p);
    }
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
  }
}
包装w1;
导入java.awt.*;
导入javax.swing.border.*;
导入javax.swing.*;
公开课表演{
私有静态JLabel-lLabel;
公共静态void main(字符串[]args){
int t=15;
字符串lmNames[]={“标签1”,“标签2”,
“标签3”、“标签4”、“标签5”};
字符串gborders[]={“北”、“中”、“南”、“东”、“西”};
颜色[]={新颜色(11125155),新颜色(15555200),
新颜色(201245145),新颜色(25525140),
新颜色(161224224),新颜色(1125155)};
字体字体[]={新字体(“SansSerif”,Font.BOLD,t),
新字体(“Arial”,Font.BOLD,t+1),
新字体(“SansSerif”,Font.PLAIN,t+2),
新字体(“SansSerif”,Font.ITALIC,t+3),
新字体(“SansSerif”,Font.ITALIC,t+4)};
JFrame框架=新的JFrame(“框架”);
frame.setLayout(新的GridLayout(0,2));
for(int i=0;i
您可以执行以下操作

String[] gborders =  { BorderLayout.NORTH,BorderLayout.CENTER, 
                      BorderLayout.SOUTH, BorderLayout.WEST, BorderLayout.EAST };
在单个面板中添加所有内部面板

JFrame frame = new JFrame("Frame"); 
JPanel panel1 = new JPanel();
panel1.setLayout(new BorderLayout());
在for循环的末尾

for (int i = 0; i < lmNames.length; i++) {
  ....
  lLabel.setToolTipText("ToolTip for label number: " + (i+1));
  panel1.add(p,gborders[i]);
}
frame.add(panel1);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
for(int i=0;i

完成。

那么您遇到了什么问题?您不应该将lLabel声明为静态变量,而应该声明为方法的局部变量。您应该尽可能避免非最终静态变量。它们是万恶之源,常常导致内存泄漏。