gpt4 book ai didi

java - 为什么我必须添加 JSeparator 两次?

转载 作者:行者123 更新时间:2023-11-30 04:36:58 26 4
gpt4 key购买 nike

在我的代码中,我添加了一些 JSeparator。一切工作正常,除了一开始,我必须添加两个 JSeparator 来显示它们,而不是一个!代码如下:

    setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
int counter = 1;
add(new JSeparator(SwingConstants.HORIZONTAL)); //Here is the
add(new JSeparator(SwingConstants.HORIZONTAL)); //problem
JPanel p2 = new JPanel();
for (int i = 0; i < petsx; i ++) {
for (int i2 = 0; i2 < petsy; i2 ++) {
p2.add(new JLabel(new ImageIcon(pics[i][i2])));
p2.add(new JLabel(names[i][i2]));
if (counter % petsx == 0) {
add(p2);
add(new JSeparator(SwingConstants.HORIZONTAL));
p2 = new JPanel();
counter = 0;
} else {
JSeparator js = new JSeparator(SwingConstants.VERTICAL);
js.setPreferredSize(new Dimension(1, newPetHeight));
p2.add(js);
}
counter ++;
}
}

如您所见,我必须调用 add(new JSeparator(SwingConstants.HORIZONTAL)); 两次才能使其正常工作。如果我只调用一次,则 JSeparator 不会显示。这是为什么?

这是可编译的代码:http://pastebin.com/xbe47a29

最佳答案

我没有任何问题...

enter image description here

我怀疑您可能正在执行以下一项或多项操作

  1. 第一个分隔符可能会与容器的最顶部对齐,紧靠标题栏,使其“看起来”就像没有被添加一样。
  2. 您没有在 EDT 中创建 UI
  3. 您在完成创建 Pane 之前显示框架
  4. 还有一些您没有告诉我们的事情

.

public class TestSeperator {

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

public TestSeperator() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException ex) {
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
} catch (UnsupportedLookAndFeelException ex) {
}

JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new TestSeperatorPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}

public class TestSeperatorPane extends JPanel {

public TestSeperatorPane() {
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
int counter = 1;
add(new JSeparator(SwingConstants.HORIZONTAL)); //Here is the
add(new JSeparator(SwingConstants.HORIZONTAL)); //problem
JPanel p2 = new JPanel();
int petsx = 4;
int petsy = 4;
for (int i = 0; i < petsx; i++) {
for (int i2 = 0; i2 < petsy; i2++) {
p2.add(new JLabel(":)"));
p2.add(new JLabel("A"));
if (counter % petsx == 0) {
add(p2);
add(new JSeparator(SwingConstants.HORIZONTAL));
p2 = new JPanel();
counter = 0;
} else {
JSeparator js = new JSeparator(SwingConstants.VERTICAL);
// This is a bad idea...
//js.setPreferredSize(new Dimension(1, newPetHeight));
js.setBorder(new EmptyBorder(6, 0, 6, 0));
p2.add(js);
}
counter++;
}
}
}
}
}

关于java - 为什么我必须添加 JSeparator 两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13252014/

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