如何将JLabel添加到我的ScrollPane中的特定位置?

时间:2017-06-09 19:10:55

标签: java swing jscrollpane layout-manager scrollpane

我试图在我的JPanel中显示图像和/或标签。问题是,我想在自定义位置显示许多JLabel,但目前我只能显示4个标签。我知道我需要使用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;
        }

    }

}

1 个答案:

答案 0 :(得分:2)

Java GUI必须使用不同语言环境中的不同PLF,处理不同的操作系统,屏幕大小,屏幕分辨率等。因此,它们不利于像素完美布局。而是使用布局管理器,或combinations of them以及white space的布局填充和边框。

这是一个例子。调整布局填充和组件边框参数以提供“确切”要求&amp;请注意代码中的进一步评论。

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
    }
}