我有一个JTable,我正在使用互联网上的数据插入行.当我运行直接从main函数填充列表的代码时,我可以看到在调用'fireTableRowsInserted'的同时插入每一行 - 这就是我想要的行为.但是,当我从JButton的ActionListener运行相同的代码时(在'ActionPreformed()'期间,该表在线程/事件完成之前不会更新.我认为问题与线程有关,但我不是很熟悉与线程如何工作,我不知道从哪里开始.这是一个问题的例子:
public class Main {
static TestModel myTestModel = new TestModel();
public static void main(String[] args) {
JFrame testFrame = new JFrame();
JTable table = new JTable(myTestModel);
JButton button = new JButton("Load");
testFrame.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
testFrame.getContentPane().add(button, BorderLayout.PAGE_END);
testFrame.pack();
testFrame.setVisible(true);
testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
button.addActionListener(new ActionListener(){
@Override public void actionPerformed(ActionEvent e) {
//When openURLStr is called here, the table in the JFrame doesn't add rows until
// the function has exited.
openURLStr("http://download.oracle.com/javase/1.4.2/docs/api/java/awt/Component.html", true);
}
});
//When openURLStr is called here, the table …Run Code Online (Sandbox Code Playgroud) 我有一个View带有JTable和另一个类的类DB.In DB是一种具有数据库连接的方法.从中调用此方法时View,我希望它从数据库中返回整个数据.我应该使用什么作为返回类型?列表,矢量,数组,地图,......?
我阅读了很多教程,但对各种可能性感到非常困惑.我真的是最简单的方法,只是为了理解它是如何工作的.
我不知道怎么做在特定行中设置一个jcombobox ...现在我对所有行都有这个jcombobox,但我想只在一行中:
JComboBox cc = new JComboBox();
cc.addItem(jComboBox5.getSelectedItem()+"/"+jComboBox6.getSelectedItem()+"/"+jComboBox7.getSelectedItem()+" "+jComboBox1.getSelectedItem()+"."+jComboBox2.getSelectedItem());
jTable1.getColumnModel().getColumn(3).setCellEditor(new DefaultCellEditor(cc));
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
renderer.setToolTipText("CLICCA PER LE DATE");
jTable1.getColumnModel().getColumn(3).setCellRenderer(renderer);
Run Code Online (Sandbox Code Playgroud) 我得到了以下代码,并且有这个错误(我试图保持代码尽可能短,忽略getColumnCount等函数只是构造函数):
下面的代码用于通过SQLite语句在Swing中创建JTable,我需要复选框的布尔值(是的,我知道我必须编辑/添加一个函数,但我想保持代码尽可能小).
码:
package view;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.table.AbstractTableModel;
import controller.Database;
class Test extends AbstractTableModel {
Database db = new Database();
ResultSet rs;
private String[] columnNames = {"Vorname", "Nachname", "E-Mail", "Anrede", "Jahrgang", "Ablösung", "Scheibe", "Waffe", "Gruppe", "Verpflegung", "Aktiv"};
Object[][] data;
public Test(){
int result = 0;
try {
rs = db.stat.executeQuery("select count(*) as schuetzencount from schuetze;");
result = Integer.parseInt(rs.getString("schuetzencount"));
data = new String[result][11];
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
rs …Run Code Online (Sandbox Code Playgroud) 目前我正在开发一个包含Jtable从DataBase表中列出一些值的应用程序,我已经将JTable中的单元格设置为可编辑,因此我可以将这些值的更改保存到DB表中,此时此刻我可以想到从Jtable和旧值中检索所有更新的值(我将它们保存在另一个ArrayList中),然后将它们发送到我的方法以进行更新.
MyTableModel myTable= (InsDefinicionTM) myTable.getModel();
for (int i = 0; i < myTable.getRowCount(); i++) {
updateInsDefinicion(myTable.getUpdatedValue(i), oldValues.get(i));
}
Run Code Online (Sandbox Code Playgroud)
然而,这种方法不是我正在寻找的行为(因为我认为我可以做出更好的事情)我不想只编辑一个值,并阻止从表中的其他字段中选择,直到我按下一些"保存"按钮,任何人都知道如何防止JTable中的其他字段可编辑或选择能够?我可以使用这两个中的任何一个,任何帮助将不胜感激!
我正在尝试更改JTable中列中一个或多个特定单元格的颜色.我在这里看到的答案都是指这种特殊的方法;
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
Component y = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
y.setBackground(new Color(255,0,0));
return y;
}
Run Code Online (Sandbox Code Playgroud)
但问题是我不知道它是如何工作的,在我的其他类我有一个字符串的Jtable我想根据它们的字符串值改变某些单元格的颜色,但是我发现的解决方案只允许我更改jtable中整列单元格的颜色,而不是特定的单元格.
我在自定义JTable的行标题中添加行有一些问题.
我用这段代码创建了这个JTable:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Panel;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ScrollPaneConstants;
import javax.swing.border.BevelBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumnModel;
public class Form {
public static void main(String[] args) {
JFrame frame = new JFrame();
List<String> visibleColumns = new ArrayList<String>();
// THIS COLUMN NEED TO BE IN 2 LINES
visibleColumns.add("Cod Type\nGroup");
visibleColumns.add("Name");
DefaultTableModel tableModel = new DefaultTableModel(visibleColumns.toArray(),5);
JTable table = new JTable(tableModel); …Run Code Online (Sandbox Code Playgroud) 我正在尝试以这样的方式显示患者数据列表,即名称位于我的JList的左侧,并且标识号全部整齐地排列在右侧.我已经查看过甚至为此任务实现了JTable的使用,因为它提供了我希望在这个项目中实现的整洁的列结构,但是有一些功能我要么不知道如何实现,要么我觉得缺乏JTable.
无法根据字母数字键转换我的列表.这是最终用户快速搜索列表的主要方式,因为填充时它可以超过800行.(例如:输入's'转换到以's开头的列表部分)
在视觉上我不喜欢JTables的行选择; 使用两列结构显然两列之间存在中断,与JList不同,这是一个很好的平滑无缝突出显示选择.所有网格线都已关闭,以及使用单元格编辑作为FYI.
我已经包含了我认为的相关代码.我希望能有一些方向,如果我要求的是用JList完成的,还是有办法更好地操作JTable?我没有在JTable API和JList API中找到任何内容,我觉得我在这个问题上回答了我的问题.
package mosaiqToCTWorklist;
import java.awt.Font;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.swing.ButtonGroup;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.border.EmptyBorder;
public class PatientSelectionWindow extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
private JPanel contentPane;
private JRadioButton rdbtnActivePatients;
private JRadioButton rdbtnInactivePatients;
private JRadioButton rdbtnAllPatients;
private JButton btnSendSelection;
private JList<String> patients;
private JScrollPane …Run Code Online (Sandbox Code Playgroud) 我有一个JTable,每次我选择一个单元格,我想打印它的行和列索引.因此我使用getSelectedRow()和getSelectedColumn()方法.运行以下代码:
public class TestTimeTable extends JFrame{
private final int rows = 10;
private final int cols = 8;
private final String daysOfTheWeek[] = {"MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY"};
private final JPanel jTablePanel;
private final JScrollPane scrollPane;
private final JTable timeTable;
private final Object[][] rowData;
public TestTimeTable(){
this.rowData = new Object[this.rows][this.cols];
this.timeTable = new JTable(this.rowData,this.daysOfTheWeek){
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
};
this.timeTable.setRowHeight(200, 200);
this.timeTable.setFillsViewportHeight(true);
this.timeTable.setOpaque(true);
this.timeTable.setColumnSelectionAllowed(true);
this.timeTable.setRowSelectionAllowed(true);
this.timeTable.setCellSelectionEnabled(true); …Run Code Online (Sandbox Code Playgroud) 我不确定如何处理这个问题,我想做的是当值大于0时这些P&L单元前景为绿色,如果小于0则为红色.我知道我需要以某种方式使用tablecellrenderer我只是不知道如何开始.

这是表格设置:
tbl_positions = new WebTable(posdata, posHeaders)
{
public Component prepareRenderer(TableCellRenderer renderer,
int rowIndex, int vColIndex) {
Component c = super.prepareRenderer(renderer, rowIndex,
vColIndex);
if (rowIndex % 2 == 0 && !isCellSelected(rowIndex, vColIndex))
{
c.setBackground((new Color(216, 216, 216)));
}
else
{
if(!isCellSelected(rowIndex, vColIndex))
{
if(rowIndex != 21)
c.setBackground(getBackground());
else
c.setBackground((new Color(216, 249, 255)));
}
else
{
c.setBackground((new Color(0, 128, 255)));
}
}
if(vColIndex == 5 || vColIndex == 6 )
{
Integer intValue = (Integer) getValueAt(rowIndex, vColIndex);
c.setForeground(getColor(intValue));
}
else
{ …Run Code Online (Sandbox Code Playgroud)