在Java GUI中动态添加和排序复选框



我现在正在研究Java GUI数据可视化项目。程序应加载数据文件(20-300m),并根据文件中的信号绘制曲线。信号很多,在不同的数据文件中,这些信号的出现也不同。

例如。我有两个数据文件,名称file1,file2。在file1中,我想绘制3个信号(a,b,c),在文件2中,只有2个信号(a,b)。

在File1中,信号A发生10次,B发生5次,C发生4次。在File2中,信号B发生20次,并发出信号A 10次。我要做的是根据信号生成复选框(用于选择在油漆面板上显示的信号曲线),并根据其发生的这些复选框进行分类。

这意味着,如果我加载file1,则应在a的上方的复选框,然后在B的bock box框中,在最后的复选框C的框A。

有可能做到这一点吗?我希望我的解释有意义。非常感谢你们!

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

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;
    }
}

最新更新