gpt4 book ai didi

java - Swing 中的背景问题,没有 Netbeans

转载 作者:行者123 更新时间:2023-12-02 07:07:35 26 4
gpt4 key购买 nike

我是一个完全的初学者,虽然我立即获得了大部分应用程序。我无法为我的 swing 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 解决问题。不过,我还是很好奇!如果您仍然可以帮助我,我将不胜感激。

最佳答案

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

在方法上方添加@Override注解将表明该方法不包含在父类(super class)中。实现背景图像的最简单方法是创建 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);
}
}

关于java - Swing 中的背景问题,没有 Netbeans,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15914653/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com