我创建了包含员工信息的JTable
。在这个JTable中,我添加了名为“资历”的列。此列由JComboBox
表示(每行的内容不同)。例如:
Row 1 | JComboBox(){"Programmer","Web"}
Row 2 | JComboBox(){"Writer","Editor"}
JComboBox
内容取自列表
。
问题是在第1行和第2行中选择的项目是“程序员”,但是“程序员”不应该出现在第2行中。只有当我单击JComboBox
时,才会出现正确的列表,即第2行-{“writer”,“editor”}。
TableColumn column = table.getColumnModel().getColumn(5);
column.setCellRenderer(getRenderer());
private TableCellRenderer getRenderer() {
return new TableCellRenderer() {
private JComboBox<String> box = new JComboBox<String>();
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
for (String q : employees[row].getQualification())
box.addItem(q);
box.setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
box.setForeground(isSelected ? table.getSelectionForeground() : table.getForeground());
return box;
}
};
}
重写JTable
的getCelleDitor()
方法。类似于:
import java.awt.*;
import java.awt.event.*;
import java.util.List;
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.table.*;
public class TableComboBoxByRow extends JPanel
{
List<TableCellEditor> editors = new ArrayList<TableCellEditor>(3);
public TableComboBoxByRow()
{
setLayout( new BorderLayout() );
// Create the editors to be used for each row
String[] items1 = { "Red", "Blue", "Green" };
JComboBox<String> comboBox1 = new JComboBox<String>( items1 );
DefaultCellEditor dce1 = new DefaultCellEditor( comboBox1 );
editors.add( dce1 );
String[] items2 = { "Circle", "Square", "Triangle" };
JComboBox<String> comboBox2 = new JComboBox<String>( items2 );
DefaultCellEditor dce2 = new DefaultCellEditor( comboBox2 );
editors.add( dce2 );
String[] items3 = { "Apple", "Orange", "Banana" };
JComboBox<String> comboBox3 = new JComboBox<String>( items3 );
DefaultCellEditor dce3 = new DefaultCellEditor( comboBox3 );
editors.add( dce3 );
// Create the table with default data
Object[][] data =
{
{"Color", "Red"},
{"Shape", "Square"},
{"Fruit", "Banana"},
{"Plain", "Text"}
};
String[] columnNames = {"Type","Value"};
DefaultTableModel model = new DefaultTableModel(data, columnNames);
JTable table = new JTable(model)
{
// Determine editor to be used by row
public TableCellEditor getCellEditor(int row, int column)
{
int modelColumn = convertColumnIndexToModel( column );
if (modelColumn == 1 && row < 3)
return editors.get(row);
else
return super.getCellEditor(row, column);
}
};
JScrollPane scrollPane = new JScrollPane( table );
add( scrollPane );
}
private static void createAndShowUI()
{
JFrame frame = new JFrame("Table Combo Box by Row");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add( new TableComboBoxByRow() );
frame.setSize(200, 200);
frame.setLocationByPlatform( true );
frame.setVisible( true );
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowUI();
}
});
}
}
我有一个在运行时加载行的表。加载后,用户需要在每一行的第一列中从中选择一个项目。然后他需要在每行的同一行上从另一个中选择一个项目。第二个的内容取决于第一个的选择。 我现在的编码方式是更改整个第二列的combobox内容。 有没有一种方法可以让每一行的组合框对象都不一样,这样我就可以在第一个组合框中选择一个值的时候处理它?
我正在尝试使用GridLayoutManager构建一个RecyclerView,它每行有一个可变的列计数,如下所示: 同一行中所有项目的宽度之和将始终为屏幕宽度。 我试图重新组织项目列表,按行列表分组,然后每行膨胀一个线性布局。它不太好。 所以我被困住了,没有任何想法。任何帮助都将非常感激
我想在我的应用程序中创建一个JTable。该表将包含两个库,第一个是软件模块的名称。第二列需要包含一个JComboBox,第一列中包含软件模块的修订号。 这甚至可能,或者我需要找到另一种方法来做到这一点?(例如:将按钮放在单元格中,然后从弹出窗口中选择修订版本) 提前谢谢你!
问题内容: 我试图用来创建我的,以确保我的构建/项目的质量。该项目也需要使用和。一切在我的本地计算机上都可以正常运行,但是现在我正在尝试使环境一致,可重现。当我尝试在新的虚拟机中运行时,会中断一个在本机中正常运行但 不在 新vm中运行的。 我检查了版本,,,(其)一切都是一样的。但是,我的Maven项目在此测试中失败了。 我在这里想念什么?任何想法,建议都会受到赞赏,因为我现在还没有想法,到目前为
问题内容: 使用Pandas或CSV模块将每行具有不同列数的CSV导入Pandas DataFrame的最佳方法是什么。 使用此代码: 产生以下错误 问题答案: 在read_csv()中提供列名列表应该可以解决问题。 例如:names = [‘a’,’b’,’c’,’d’,’e’] https://github.com/pydata/pandas/issues/2981 编辑:如果您不想提供列名,
问题内容: 我遇到的情况是可以从多个不同的域访问应用程序。例如, foo.com 和 bar.com 在理论上都可以指向我的应用程序。此外,它们的子域也可以指向我的应用程序,例如 red.foo.com 和 blue.foo.com 。我正在使用Express cookie会话,该会话的初始化代码如下所示: 当用户访问 foo.com 或其任何子域时,这种方法效果很好,但是 bar.com 无法正