我有一个jtable保存账本文件记录并将它们发送出去。
public class user_AllBooks extends AbstractTableModel{
BookInformation book_info=new BookInformation();
String[] columns=new String[]{"Book Name","Book Date", "Book ID","Borrow Status"};
ArrayList<BookInformation> bData=new ArrayList<BookInformation>();
public user_AllBooks(){
try{
BufferedReader br=new BufferedReader(new FileReader("AllBookRecords.txt"));
String line;
while((line = br.readLine()) != null){
bData.add(initializeBookData(line));
}
br.close();
}
catch(IOException ioe){
}
}
public BookInformation initializeBookData(String myline){
BookInformation book_infos=new BookInformation();
String[] celledLine=myline.split(" ");
book_infos.setBookName(celledLine[0]);
book_infos.setBookDate(celledLine[1]);
book_infos.setBookID(celledLine[2]);
book_infos.setBorrowStatus(celledLine[3]);
return book_infos;
}
@Override
public String getColumnName(int col){
return columns[col];
}
@Override
public int getRowCount() {
if(bData != null){
return bData.size();
}
else{
return 0;
}
}
@Override
public int getColumnCount() {
return columns.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
BookInformation bookInf=bData.get(rowIndex);
Object value;
switch(columnIndex){
case 0:
value=bookInf.getBookName();
break;
case 1:
value=bookInf.getBookDate();
break;
case 2:
value=bookInf.getBookID();
break;
case 3:
value=bookInf.getBorrowStatus();
break;
default :
value="...";
}
return value;
}
}
public class user_AllBooksM extends JFrame implements ActionListener{
user_AllBooks uAllBooks=new user_AllBooks();
final JTable bTable=new JTable(uAllBooks);
JButton borrowButton;
public user_AllBooksM(){
setTitle("All Books");
exitButton=new JButton("Exit");
borrowButton=new JButton("Borrow");
borrowButton.addActionListener(this);
JPanel Bpanel=new JPanel();
Bpanel.setLayout(new FlowLayout());
JScrollPane sp=new JScrollPane(bTable);
Bpanel.add(sp);
Bpanel.add(borrowButton);
this.add(Bpanel);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setBounds(300, 60, 550, 550);
this.setResizable(false);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent event) {
borrowInitialize(bTable.getSelectedRow());
}
public void borrowInitialize(int row){
if(uAllBooks.getValueAt(row, 3).equals("yes")) {
JOptionPane.showMessageDialog(null, "This Book Was Borrowed");
}
else{
uAllBooks.setValueAt("Yes", row, 3);
uAllBooks.fireTableRowsUpdated(row, row);
}
}
public static void main(String[] args){
new user_AllBooksM();
}
}
若要重写setvalueat
,应使用:
@Override
public void setValueAt(Object value, int row, int col)
{
BookInformation book_infos = bData.get(row);
if (col==0)
book_infos.setBookName((String)value);
else if (col==1)
book_infos.setBookDate((String)value);
else if (col==2)
book_infos.setBookID((String)value);
else if (col==3)
book_infos.setBorrowStatus((String)value);
fireTableCellUpdated(row,col);
}
在类user_allbooks
中定义此方法
问题内容: 我想制作一个可编辑的表,然后检查数据以确保其有效。我不确定如何仅更改一个单元格的颜色。我想要一个单元格,例如(0,0)并将前景颜色设置为红色。我已经阅读了SO和Oracle上有关自定义ColorRenderer的其他文章,但是我不知道如何使用它。 谢谢。 问题答案: 假设您要用其他颜色渲染的单元格代表一种状态(我将以“拒绝并批准”为例)。然后,我将在我的表模型中实现一个名为getSta
问题内容: 我试图使自己熟悉JTables,TableModels,JTableHeaders,渲染器等。我试图制作一个简单的虚拟表(出于练习目的),看起来像这样: 我还希望B2单元格-并且只有该单元格-具有蓝色(Color.BLUE)背景-所有其他单元格都可以具有自动分配的Swing默认颜色。 我的代码在下面,并且基于我在本网站和整个互联网上发现的无数示例。但是我没有得到想要的结果。相反,我得到
问题内容: 在Netbeans中,我使用了GUI Builder将JTable插入到我的应用程序中。 到目前为止,我只有一个类(CustomerDB): 每当用户更改表中的数据时,我都希望获取该单元格的旧值(可选)和新值。 为了获取此数据,我尝试实现一个事件侦听器: 然后,将此CellEditorListener分配给表(其单元格编辑器): 到目前为止,该方法有效。 但这还无法使我检测到此单元格的
问题内容: 我在GUI应用程序中使用JTable作为网格来表示游戏的位置。我希望代表对象某个位置的表的单元格具有某种颜色,并且在某些操作上希望移动的对象(即在Grid / JTable中四处移动的颜色单元格)。我知道我可以通过创建一个可扩展的类来更改单元格的颜色,这是唯一的方法吗?还是有一种更简单的方法来改变单元格颜色?对于这样的应用程序,JXTable是否比JTable好? 编辑: 我没有包括以
我有一个JTable,它应该是2列(String,JComboBox)。当我初始化表时,一切看起来都很好。只要一个I在表中选择了一个值,JComboBox单元格就会获取所选项的数据类型。 我想保持JCOmboBox在那里,让它触发数据更改事件,表忽略该列中的数据更改,并保持ComboBox填充。 我的表将此作为覆盖
我有一个问题,我无法解决单独和帮助其他话题在那里。找到了一些相似的,但它没有帮助。 我的问题有点棘手,我想,我会尽力解释清楚。 因此,我得到了一个包含两列的JTable,列2和列3是可编辑的,列4是这两个列的乘积(col4=col2*col3)。我要做的是,当我编辑第2或第3列时,第4列将自动更新它的值。我理解这一点,但不完全理解。只有当我完成MouseClick编辑时单元格才会更新。如果编辑是通