我对java很新,所以请不要太苛刻:)单击单选按钮可提供旧值?
我有一个JTable,每列有3个JRadioButton。
JRadioButtons显示正确,并且选择了正确的JRadioButtons。
摆在JTable中JradioButton将我用setCellRenderer()和setCellEditor():
private void addRadio(int intCol)
{
mgrdData.getColumnModel().getColumn(intCol).setCellRenderer(new RadioButtonRenderer());
RadioButtonEditor butEdit = new RadioButtonEditor(new JCheckBox());
butEdit.UseTcp(mtcpGrid);
mgrdData.getColumnModel().getColumn(intCol).setCellEditor(butEdit);
}
下面是RadioButtonEditor类的代码:
public class RadioButtonEditor extends DefaultCellEditor implements ItemListener
{
public JPanel pnl = new JPanel();
public ButtonGroup group1 = new ButtonGroup();
public JRadioButton btnVA = new JRadioButton("VA");
public JRadioButton btnUIT = new JRadioButton("UIT");
public JRadioButton btnAAN = new JRadioButton("AAN");
public tcp mtcpCon;
public RadioButtonEditor(JCheckBox checkBox)
{
super(checkBox);
}
public void UseTcp(tcp tcpCon)
{
mtcpCon = tcpCon;
}
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)
{
if (value==null) return null;
group1.add(btnVA);
group1.add(btnUIT);
group1.add(btnAAN);
pnl.add(btnVA);
pnl.add(btnUIT);
pnl.add(btnAAN);
btnVA.setSelected(false);
btnUIT .setSelected(false);
btnAAN .setSelected(false);
String strVal1 = (String)value;
switch(Integer.parseInt(strVal1))
{
Case 0:
btnVA.setSelected(true);
break;
Case 1:
btnUIT.setSelected(true);
break;
Case 2:
btnAAN.setSelected(true);
break;
}
System.out.println("gettablecelleditorcomponent strVal1 : " + strVal1);
return pnl;
}
public Object getCellEditorValue()
{
String strVal2="";
if(btnVA.isSelected() == true) strVal2="0";
if(btnUIT.isSelected() == true) strVal2="1";
if(btnAAN.isSelected() == true) strVal2="2";
System.out.println("getcelleditorvalue strVal2 : " + strVal2);
return strVal2;
}
public void itemStateChanged(ItemEvent e)
{
super.fireEditingStopped();
}
}
下面的代码RadioButtonRenderer类:
public class RadioButtonRenderer implements TableCellRenderer
{
public JPanel pnl = new JPanel();
public ButtonGroup group1 = new ButtonGroup();
public JRadioButton btnVA = new JRadioButton("VA");
public JRadioButton btnUIT = new JRadioButton("UIT");
public JRadioButton btnAAN = new JRadioButton("AAN");
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
if (value==null) value="0";
btnVA.putClientProperty("JComponent.sizeVariant","small");
btnAAN.putClientProperty("JComponent.sizeVariant","small");
btnUIT.putClientProperty("JComponent.sizeVariant","small");
group1.add(btnVA);
group1.add(btnUIT);
group1.add(btnAAN);
pnl.add(btnVA);
pnl.add(btnUIT);
pnl.add(btnAAN);
btnVA.setSelected(false);
btnUIT .setSelected(false);
btnAAN .setSelected(false);
switch(Integer.parseInt((String)value))
{
Case 0:
btnVA.setSelected(true);
break;
Case 1:
btnUIT.setSelected(true);
break;
Case 2:
btnAAN.setSelected(true);
break;
}
return pnl;
}
}
我想检测哪个JRadioButton是clic ked,并处理新的价值。 我认为被触发的事件应该在RadioButtonEditor类中,但我不知道事件。
我将println()添加到getTableCellEditor()以及getCellEditorValue()事件中,但都打印一个旧值。
例如:
开始与ROW0 = 0,ROW1 = 1,ROW2 = 2
点击2上ROW1给出:
gettablecelleditorcomponent : 1
现在ROW0 = 0,ROW1 = 2 ,2行= 2 点击月1日0行给出:
getcelleditorvalue : 2
gettablecelleditorcomponent : 0
现在0行= 1,ROW1 = 2,2行= 2 然后点击0上ROW1给出:
getcelleditorvalue : 1
gettablecelleditorcomponent : 2
现在ROW0 = 1,ROW1 = 0,ROW2 = 2 1然后点击ROW2给出:
getcelleditorvalue : 0
gettablecelleditorcomponent : 2
现在ROW0 = 1,ROW1 = 0,ROW2 = 1
从这可以看出:
getTableCellEditor() has the previous value of that row
getCellEditorValue() has the global previous value
,可以使用哪些事件以获取新值JRadioButton被点击后,它的?
[编辑]
我添加了一个TableModelListener到表中,但是getFirstRow()仍然显示选择的最后一行,而不是在其中用户点击了单选按钮的行。
因此,例如,当他们最后点击第5行一个单选按钮,现在点击一个radiobuttion 7排,然后getFirstRow()在tabelChanged()仍显示5
下面的代码我TableModelListener:
mgrdData.getModel().addTableModelListener(new TableModelListener()
{
public void tableChanged(TableModelEvent e)
{
System.out.println("column : " + e.getColumn());
System.out.println("firstrow : " + e.getFirstRow());
}
});
此[示例](http://stackoverflow.com/questions/14019660/how-to-add-jradiobutton- to-two-columuns-of-a-jtable-and-buttongroup-them/14022246#14022246)可能会帮助你.. :) – Amarnath
谢谢!现在检查所有答案,并试图找出最适合我的项目 – Hrqls