我编写了自己的表格单元格编辑器,用于扩展AbstractCellEditor和实现a TableCellEditor,an ItemListener和a MouseListener.有没有办法让mouseClicked方法在itemStateChanged方法之前先执行?我正在尝试执行以下操作:
private int rowClicked;
private JTable table;
public void itemStateChanged(ItemEvent e) {
if (rowClicked == 5) {
// Do something to row 5.
}
}
public void mouseClicked(MouseEvent e) {
Point p = e.getPoint();
rowClicked = table.rowAtPoint(p);
}
Run Code Online (Sandbox Code Playgroud) 我正在研究我的CapStone项目本学期毕业,并且遇到了我正在研究的程序的一些问题.该代码适用于Serendipity书商计划.我要为一个虚构的书店设计一个销售点系统.
目前,当用户编辑给定行的"数量"单元格时,我不得不尝试更新"总计"列(第5列)."数量"字段还需要验证其单元格中的值是否大于库存数量(第1列).
我还阅读了如何使用 Java教程中的表格,并在昨晚搜索了Google几个小时,试图找到一些有关如何使CellEditorListener工作的有用代码.
我之前也尝试过使用CashierPanel类实现CellEditorListener,并通过以下方式注册:
CellEditorListener listener = null;
table.getDefaultEditor(String.class).addCellEditorListener(listener);
Run Code Online (Sandbox Code Playgroud)
这种方法也不起作用.
这是我现在的代码(217行):
/* Imported Dependencies */
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import javax.swing.DefaultCellEditor;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableColumn;
import net.miginfocom.swing.MigLayout;
public class CashierPanel extends JFrame {
/**
* Serial Version UID
*/
private static final long serialVersionUID …Run Code Online (Sandbox Code Playgroud) 我有一个带有纯文本的列.
如果用户双击该列中的行,则该列允许自己编辑该行(应该如此).
我需要一些东西来检测该文本何时被编辑完成(例如,当用户点击回车键时).当发生这种情况时,我需要一些东西来获取该变化的行ID(当然是0).
有任何想法吗?
谢谢!
我的问题需要一些帮助.我有一个表,例如双列和字符串列.如果双列中的值为negativ,则字符串应为"negativ".另一种方式,如果值为positiv,则字符串应为"positiv".现在的问题是如果我在jTable中编辑double值,那么字符串也应该更新.
更新我的问题,实际代码如下所示: 但它不起作用,因为在编辑第一列值后,第二列中的字符串不会更新.它只在我第一次启动程序时才有效.
import java.util.Vector;
import javax.swing.*;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.*;
public class ExampleRemoveAddRows extends JFrame {
private Object[] columnNames = {"Double", "positiv / negativ"};
private Object[][] data = {
{new Double(10.0), "positiv"},
{new Double(-10.0), "negativ"},
{new Double(20.0), "positiv"},
{new Double(-30.0), "negativ"}
};
private JTable table;
private DefaultTableModel model;
public ExampleRemoveAddRows() {
model = new DefaultTableModel(data, columnNames) {
@Override
public Class getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
@Override
public Object getValueAt(int row, int column) {
if (column …Run Code Online (Sandbox Code Playgroud) 我已经为JTable使用渲染器和编辑器添加了单选按钮.我也创建了同样的组.我无法使用此原则实现排他性(只应选择1个单选按钮).请参阅下面的代码并感谢您的回复.
渲染器和编辑器类:
class RadioButtonRenderer implements TableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (value == null)
return null;
return (Component) value;
}
}
class RadioButtonEditor extends DefaultCellEditor implements ItemListener {
private JRadioButton button;
public RadioButtonEditor(JCheckBox checkBox) {
super(checkBox);
}
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int column) {
if (value == null)
return null;
button = (JRadioButton) value;
button.addItemListener(this);
return (Component) value;
}
public …Run Code Online (Sandbox Code Playgroud) 我是GUI设计的新手,我试图在我走错路之前做好计划,任何帮助都会很好.我正在尝试显示JTable一行Employee,其本身的数据类型为String和ArrayList<Cert>.Cert包含一个String.
我想让表格显示用于编辑的数据,但是对于一些列我想要实现从一组有效字符串中JComboBox选择a String,以及不同地为每个选项着色(不同的背景颜色)在JComboBox)).
此外,ArrayList<Cert>当前在单元格中显示为[xxx,xxx,...],其中XXX是toString()函数中每个项目的返回值ArrayList.我想我想把它显示ArrayList<Cert>为只读JComboBox,但我并不关心这个项目.
我在质疑我需要创建多少个类才能实现这一目标.我已经有了JTable扩展的自定义模型AbstractTableModel.我是否需要编写扩展名JComboBox或者我是否需要JComboBox为一个单元格扩展适当的渲染器并在那里进行魔术,然后将该自定义渲染器分配给单元格的单元格渲染器String?
到目前为止,这是我所拥有的,轻描淡写的:
public class EmployeeTableModel extends AbstractTableModel {
...
private ArrayList<Employee> myDataObjects = new ArrayList<Employee>();
...
@Override
public Object getValueAt(int row, int column) {
Employee emp = myDataObjects.get(row);
switch (column) {
case 0:
return emp.getName();
case 1:
return emp.getShift(); …Run Code Online (Sandbox Code Playgroud) 我有一个JComboBox用作编辑器的人JTable.在图片中,您可以在标有列的列中看到它们Produs.我想JComboBox在网格单元格中使用独立设计,特别是组合框的右侧部分,网格单元格中缺少三角形,因此用户将知道网格单元格是组合框而不必点击其中一个.如何将JComboBox(IsBackFlush)的设计应用于JComboBoxes网格中?
从本质上讲,我如何comboBox2根据设计进行设计comboBox1?谢谢.

我想计算索引[0] [2]中的总值,前一个值是0,但我已经用计算结果"1/y"替换并显示它,当我计算总值时,求和的值是先前的值包含"0"的,这是我的代码,
//observation table
//0 1 2 3 4 5 6
titleColumn = new Object[]{"Time (Second)","Medicine", "1/y","x2", "X/Y", "Y^", "Error"};
//0 1 2 3 4 5 6
allData = new Double[][] {{1.0,1.02,0.0,0.0,0.0,0.0,0.0},
{2.0,0.667,0.0,0.0,0.0,0.0,0.0},
{3.0,0.367,0.0,0.0,0.0,0.0,0.0},
{4.0,0.278,0.0,0.0,0.0,0.0,0.0},
{5.0,0.237,0.0,0.0,0.0,0.0,0.0},
{6.0,0.187,0.0,0.0,0.0,0.0,0.0},
{7.0,0.155,0.0,0.0,0.0,0.0,0.0},
{8.0,0.156,0.0,0.0,0.0,0.0,0.0},
{9.0,0.142,0.0,0.0,0.0,0.0,0.0},
{10.0,0.111,0.0,0.0,0.0,0.0,0.0},
{11.0,0.12,0.0,0.0,0.0,0.0,0.0},
{12.0,0.097,0.0,0.0,0.0,0.0,0.0},
{13.0,0.099,0.0,0.0,0.0,0.0,0.0},
{14.0,0.089,0.0,0.0,0.0,0.0,0.0},
{15.0,0.079,0.0,0.0,0.0,0.0,0.0},
{0.0,0.0,0.0,0.0,0.0,0.0,0.0}};
tableModelObservation = new DefaultTableModel(allData, titleColumn);
tableObservation.setModel(tableModelObservation);
int row,column,inputRow,inputColumn;
//index [0][2] was replaced with calculation 1/y
row = 0;
column = 1;
inputRow = 0;
inputColumn = 2;
double onePerY = 0;
for(int a=0;a<allData.length;a++){ …Run Code Online (Sandbox Code Playgroud) 我的任务是实现一个JTable,其中一个列的外观如下:

它应该包含4个元素:
1.一个JCombobox,它控制另外两个的启用状态:它们被启用为"手动"状态,并锁定其他状态的某些数值(让我们调用其他组合状态:'first ','秒','第三').
2.一个JTextField,启用后,控制滑块的值.
3.一个JLabel,它读取"%"并且什么都不做.
4. s JSlider,当启用时,控制JTextField值(这种相互控制是否可以存在?).
我遍布整个网络搜索实现此方法的方法.大多数例子都太肤浅,包括这个类似的问题.
在我问这个之前,我得到了Cell Rendering/fireEditingStopped等版本的折磨,但遗憾的是没有简单的短代码.
任何人都可以告诉我具体的指导方针或代码片段,它可以让我走上正确的道路吗?提前致谢.
从附图中我有一个jTable 
右键单击一行会启动一个jPopup,其中包含一个"Thread Stop"项.
我想通过单击此菜单项返回行号
怎么做到这一点?
谢谢.
我有两个关于jtable和默认表模型的问题
JTable table = new JTable();
TableModel model = new DefaultTableModel(colNames,rowcount);
table.setModel(model);
Run Code Online (Sandbox Code Playgroud)
java ×11
swing ×11
jtable ×10
action ×1
buttongroup ×1
cellrenderer ×1
jcombobox ×1
jpopupmenu ×1
jradiobutton ×1
listener ×1
listeners ×1
renderer ×1
tablemodel ×1