在我打开新JFrame
(balanceFrame
或valueFrame
)的代码底部,当用户点击右键时,会打开一个新框架,其中一个框架那个菜单选项。
但是,关闭弹出的新balanceFrame
或valueFrame
,然后打开另一个balance
/ valueFrame
,两个打开。关闭那两个并打开另一个,三个打开。关于如何制止这个的任何想法?看起来我的程序记住变量'value'的过去值并打开多个窗口。
table.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
System.out.println("Pressed");
}
public void mouseReleased(MouseEvent e) {
if (e.isPopupTrigger()) {
JTable source = (JTable)e.getSource();
int row = source.rowAtPoint( e.getPoint() );
int column = source.columnAtPoint( e.getPoint() );
String value = table.getModel().getValueAt(row, column).toString();
if (! source.isRowSelected(row))
source.changeSelection(row, column, false, false);
popup.show(e.getComponent(), e.getX(), e.getY());
menuItemBalanceSheet.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
balanceFrame = new BalanceFrame("BalanceSheet", value);
} catch (Exception e1) {
e1.printStackTrace();
}
balanceFrame.setSize(1200, 600);
balanceFrame.setVisible(true);
balanceFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
});
menuItemCompanyValue.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
valueFrame = new ValueFrame("Company Value", value);
} catch (Exception e1) {
e1.printStackTrace();
}
valueFrame.setSize(1200, 600);
valueFrame.setVisible(true);
valueFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
value.
}
});
}
}
});
}
}
答案 0 :(得分:2)
当您只想要一个动作侦听器时,您可以继续添加动作侦听器。 将此代码移动到初始化代码:
menuItemBalanceSheet.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
balanceFrame = new BalanceFrame("BalanceSheet", value);
} catch (Exception e1) {
e1.printStackTrace();
}
balanceFrame.setSize(1200, 600);
balanceFrame.setVisible(true);
balanceFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
});
menuItemCompanyValue.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
valueFrame = new ValueFrame("Company Value", value);
} catch (Exception e1) {
e1.printStackTrace();
}
valueFrame.setSize(1200, 600);
valueFrame.setVisible(true);
valueFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
value.
}
});
答案 1 :(得分:0)
对于这一行,创建了一个JFrame:
valueFrame = new ValueFrame("Company Value", value);
你再次打电话给setVisible(true)
。这就是创建第二个的原因:
valueFrame.setVisible(true);
考虑省略其中一个。
<强>提示:强>
尝试在主setSize()
和setDefaultCloseOperation()
课程中执行ValueFrame
和BalanceFrame
。在您已声明JFrame balanceFrame;
和JFrame valueFrame;
的上方,尝试执行ValueFrame valueFrame;
和BalanceFrame balanceFrame;
现在在代码的下方,ActionListener
试试这个:
menuItemCompanyValue.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
new ValueFrame("Company Value", value).setVisible(true);
} catch (Exception e1) {
e1.printStackTrace();
}
}
});