gpt4 book ai didi

java - 重新排序标签

转载 作者:行者123 更新时间:2023-12-04 09:42:31 26 4
gpt4 key购买 nike

我正在从 FlowLayout JPanel 中的数组动态创建标签,将它们存储在 JLabel 数组中以供将来引用。它们按预期从左到右显示。
我想将其中一个标签移动到面板的开头(最左边)。

我不介意整个数组是否移动或只是两个标签交换位置:

apple orange pear cherry melon
|
cherry apple orange pear melon
or
cherry orange pear apple melon

我交换了数组条目,然后 revalidate() 和 repaint(),但没有任何 react 。
有没有一种简单的方法来移动摆动组件而无需删除所有组件然后将它们重新添加到面板或将所有属性从一个标签复制到另一个标签(我定义了其他标签,而不仅仅是文本)?

这是我的代码的精简版本:
import javax.swing.*;

public class Test extends JPanel {
public Test () {
String entries[] = { "apple", "orange", "pear", "cherry", "melon" };
JLabel[] lbls = new JLabel[entries.length];

for (int i = 0; i < entries.length; ++i) {
lbls[i] = new JLabel();
lbls[i].setText(entries[i]);
add(lbls[i]);
}

// swap array entries
JLabel tmplbl = new JLabel();
tmplbl = lbls[3];
lbls[3] = lbls[0];
lbls[0] = tmplbl;
revalidate();
repaint();

}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame("Test");
frame.setContentPane(new Test());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.pack();
}
});
}
}

最佳答案

I've swapped array entries



交换数组中的条目没有任何作用。 Array 与面板无关。

所以需要对面板上的组件进行调整。

I want to move one of the labels to the beginning (leftmost) of the panel.



嗯,这是与“交换”不同的要求。这也更容易。

您可以将组件添加到面板并指定其在面板中的位置,因此将组件添加到开头很容易,因为它的位置始终为零。

因此,要将第三个组件移动到开头,代码将类似于:
Component component = panel.getComponent(2);
panel.add(component, 0);
panel.revalidate();
panel.repaint();

如果您真的想要交换,那么代码将是相似的。您将在两个位置获取组件,然后首先将一个组件添加回较低的位置,然后将另一个组件添加回较高的位置。

关于java - 重新排序标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62268567/

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