2016-09-13 7 views
0

背景画像を追加するために、私はJPanelの代わりにJLabelsを使用します。JLabelでJScrollPaneを固定する

JFrame frame=new JFrame(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    JLabel label=new JLabel(new ImageIcon("bg.png")); 
    label.setLayout(new BoxLayout(label, BoxLayout.Y_AXIS)); 
    for(int i=0;i<20;i++) 
     label.add(new JLabel(i.toString())); 
    frame.add(label); 

ここでの問題は、背景画像に合わせてコンポーネントのみが

私はJScrollPaneの

JScrollPane scroll=new JScrollPane(l); 
    for(int i=0;i<20;i++) 
     label.add(new JLabel(i.toString())); 
    frame.add(scroll); 

が、それを使用してみました(私の例では唯一の10の最初のJLabel)表示されるということです多くの変更、私はので、私はJScrollPaを得たのJPanel

JPanel panel=new JPanel(); 
    panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); 
    JScrollPane scroll=new JScrollPane(panel); 
    for(int i=0;i<20;i++) 
     panel.add(new JLabel(i.toString())); 
    label.add(scroll); 
    frame.add(label); 

を使用してみましませんでした正しく動作していますが、JPanelが背景画像をカバーしています

どうすればいいですか?スクロールにそれらを追加した後

enter image description here

結果:

enter image description here

そしてJPanelsetOpaque(false)を追加した後:ここで

は、ラベルにのJLabelを追加する結果だ

enter image description here

+1

は、 'JPanel'の不透明度をfalseに設定します。しかし、より良い助けを早く得るには、あなたが持っているものと達成したいものの[mcve]とASCIIアート/画像を投稿してください。まだ十分な評判がないので、あなたの画像へのリンクを追加することができます。投稿を編集してここに表示させることもできます。 – Frakcool

+1

また、控えめな推薦として、変数をよりわかりやすく、 'l'は' l '?私はそれが何であったのかを知るためにコードに上がって、パネルの 'label'や' pane'/'panel'と呼び、' scroll'/'scrollPane'/etcに変更しました。コードを読みやすく理解してくれます。 – Frakcool

+0

いいえ、うまくいきませんでした。 –

答えて

3

あなたはその後、その後、JScrollPaneの内側にそのペインを入れて、最終的には例えば、JFrameに追加し、その上にラベルを追加し、JPanelpaintComponent()方法の一部として画像を追加することができます。

import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.Image; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 

import javax.imageio.ImageIO; 
import javax.swing.BoxLayout; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JScrollBar; 
import javax.swing.JScrollPane; 
import javax.swing.SwingUtilities; 

public class PanelWithBackgroundImage { 

    private JFrame frame; 
    private JPanel pane; 
    private Image img; 
    private JScrollPane scroll; 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new PanelWithBackgroundImage().createAndShowGui(); 
      } 
     }); 
    } 

    public void createAndShowGui() { 
     frame = new JFrame("JFrame with bg example"); 
     try { 
      img = ImageIO.read(new FileInputStream("/home/jesus/Pictures/tokyo.jpg")); 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     pane = new JPanel() { 
      @Override 
      protected void paintComponent(Graphics g) { 
       super.paintComponent(g); 
       g.drawImage(img, 0, 0, getWidth(), getHeight(), this); 
      } 
     }; 

     pane.setLayout(new BoxLayout(pane, BoxLayout.PAGE_AXIS)); 

     for (int i = 0; i < 20; i++) { 
      pane.add(new JLabel("label " + i)); 
     } 

     scroll = new JScrollPane(pane); 

     frame.add(scroll); 
     frame.setSize(frame.getPreferredSize()); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
} 
あなたは JLabelsが中心の場合

enter image description hereenter image description here

は、あなたがを変更することができます。次の出力が得られます

このようになります

for (int i = 0; i < 20; i++) { 
    JLabel label = new JLabel("label " + i); 
    label.setAlignmentX(Component.CENTER_ALIGNMENT); 
    pane.add(label); 
} 

:とループ

enter image description here


注:コピー&ペーストすることができます

上記のコードを、それが動作するはずです、単に画像パスを変更し、そのコードは、Minimal, Complete and Verifiable Example (MCVE)と呼ばれ、次回は、試したことを示すものを投稿してください。あなたはより多くのより良い、より速い答えを得るでしょう。私たちのお手伝いをしてください! :)

関連する問題