问题在于:
AbstractButton类型中的方法addActionListener(ActionListener)不适用于参数(new ActionListener(){})
我该如何解决?
//imports..
public class Gui extends JFrame
{
public Gui() {
paintUI();
}
public final void paintUI()
{
createToolBars();
JFrame f=new JFrame();
//setting of 'f' ...
}
private void createToolBars() {
JToolBar toolbar1 = new JToolBar();
JToolBar toolbar2 = new JToolBar();
ImageIcon newi = new ImageIcon("new.png");
//another next icons..
JButton newb = new JButton(newi);
// another next jbuttons
toolbar1.add(newb);
这是exitb.addActionListener的问题,因为..: 此行有多个标记 - 无法将ActionListener解析为类型 - 类型中的方法addActionListener(ActionListener) AbstractButton不适用于参数(new ActionListener(){})
exitb.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.exit(0);
}
});
createLayout(toolbar1, toolbar2);
}
private void createLayout(JComponent... arg) {
Container pane = getContentPane();
//some creating....
gl.setHorizontalGroup(gl.createParallelGroup()
.addComponent(arg[0], GroupLayout.DEFAULT_SIZE,
GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(arg[1], GroupLayout.DEFAULT_SIZE,
GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
gl.setVerticalGroup(gl.createSequentialGroup()
.addComponent(arg[0])
.addComponent(arg[1])
);
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable() {
public void run() {
/ ** 这是参考“paintUI()”的问题,因为: 无法从类型Gui对非静态方法paintUI()进行静态引用 * /
paintUI();
}
});
}
} }
答案 0 :(得分:1)
paintUI();//here is a problem with reference
您尚未创建Gui类的实例,因此您无法调用该类的方法。
相反,你应该使用:
new Gui();
您不需要调用paintUI(),因为Gui类的构造函数会为您执行此操作。
正如另一个答案所示,实际上应该从SwingUtilities.invokeLater()
内调用上述语句,因为所有GUI组件都应该在Event Dispatch Thread(EDT)上创建。阅读Concurrency上的Swing教程中的部分。这是一个需要理解的重要概念。
答案 1 :(得分:0)
Ad.1。要从静态方法调用非静态方法,您需要引用对象。例如:
public static void main(String[] args)
{
Gui gui = new Gui();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
gui.paintUI();
}
});
}