代码之家  ›  专栏  ›  技术社区  ›  user2245012

Swing中的背景问题,没有Netbeans

  •  0
  • user2245012  · 技术社区  · 12 年前

    我是一个完全的初学者,虽然我马上就掌握了大部分应用程序。我无法为我的摇摆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解决这个问题。 然而,我仍然很好奇! 如果你还能帮助我,我将不胜感激。

    1 回复  |  直到 12 年前
        1
  •  2
  •   Reimeus    12 年前

    JFrame 不覆盖 paintComponent 所以Swing不会调用它。

    添加 @Override 方法上方的注释将显示该方法不包含在超级类中。 实现背景图像的最简单方法是创建 JPanel 和超控 油漆组件 那里

    更新:

    网上有很多例子 窗口 扩展。从设计的角度来看,这是不必要的,因为通常框架没有任何新功能。出于这个原因,只需创建一个直接实例&使用更好(如图所示):

    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);
        }
    }