2017-06-07 11 views
0

誰も助けてくれますか?私は、JScrollBarを調整し、JLabelの上から下にビューを変更することができるJFrameを作成しようとしています。JLabelJLabelにはJFileChooserが含まれています。JavaでImageIconを使用してJLabelでJScrollBarを修正するにはどうすればよいですか?

残念ながら、私のコードは思った通りに機能しません。なぜそれがそれを行うすべてのアイデア?または私が気づくべきである欠けているコードがありますか?私の唯一の目標は、私がするJScrollPaneを使用している必要があるとき、私はするJScrollBarを使用している両方JLabels

public class DocVieweR extends JFrame { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    private JPanel contentPane; 
    private int yPos = 0; 

    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        DocVieweR frame = new DocVieweR(); 
        frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    /** 
    * Create the frame. 
    */ 
    public DocVieweR() { 
     setTitle("DocVieweR"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setSize(816, 705); 
     setLocationRelativeTo(null);   
     setResizable(false); 
     contentPane = new JPanel(); 
     setContentPane(contentPane); 
     contentPane.setLayout(null); 

     JScrollBar scrollBar = new JScrollBar(); 
     scrollBar.addAdjustmentListener(new AdjustmentListener() { 
      @Override 
      public void adjustmentValueChanged(AdjustmentEvent e) { 
       yPos =+ e.getValue();    
      } 
     }); 
     scrollBar.setBounds(793, 0, 17, 676); 
     contentPane.add(scrollBar);  

     JLabel lblPHOTO1x1 = new JLabel("SELECT IMAGE"); 
     lblPHOTO1x1.setFont(new Font("Segoe UI", Font.BOLD, 16)); 
     lblPHOTO1x1.setHorizontalAlignment(SwingConstants.CENTER); 
     lblPHOTO1x1.addMouseListener(new MouseAdapter() { 
      @Override 
      public void mouseClicked(MouseEvent e) { 
       JFileChooser chosenFILE = new JFileChooser(); 
       chosenFILE.showOpenDialog(null); 
       File getFILE = chosenFILE.getSelectedFile(); 
       ImageIcon pic = new ImageIcon(getFILE.getAbsolutePath()); 
       lblPHOTO1x1.setIcon(pic); 
      } 
     }); 
     lblPHOTO1x1.setBounds(585, 228, 129, 128); 
     contentPane.add(lblPHOTO1x1);  

     JLabel lblBIODATA = new JLabel(""); 
     ImageIcon img = new ImageIcon("resources/BIODATA_96dpi.jpg"); 
     lblBIODATA.setIcon(img); 
     lblBIODATA.setBounds(0, yPos, 793, 1122); 
     contentPane.add(lblBIODATA); 
    } 
} 
+1

1)今、あなたのコードをテストすることはできませんが、それへの最初のビューでは、私はあなたがこのラインを使用している見ることができる拡張しますcontentPane.setLayout(null); 'と' setBounds(...) 'メソッドは、それがあなたに多くの問題を引き起こすでしょう、なぜですか? [Null layout is evil](http://www.fredosaurus.com/notes-java/GUI/layouts/nulllayout.html)と[frowned upon](https://stackoverflow.com/questions/6592468/why- 2)*「それがなぜ起こるのか?」*なぜそれが何をするのですか? – Frakcool

+0

Frakcool氏はとても素早く対応してくれてありがとうございました。あなたのコメントは、問題を解決するために非常に明確にしました。 –

+2

あなたがそれを解決し、答えを投稿してください、私に電話しないでください、私は古くはありません::) – Frakcool

答えて

0

JScrollBar仕事をすることです。さらに、私は誤って、 "scrollPane.setViewportView(JLabelNAME);"のような追加のコード行を追加する必要があることを発見しました。 JFileChooserを使用してイメージをインポートした後にスクロールバーを移動すると、イメージは消えますが、問題はほとんどありません(デバッグに役立つことがあります)。 contentPane.setLayout(null); setBounds(...)は問題ではありませんが、それでも私にはアイデアが与えられました。本当にありがとうございました!!! :D

publicクラスのdocviewerは `のJFrame {

private static final long serialVersionUID = 1L; 
private JPanel contentPane; 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       DocVieweR frame = new DocVieweR(); 
       frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the frame. 
*/ 
public DocVieweR() { 
    setTitle("DocVieweR"); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setSize(818, 705); 
    setLocationRelativeTo(null);   
    setResizable(false); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    setContentPane(contentPane); 
    contentPane.setLayout(null);   

    JLabel lblPHOTO1x1 = new JLabel("SELECT IMAGE"); 
    lblPHOTO1x1.setFont(new Font("Segoe UI", Font.BOLD, 16)); 
    lblPHOTO1x1.setHorizontalAlignment(SwingConstants.CENTER); 
    lblPHOTO1x1.addMouseListener(new MouseAdapter() { 
     @Override 
     public void mouseClicked(MouseEvent e) { 
      JFileChooser chosenFILE = new JFileChooser(); 
      chosenFILE.showOpenDialog(null); 
      File getFILE = chosenFILE.getSelectedFile(); 
      ImageIcon pic = new ImageIcon(getFILE.getAbsolutePath()); 
      lblPHOTO1x1.setIcon(pic); 
     } 
    });  
    lblPHOTO1x1.setBounds(585, 228, 129, 128); 
    contentPane.add(lblPHOTO1x1); 
    //scrollPane.setViewportView(lblPHOTO1x1); 

    JScrollPane scrollPane = new JScrollPane(); 
    scrollPane.setBounds(0, 0, 812, 676); 
    contentPane.add(scrollPane);   

    JLabel lblBIODATA = new JLabel(""); 
    ImageIcon img = new ImageIcon("resources/BIODATA_96dpi.jpg"); 
    lblBIODATA.setIcon(img); 
    lblBIODATA.setSize(793, 1122); 
    scrollPane.setViewportView(lblBIODATA); 
    contentPane.add(lblBIODATA); 

} 

}

+3

* "contentPane.setLayout(null);およびsetBounds(... )問題ではありません "* - あなたは真実からどのくらい離れているか分かりません – MadProgrammer

関連する問題