0

我是一个完全的初学者,虽然我马上就有了大部分的应用程序。我无法为我的摇摆 gui 制作背景图片。我已经读到你应该用我所做的覆盖油漆方法来做到这一点。但在某个地方我犯了一个错误。因为没有任何机会,除了按钮是不可见的,直到我用鼠标越过它。我尝试了几件事,也许你们中的一个人可以看到问题并帮助我?非常感谢 :)

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

/**
 *
 * @author Shore
 */
public class GUI extends JFrame implements ActionListener  {
    Container c;
    JButton überprüfungsButton = new JButton();
    JTextField eingabeTextField = new JTextField();
    JTextArea ausgabeTextFeld = new JTextArea();
    Image hintergrundBild;



    public GUI(){
        this.hintergrundBild = Toolkit.getDefaultToolkit().getImage( "Bild2.jpg" );
        c = getContentPane();   
        c.setLayout(new BorderLayout());
        c.setBackground(Color.LIGHT_GRAY);
        überprüfungsButton = new JButton("Test");
        überprüfungsButton.addActionListener(this);
        c.add(überprüfungsButton, BorderLayout.CENTER);
        eingabeTextField = new JTextField(40);
        c.add(eingabeTextField, BorderLayout.PAGE_START);
        eingabeTextField.setOpaque(false);
        ausgabeTextFeld = new JTextArea(30,30);
        c.add(ausgabeTextFeld, BorderLayout.PAGE_END);
        ausgabeTextFeld.setOpaque(false);



    }
    public static void main(String[] args) {
          GUI fenster = new GUI();
          fenster.setTitle("Für");
          fenster.setSize(800, 800);
          fenster.setVisible(true);
          fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

      protected void paintComponent(Graphics g) {

                if (hintergrundBild != null) {
                    g.drawImage(hintergrundBild, 0, 0, getWidth(), getHeight(), null);
                }
      }


    @Override
    public void actionPerformed(ActionEvent e) {
       if(e.getSource() == überprüfungsButton){

感谢花时间看的人。

更新:我实际上可以解决 Netbeans 和 swing-GUI Creator 的问题。不过,我还是很好奇!如果您仍然可以帮助我,我将不胜感激。

4

1 回答 1

2

JFrame不会覆盖paintComponent,因此 Swing 不会调用它。

在方法上方添加@Override注解会表明该方法不包含在超类中。实现背景图像的最简单方法是创建一个子类JPanel并在那里覆盖paintComponent

更新:

网络上有许多JFrame扩展类的示例。从设计的角度来看,这不是必需的,因为您通常不会对框架进行任何新功能。出于这个原因,只创建一个直接实例并使用会更好(如图所示):

public class BackGroundProblem {
    public static void main(String[] args) throws IOException {

        final Image image = ImageIO.read(new URL("http://news.beloblog.com/ProJo_Blogs/architecturehereandthere/hallstattsumm.jpg"));
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                JPanel backgroundPanel = new ImagePanel(image);
                backgroundPanel.add(new JButton("Sample Button 1"));
                backgroundPanel.add(new JButton("Sample Button 2"));
                frame.add(backgroundPanel);
                frame.setLocationByPlatform(true);
                frame.pack();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
            }
        });
    }
}

class ImagePanel extends JPanel {
    private static final long serialVersionUID = 1L;
    private Image image;

    ImagePanel(Image image) {
        this.image = image;
    };

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(800, 600);
    }
}
于 2013-04-10T01:35:39.473 回答