2017-06-09 20 views
2

私のJPanelに画像やラベルを表示しようとしています。つまり、カスタムの場所に多くのJLabelを表示したいのですが、現在は4つのラベルしか表示できません。私はScrollPaneを使用する必要があることを理解しています。私はそれを使用しようとしましたが、私はそれらを税関の場所に配置できません。 (カスタムの場所では、私は私のラベルを配置するCOORDSを使用することを意味。)ここで JLabelをScrollPaneの特定の場所に追加するにはどうすればよいですか?

を使用せずにコードでのScrollPane:

import java.awt.Dimension; 

import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.border.EmptyBorder; 

public class Images extends JFrame{ 
    private JPanel contentPane; 
    public static void main(String[] args) { 
     Images image=new Images(); 
    } 
    public Images(){ 
     setVisible(true); 
     setTitle("myTitle"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(100, 100, 800, 800); 
     contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     setContentPane(contentPane); 
     contentPane.setLayout(null); 
     JLabel lblNombreequipo = new JLabel("trying: "); 
     lblNombreequipo.setBounds(147, 110, 145, 14); 
     contentPane.add(lblNombreequipo); 
     int coordY=150; 
     for(int i=0;i<10;i++){ 
      JLabel myLabel = new JLabel("attempt: "+i); 
      myLabel.setBounds(147,coordY, 145, 14); 
      contentPane.add(myLabel); 
      coordY=coordY+150; 
     } 

    } 

} 
+0

'JScrollPanel'を使用しようとしたあなたのコードを投稿するべきです。あなたが投稿したものは、「私が試したコード」の代わりに「私のコードを書いてください」のように見えますが、どこが間違っていましたか?しかし、上記のコードのいくつかの問題に答えるには、デフォルトの 'FlowLayout'を使って' JPanel'を作成しています。これは、 'JPanel'に追加された子に与えられた任意の位置情報をオーバーライドします。 – AJNeufeld

+0

ヌルレイアウトを使用することをお勧めします - むしろ、適切な 'LayoutManager'を使用してください。 https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html – copeg

答えて

2

のJavaのGUI異なるOS」、画面サイズ、画面の解像度などで仕事をしなければなりません異なるロケールで異なるPLAFを使用します。したがって、ピクセルの完全なレイアウトには役立ちません。その代わりに、レイアウトマネージャーを使用するか、またはwhite spaceのレイアウトパディングと境界と共にcombinations of themを使用します。

ここは例です。レイアウトパディングとコンポーネントの境界線のパラメータを調整して、「正確な」要件を提供してください。&コード内のさらなるコメントに注意してください。

import java.awt.*; 
import javax.swing.*; 
import javax.swing.border.EmptyBorder; 

public class Images extends JFrame { 

    private JPanel contentPane; 

    public static void main(String[] args) { 
     new Images(); 
    } 

    public Images() { 
     setTitle("myTitle"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     // setBounds(100, 100, 800, 800); call pack() instead 
     contentPane = new JPanel(new BorderLayout()); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     setContentPane(contentPane); 
     //contentPane.setLayout(null); // never do that! 
     JLabel lblNombreequipo = new JLabel("trying: "); 
     lblNombreequipo.setBorder(new EmptyBorder(10, 40, 10, 10)); 
     //lblNombreequipo.setBounds(147, 110, 145, 14); 
     contentPane.add(lblNombreequipo, BorderLayout.PAGE_START); 
     //int coordY = 150; 
     JPanel scrollPanel = new JPanel(new GridLayout(0, 1, 0, 50)); 
     contentPane.add(new JScrollPane(scrollPanel, 
       JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
       JScrollPane.HORIZONTAL_SCROLLBAR_NEVER)); 
     for (int i = 0; i < 10; i++) { 
      JLabel myLabel = new JLabel("attempt: " + i); 
      myLabel.setBorder(new EmptyBorder(20, 140, 20, 140)); 
      //myLabel.setBounds(147, coordY, 145, 14); 
      scrollPanel.add(myLabel); 
      //coordY = coordY + 150; 
     } 
     pack(); 
     // now the preferred size has been calculated, we can shorten the height 
     Dimension d = getSize(); 
     setSize(new Dimension(d.width, 250)); 
     setLocationByPlatform(true); 
     setMinimumSize(getSize()); 
     setVisible(true); //should be last 
    } 
} 
+0

ありがとうございました。私はあなたのコメントが本当に便利だと思った。私の問題はラベルと画像で解決しました。もう一度ありがとうございます:D – stellsh

+0

私は今、小さな問題が1つあります。私はイメージのサイズを変更できません。現在、私はJLabelを使っています。myLabel =新しいJLabel(新しいImageIcon( "myImage.png")); もし私がそれをどのように修正できるか知っていれば、それは素晴らしいことでしょう。そうでなければ、とにかく感謝します。 – stellsh

+0

*「どうすればそれを解決できるか知っていれば」*別の(新しい)質問をしてください。 –

関連する問題