【问题标题】:How can I use the Java graphics with Event Handling?如何将 Java 图形与事件处理一起使用?
【发布时间】:2017-12-02 23:54:32
【问题描述】:

我想要做的是当我单击需要绘制矩形的按钮时。

但我有些困惑。 这是代码:

package painting;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;

public class Painting  { 

    JFrame jf ;
    public static void main(String[] args) {    
        Painting p = new Painting();
        p.runn();
    }
       public void runn(){

        jf = new JFrame("Try");
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setLocationRelativeTo(null);
        jf.setSize(400,400);       
        jf.setVisible(true);

        JButton jb = new JButton("Click");
        jb.setBounds(200,200,100,60);
        jf.add(jb);
        //jf.add(jb,BorderLayout.SOUTH);
        //jf.setLayout(null);       
        Handler handle = new Handler();
        jb.addActionListener(handle);
       }
        private class Handler implements ActionListener{
            @Override
            public void actionPerformed(ActionEvent ae)
            {
            Mainting maint = new Mainting();    
            jf.add(maint);
        }           


}
}

和其他类:

package painting;
import java.awt.*;
import javax.swing.*;


public class Mainting extends JPanel {

    @Override  
    public void paintComponent(Graphics g)
             {
      super.paintComponent(g);
      g.fillRect(0,0,30,30);

            }    
}

现在,问题是当我运行此代码时,会出现一个覆盖整个屏幕的按钮,当我单击它时,什么也没有发生。 我发现那是因为没有定义布局管理器,当我尝试将布局管理器设置为 null 时,按钮看起来很好但是当我点击矩形时没有出现(也是因为我们不能使用空布局管理器来绘制图形)。

最后,当我尝试设置布局管理器时,比如说 - 边框布局 - 按钮按原样显示,但编译器如何说它需要绘制 int 参数而不是方向!

请帮忙!

【问题讨论】:

  • 1) 使用逻辑一致的缩进代码行和块的形式。缩进是为了让代码流更容易理解!有人在上一个问题中为您做了这件事,但不要指望其他人会不断地为您做,您应该为任何阅读代码的人做些什么。 2) 为了尽快获得更好的帮助,请发布 minimal reproducible exampleShort, Self Contained, Correct Example,就像我在回复您的 last question 时发布的一样。

标签: java swing user-interface layout-manager


【解决方案1】:

使用 JPanel,然后向其添加按钮。 setBounds() 不适用于 Swing.Something Like this-

JButton button = new JButton(...);
JPanel wrapper = new JPanel();
wrapper.add(button);
 frame.add(wrapper, BorderLayout.PAGE_START); 

【讨论】:

    猜你喜欢
    • 2015-06-25
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    相关资源
    最近更新 更多