如何在Jlist中添加两列? [英] How to add two columns in a Jlist?

查看:142
本文介绍了如何在Jlist中添加两列?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我找到了一个双 JList 示例代码,但我需要 Jlist 中的两列。
如何在 Jlist 中添加两列?



我尝试使用 ListCellRenderer ,但我没有向模型添加元素。





主框架......

 公共类DualTableFrame扩展JFrame {

私有JTable leftTable;
私有JTable rightTable;
private JButton addButton;
private JButton removeButton;

public DualTableFrame(){

setTitle(双持表);
setDefaultCloseOperation(EXIT_ON_CLOSE);

setLayout(new GridBagLayout());

leftTable = new JTable(new SimpleColorTableModel());
rightTable = new JTable(new SimpleColorTableModel());

setupTable(leftTable);
setupTable(rightTable);

populate((SimpleColorTableModel)leftTable.getModel());

addButton = new JButton(Add>>);
removeButton = new JButton(<< Remove);

JPanel pnlActions = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.fill = GridBagConstraints.HORIZONTAL;
pnlActions.add(addButton,gbc);

gbc.gridy ++;
pnlActions.add(removeButton,gbc);

gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 0.33;
gbc.fill = GridBagConstraints.HORIZONTAL;

add(new JLabel(Available Choices),gbc);
gbc.gridx ++;
add(new JPanel(),gbc);
gbc.gridx ++;
add(new JLabel(Your Choices),gbc);

gbc.gridy ++;
gbc.gridx = 0;
gbc.weighty ++;
gbc.fill = GridBagConstraints.BOTH;

add(new JScrollPane(leftTable),gbc);
gbc.gridx ++;
add(pnlActions,gbc);
gbc.gridx ++;
add(new JScrollPane(rightTable),gbc);

setSize(400,600);

addButton.setEnabled(false);
removeButton.setEnabled(false);

leftTable.getSelectionModel()。addListSelectionListener(new ListSelectionListener(){
@Override
public void valueChanged(ListSelectionEvent e){

int count = leftTable.getSelectedRowCount();
addButton.setEnabled(count> 0);

}
});
rightTable.getSelectionModel()。addListSelectionListener(new ListSelectionListener(){
@Override
public void valueChanged(ListSelectionEvent e){

int count = rightTable.getSelectedRowCount( );
removeButton.setEnabled(count> 0);

}
});

addButton.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){

moveSelectedRow(leftTable,rightTable);

}
});

removeButton.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){

moveSelectedRow(rightTable,leftTable);

}
});

}

protected void moveSelectedRow(JTable from,JTable to){

SimpleColorTableModel fromModel =(SimpleColorTableModel)from.getModel();
SimpleColorTableModel toModel =(SimpleColorTableModel)to.getModel();

for(int index:from.getSelectedRows()){

Vector rowValue =(Vector)fromModel.getDataVector()。get(index);

toModel.addRow(rowValue);

}

int selectedRow = -1;
while((selectedRow = from.getSelectedRow())!= -1){

fromModel.removeRow(selectedRow);

}

from.clearSelection();

}

protected void populate(SimpleColorTableModel model){

model.addRow(new Object [] {Black,Color.BLACK} );
model.addRow(new Object [] {Blue,Color.BLUE});
model.addRow(new Object [] {Cyan,Color.CYAN});
model.addRow(new Object [] {Dark Grey,Color.DARK_GRAY});
model.addRow(new Object [] {Gray,Color.GRAY});
model.addRow(new Object [] {Green,Color.GREEN});
model.addRow(new Object [] {Light Gary,Color.LIGHT_GRAY});
model.addRow(new Object [] {Mangenta,Color.MAGENTA});
model.addRow(new Object [] {Orange,Color.ORANGE});
model.addRow(new Object [] {Pink,Color.PINK});
model.addRow(new Object [] {Red,Color.RED});
model.addRow(new Object [] {White,Color.WHITE});
model.addRow(new Object [] {Yellow,Color.YELLOW});

}

protected void setupTable(JTable table){

table.setFillsViewportHeight(true);

table.setDefaultRenderer(Color.class,new ColorTableCellRenderer());

}
}

表格单元格渲染器

 公共类ColorTableCellRenderer extends DefaultTableCellRenderer {

@Override
public Component getTableCellRendererComponent(JTable table,Object value ,boolean isSelected,boolean hasFocus,int row,int column){

super.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column);

setText(null);
if(value instanceof Color){

setOpaque(true);
setBackground((Color)value);

}

返回此项;

}

}

表模型

  public class SimpleColorTableModel extends DefaultTableModel {

public SimpleColorTableModel(){

addColumn(Name);
addColumn(Color);

}

@Override
public Class<?> getColumnClass(int columnIndex){

Class clazz = String.class;

switch(columnIndex){

case 1:
clazz = Color.class;
休息;

}

返回clazz;

}

}


I found a Dual JList sample code, but I need two columns in a Jlist. How to add two columns in a Jlist?

I tried to use ListCellRenderer, but I failed to add elements to the model.

Here's the code show in webpage with image.

解决方案

You mean something like this?

I'd start by having a read through How to Use Tables

The Main frame...

public class DualTableFrame extends JFrame {

    private JTable leftTable;
    private JTable rightTable;
    private JButton addButton;
    private JButton removeButton;

    public DualTableFrame() {

        setTitle("Dual wielding tables");
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        setLayout(new GridBagLayout());

        leftTable = new JTable(new SimpleColorTableModel());
        rightTable = new JTable(new SimpleColorTableModel());

        setupTable(leftTable);
        setupTable(rightTable);

        populate((SimpleColorTableModel) leftTable.getModel());

        addButton = new JButton("Add >>");
        removeButton = new JButton("<< Remove");

        JPanel pnlActions = new JPanel(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        pnlActions.add(addButton, gbc);

        gbc.gridy++;
        pnlActions.add(removeButton, gbc);

        gbc = new GridBagConstraints();
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.weightx = 0.33;
        gbc.fill = GridBagConstraints.HORIZONTAL;

        add(new JLabel("Available Choices"), gbc);
        gbc.gridx++;
        add(new JPanel(), gbc);
        gbc.gridx++;
        add(new JLabel("Your Choices"), gbc);

        gbc.gridy++;
        gbc.gridx = 0;
        gbc.weighty++;
        gbc.fill = GridBagConstraints.BOTH;

        add(new JScrollPane(leftTable), gbc);
        gbc.gridx++;
        add(pnlActions, gbc);
        gbc.gridx++;
        add(new JScrollPane(rightTable), gbc);

        setSize(400, 600);

        addButton.setEnabled(false);
        removeButton.setEnabled(false);

        leftTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
            @Override
            public void valueChanged(ListSelectionEvent e) {

                int count = leftTable.getSelectedRowCount();
                addButton.setEnabled(count > 0);

            }
        });
        rightTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
            @Override
            public void valueChanged(ListSelectionEvent e) {

                int count = rightTable.getSelectedRowCount();
                removeButton.setEnabled(count > 0);

            }
        });

        addButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                moveSelectedRow(leftTable, rightTable);

            }
        });

        removeButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                moveSelectedRow(rightTable, leftTable);

            }
        });

    }

    protected void moveSelectedRow(JTable from, JTable to) {

        SimpleColorTableModel fromModel = (SimpleColorTableModel) from.getModel();
        SimpleColorTableModel toModel = (SimpleColorTableModel) to.getModel();

        for (int index : from.getSelectedRows()) {

            Vector rowValue = (Vector) fromModel.getDataVector().get(index);

            toModel.addRow(rowValue);

        }

        int selectedRow = -1;
        while ((selectedRow = from.getSelectedRow()) != -1) {

            fromModel.removeRow(selectedRow);

        }

        from.clearSelection();

    }

    protected void populate(SimpleColorTableModel model) {

        model.addRow(new Object[]{"Black", Color.BLACK});
        model.addRow(new Object[]{"Blue", Color.BLUE});
        model.addRow(new Object[]{"Cyan", Color.CYAN});
        model.addRow(new Object[]{"Dark Gray", Color.DARK_GRAY});
        model.addRow(new Object[]{"Gray", Color.GRAY});
        model.addRow(new Object[]{"Green", Color.GREEN});
        model.addRow(new Object[]{"Light Gary", Color.LIGHT_GRAY});
        model.addRow(new Object[]{"Mangenta", Color.MAGENTA});
        model.addRow(new Object[]{"Orange", Color.ORANGE});
        model.addRow(new Object[]{"Pink", Color.PINK});
        model.addRow(new Object[]{"Red", Color.RED});
        model.addRow(new Object[]{"White", Color.WHITE});
        model.addRow(new Object[]{"Yellow", Color.YELLOW});

    }

    protected void setupTable(JTable table) {

        table.setFillsViewportHeight(true);

        table.setDefaultRenderer(Color.class, new ColorTableCellRenderer());

    }
}

The Table cell renderer

public class ColorTableCellRenderer extends DefaultTableCellRenderer {

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {

        super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

        setText(null);
        if (value instanceof Color) {

            setOpaque(true);
            setBackground((Color)value);

        }

        return this;

    }

}

The table model

public class SimpleColorTableModel extends DefaultTableModel {

    public SimpleColorTableModel() {

        addColumn("Name");
        addColumn("Color");

    }

    @Override
    public Class<?> getColumnClass(int columnIndex) {

        Class clazz = String.class;

        switch (columnIndex) {

            case 1:
                clazz = Color.class;
                break;

        }

        return clazz;

    }

}

这篇关于如何在Jlist中添加两列?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆