【问题标题】:dynamically adding and sorting check box in java GUIjava GUI中动态添加和排序复选框
【发布时间】:2018-05-05 00:56:25
【问题描述】:

我现在正在从事 Java GUI 数据可视化项目。程序要加载一个数据文件(20-300M),根据文件中的信号绘制曲线。有这么多的信号,在不同的数据文件中,这些信号的出现也是不同的。

例如我有两个数据文件,名称为 file1,file2。在文件 1 中,我要绘制 3 个信号(A、B、C),在文件 2 中,只有 2 个信号(A、B)。

在file1中,信号A出现10次,B出现5次,C出现4次。在文件 2 中,信号 B 出现 20 次,信号 A 出现 10 次。我要做的是根据信号动态生成复选框(用于选择在Paint Panel上显示的信号曲线),并根据它们的出现对这些复选框进行排序。

这意味着,如果我加载 file1,那么 A 的复选框应该在顶部,然后 B 的复选框,最后是 C 的复选框。如果我加载 file2,那么 B 的复选框应该在顶部,然后的复选框A.

有可能做到吗? 我希望我的解释是有道理的。提前非常感谢你们!

【问题讨论】:

  • 你试过什么?每次选择/加载文件时,它都应该相应地更新复选框
  • 当然可以。请创建一个简短的可运行示例 (SSCCE),以便我们了解您的问题所在。
  • 非常感谢你们的快速回复。我将做一个简短的例子来说明我到目前为止所尝试的内容,然后重新发布:)

标签: java swing user-interface checkbox dynamic


【解决方案1】:

这是一个组件动态布局的例子

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

public class DynamicLayoutExample implements Runnable {

    private static final String[] NAMES_1 = {"One", "Two", "Three", "Four", "Five"};

    private static final String[] NAMES_2 = {"Two", "One", "Five", "Three"};

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new DynamicLayoutExample());
    }

    @Override
    public void run() {
        JFrame frm = new JFrame("Dynamic layout");
        final CardLayout card = new CardLayout();
        final JPanel layoutPanel = new JPanel(card);
        layoutPanel.add(createPanel(NAMES_1), "1");
        layoutPanel.add(createPanel(NAMES_2), "2");
        frm.add(layoutPanel);
        ActionListener l = new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                card.show(layoutPanel, e.getActionCommand());
            }
        };
        JButton btn = new JButton("Show NAMES_1");
        btn.setActionCommand("1");
        btn.addActionListener(l);
        JPanel buttonsPanel = new JPanel();
        buttonsPanel.add(btn);
        btn = new JButton("Show NAMES_2");
        btn.setActionCommand("2");
        btn.addActionListener(l);
        buttonsPanel.add(btn);
        frm.add(buttonsPanel, BorderLayout.NORTH);
        frm.pack();
        frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frm.setLocationRelativeTo(null);
        frm.setVisible(true);
    }

    private JPanel createPanel(String[] array) {
        JPanel result = new JPanel(new GridLayout(array.length, 1));
        for (String s : array) {
            JCheckBox check = new JCheckBox(s);
            check.setHorizontalAlignment(SwingConstants.LEADING);
            result.add(check);
        }
        return result;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多