1

このようなばかげた質問で申し訳ありませんが、Java で背景画像を固定画像に設定するのに問題があります。これが私の言いたいことです -

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


public class MainFrame{

public static void createGUI(){
    JFrame frame = new JFrame("Warlords Organizer");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JLabel emptyLabel = new JLabel("");
    emptyLabel.setPreferredSize(new Dimension(1280,720));
    frame.getContentPane().add(emptyLabel, BorderLayout.CENTER);

    frame.pack();
    frame.setVisible(true);
    frame.setResizable(false);

    JLabel contentPane = new JLabel();
    contentPane.setIcon(/imageFolder/warlordsOrganizerBackground.png);
    contentPane.setLayout(new BorderLayout());
    frame.setContentPane(contentPane);


}

public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createGUI();
        }
    });
} // public static void main(String[] args) Closing
} // public class MainFrame Closing

そのため、フレームなどすべてを取得できますが、画像を読み込めないようです。imageFolder - http://i.imgur.com/LWqQ6JU.pngという名前のソース フォルダーに画像を配置します。

ここに画像の説明を入力

最後に、背景画像を下にスクロールしたときに画像が同じ場所にとどまるようにするにはどうすればよいですか?追加する予定のテキストやその他の画像は移動しますか?

4

2 に答える 2

3
contentPane.setIcon(/imageFolder/warlordsOrganizerBackground.png); // ????
  • メソッドに Icon オブジェクトを渡す必要がありますsetIcon(...)。そこに何を渡しているのかわかりませんが、引用符のない文字列のように見えます。
  • コンポーネントをコンテナ contentPane に追加し、すぐにこのコンテナを別のコンテナに交換します。これにより、レームダック コンポーネント (古い contentPane) に追加されたコンポーネントが表示されないようになります。
  • 解決策は明らかです。最終的に表示される contentPane にコンポーネントを追加します。
  • また、JLabel にもきちんとしたレイアウト マネージャーを与えるようにしてください。
  • 画像をスクロールするには、JScrollPane を JLabel/contentPane に追加しますが、JScrollPane とその JViewPort を非不透明にします。

例えば:

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.*;

public class MainFrame {

   private static final String IMAGE_PATH = "imgFolder/ham-hamster.jpg";

   public static void createGUI() {
      JFrame frame = new JFrame("Fubars");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      File imageFile = new File(IMAGE_PATH);
      try {
         JTextArea textArea = new JTextArea(5, 40);
         textArea.setWrapStyleWord(true);
         textArea.setLineWrap(true);
         for (int i = 0; i < 30; i++) {
            textArea.append("foo bars rule the world!\n");
         }
         textArea.setFont(textArea.getFont().deriveFont(Font.BOLD, 20));
         JScrollPane scrollPane = new JScrollPane(textArea);
         scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
         scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

         textArea.setOpaque(false);
         scrollPane.setOpaque(false);
         scrollPane.getViewport().setOpaque(false);

         BufferedImage backgroundImg = ImageIO.read(imageFile);
         Icon backgroundIcon = new ImageIcon(backgroundImg);
         JLabel contentLabel = new JLabel(backgroundIcon);
         contentLabel.setLayout(new BorderLayout());
         contentLabel.add(scrollPane, BorderLayout.CENTER);
         frame.setContentPane(contentLabel);
         frame.pack();
         frame.setVisible(true);
      } catch (IOException e) {
         e.printStackTrace();
      }

   }

   public static void main(String[] args) {
      javax.swing.SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createGUI();
         }
      });
   }
} 

次のように表示されます。

ここに画像の説明を入力

于 2013-04-30T01:12:48.893 に答える