我正在研究Java 8流,我唯一的问题是了解lambda,这是为什么对于instance(和static)变量,lambdas中有效的最终警告会被忽略的原因。我似乎无法在网上找到任何提及它,因为大多数网页将刚才讲的是“有效决赛”的定义。
public class LambdaTest {
int instanceCounter = 0;
public void method() {
int localCounter = 0;
instanceCounter = 5; //Re-assign instance counter so it is no longer effectively final
Stream.of(1,2,3).forEach(elem -> instanceCounter++); //WHY DOES THE COMPILER NOT COMPLAIN HERE
Stream.of(1,2,3).forEach(elem -> localCounter++); //Does not compile because localCounter is not effectively final
}
}
Run Code Online (Sandbox Code Playgroud) 将 MaskFormatter 应用到 JFormattedTextField 上,然后将该文本字段设置为 JTable 中的一列后,无论我单击什么位置,插入符号都开始出现。但是,我希望插入符号出现在单元格的最左侧位置,无论用户单击单元格中的哪个位置。我尝试了 setCaretPositionMethod,但它什么也没做。我的猜测是,有某种表侦听器,它强制插入符移动到用户单击的位置,如果我知道这个侦听器是什么,我可以覆盖该功能。
SSCCE:
public class TableExample extends JFrame {
public TableExample() {
add(makeTable());
}
private JTable makeTable() {
Object[][] tableData = {{"","a","b",""}, {"","c","d",""}};
String[] columns = {"column1", "column2", "column3", "dobColumn"};
JTable table = new JTable(tableData, columns);
////DOB column formats to dd/mm/yy
TableColumn dobColumn = table.getColumnModel().getColumn(3);
DateFormat df = new SimpleDateFormat("dd/mm/yy");
JFormattedTextField tf = new JFormattedTextField(df);
tf.setColumns(8);
try {
MaskFormatter dobMask = new MaskFormatter("##/##/##");
dobMask.setPlaceholderCharacter('0');
dobMask.install(tf);
} catch (ParseException ex) {
Logger.getLogger(TableExample.class.getName()).log(Level.SEVERE, null, ex);
} …Run Code Online (Sandbox Code Playgroud)