如何在Jlist中添加两列? [英] How to add two columns in a Jlist?
本文介绍了如何在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屋!
查看全文