gpt4 book ai didi

java - 将 JLabel 大小/间隙设置为 JCheckBox

转载 作者:行者123 更新时间:2023-11-29 05:52:38 28 4
gpt4 key购买 nike

请看下面的代码

import java.awt.GridLayout;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class TestSend extends JFrame
{
private Box names, emails;
private JButton ok;
private Map mMap;
private JLabel nameLabel, emailLabel;
private JPanel mainPanel;
private JScrollPane scroll;


public TestSend()
{
names = new Box(BoxLayout.Y_AXIS);
emails = new Box(BoxLayout.Y_AXIS);

nameLabel = new JLabel("Names");
emailLabel = new JLabel("Email");

mainPanel = new JPanel();
mainPanel.setLayout(new GridLayout(2,2));

scroll = new JScrollPane(mainPanel);

mainPanel.add(nameLabel);
mainPanel.add(emailLabel);
mainPanel.add(names);
mainPanel.add(emails);

mMap = new HashMap();

mMap.put("yohan", "yy@yahoo.com");
mMap.put("Gihan", "gihan@yahoo.com");
mMap.put("Sumi", "sumi@yahoo.com");
mMap.put("mac", "mac@yahoo.com");
mMap.put("Jay", "jay@yahoo.com");
mMap.put("Rom", "rom@yahoo.com");
mMap.put("shane", "shane@yahoo.com");
mMap.put("Mafe", "mafe@yahoo.com");
mMap.put("willi", "willi@yahoo.com");

Iterator iter = mMap.entrySet().iterator();



while(iter.hasNext())
{
Map.Entry mEntry = (Map.Entry)iter.next();

JCheckBox cBox = new JCheckBox((String)mEntry.getKey());

names.add(cBox);

if((String)mEntry.getValue() != null && ((String)mEntry.getValue()).length() != 0 && !((String)mEntry.getValue()).equals(""))
{
JLabel lLabel = new JLabel((String)mEntry.getValue());
// lLabel.setPreferredSize(new Dimension(cBox.getPreferredSize().width,cBox.getPreferredSize().height));
emails.add(lLabel);
emails.add(new JPanel());

}
else
{
JLabel lLabel = new JLabel();
//lLabel.setPreferredSize(new Dimension(cBox.getPreferredSize().width,cBox.getPreferredSize().height));
emails.add(lLabel);
emails.add(new JPanel());
}

}


this.add(scroll);
this.pack();
this.setVisible(true);

}

public static void main(String[]args)
{
new TestSend();
}
}

执行它时,您可以看到与 JCheckBox 相比,JLabel 包含的垂直间隙更小。因此,“电子邮件地址”(JLabel) 不会显示在显示“姓名”(JCheckBox) 的同一行中。我该如何解决这个问题?

最佳答案

GridLayout有一个很好的功能,可以让你使用 0表示任意数量的行或列(但不能同时表示)。还有,

  • 指定您的 Map参数:Map<String, String> .

  • Set工具 Iterable ,它允许使用 Map.Entry 进行 for-each 循环.

  • Swing GUI 对象应该event dispatch thread 上构造和操作.

image

import java.awt.EventQueue;
import java.awt.GridLayout;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class TestSend extends JFrame {

private JPanel names = new JPanel(new GridLayout(0, 1));
private Map<String, String> mMap = new HashMap<String, String>();

public TestSend() {
this.setDefaultCloseOperation(EXIT_ON_CLOSE);

JPanel top = new JPanel(new GridLayout(1, 0));
top.add(new JLabel("Names"));
top.add(new JLabel("Email"));
names.add(top);

mMap.put("yohan", "yy@yahoo.com");
mMap.put("Gihan", "gihan@yahoo.com");
mMap.put("Sumi", "sumi@yahoo.com");
mMap.put("mac", "mac@yahoo.com");
mMap.put("Jay", "jay@yahoo.com");
mMap.put("Rom", "rom@yahoo.com");
mMap.put("shane", "shane@yahoo.com");
mMap.put("Mafe", "mafe@yahoo.com");
mMap.put("willi", "willi@yahoo.com");
for (Map.Entry<String, String> e : mMap.entrySet()) {
names.add(createPanel(e.getKey(), e.getValue()));
}

this.add(new JScrollPane(names));
this.pack();
this.setVisible(true);
}

private static JPanel createPanel(String s1, String s2) {
JPanel panel = new JPanel(new GridLayout(1, 0));
panel.add(new JCheckBox(s1));
panel.add(new JLabel(s2));
return panel;
}

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {

@Override
public void run() {
new TestSend();
}
});
}
}

关于java - 将 JLabel 大小/间隙设置为 JCheckBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13339411/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com