Java Swing - 设置背景和按钮

标签 java swing user-interface jpanel

我正在尝试让 GUI 带有背景和一些按钮,这些按钮应位于背景图片的前面。

我当前的问题是将这两件事结合起来,导致 Java 不断生成错误代码

“frame.setContentPane(new JPanel() {”

代码中的

部分。

公共(public)类 AbsolutLayoutDemo {

/**
 * @param args
 */
  public static void addComponentsToPane(Container pane) {
        pane.setLayout(null);

        JButton b1 = new JButton("one");
        JButton b2 = new JButton("two");
        JButton b3 = new JButton("three");

        pane.add(b1);
        pane.add(b2);
        pane.add(b3);

        Insets insets = pane.getInsets();
        Dimension size = b1.getPreferredSize();
        b1.setBounds(25 + insets.left, 5 + insets.top,
                     size.width, size.height);
        size = b2.getPreferredSize();
        b2.setBounds(55 + insets.left, 40 + insets.top,
                     size.width, size.height);
        size = b3.getPreferredSize();
        b3.setBounds(150 + insets.left, 15 + insets.top,
                     size.width + 50, size.height + 20);




    }

    /**
     * Create the GUI and show it.  For thread safety,
     * this method should be invoked from the
     * event-dispatching thread.
     * @throws IOException 
     */
    public static void createAndShowGUI() throws IOException {



        //Create and set up the window.
        JFrame frame = new JFrame("AbsoluteLayoutDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Set up the content pane.
        addComponentsToPane(frame.getContentPane());

        //Size and display the window.
        Insets insets = frame.getInsets();
        frame.setSize(600 + insets.left + insets.right,
                      600 + insets.top + insets.bottom);
        frame.setVisible(true);
        frame.setResizable(false);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


        frame.setContentPane(new JPanel() {


            BufferedImage image = ImageIO.read(new File("bilder/background.jpg"));

            @Override 
        public void paintComponent(Graphics g) {


            super.paintComponent(g);
            g.drawImage(image, 0, 0, 600, 600, this);
        }

        });


    }

    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.

        javax.swing.SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                try {
                    createAndShowGUI();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
    }
}

我编辑了修改后的代码,现在我可以编译该项目,但不再显示任何图像和按钮。

最佳答案

您的代码无法编译,因为您错误地创建了匿名类。您可以使用如下所示的初始化 block 来解决它。

frame.setContentPane(new JPanel() {
         BufferedImage image; // you declare as instance variable
         { // initialization block
          try {
              image = ImageIO.read(new File("bilder/background.jpg"));
          } catch (IOException e) {
              e.printStackTrace();
          }
         }

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

});

同样重要。不要使用 null 布局,您可以阅读更多 here

关于Java Swing - 设置背景和按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18787265/

相关文章:

java - 是否可以使用 Office 365 电子邮件的 Java Exchange 服务 API 将组成员添加到组中?

android - 如何创建像 Google Play Store v4.9/5.0 一样的 Android 屏幕( Activity )(视差图像+操作栏中的淡入淡出)

java - 如何在java GUI应用程序中显示PDF文件?

java - 停止线程并使其在单击按钮时运行;

java - android WebView shouldOverrideUrlLoading()

Java Servlet URL 映射

java - 如何修复 GridBagLayout 中的间隙

java - 将 JPanels 和绘画添加到 JInternalFrames

java - 检查现有文本时自定义控制台 nullPointerException

javascript - 关闭时重定向 jquery ui 对话框