如何将组件置于JPanel中的其他组件的中心

时间:2018-10-19 00:32:57

标签: java swing awt

我想知道如何将JLabel或JPanel放在JPanel中的JTable的中心。 我看到了一个带有BufferedImage的示例,但无法将其转换为某些重用, 这是示例链接: Put JLabel on Component in JPanel

https://i.stack.imgur.com/k8KUu.png

我还放了一张图片以显示我的意思。 Press to see the result I need 顺便说一句,这就是我使用Windows 8时的样子 现在... 有什么主意吗?

1 个答案:

答案 0 :(得分:0)

您可以将任何组件直接添加到表中(这是编辑器的工作方式)。

您只需要设置组件的大小/位置:

JLabel label = new JLabel( "Please Wait" );
label.setSize( label.getPreferredSize() );
label.setLocation(20, 20);
table.add( label );
table.repaint();

或者您可以使用JLayer类来装饰JTable。阅读有关How to Decorate Components With the JLayer Class的Swing教程中的部分,以获取更多信息和工作示例。

编辑:

适当的MCVE的简单示例”

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

public class PleaseWait extends JPanel
{
    PleaseWait()
    {
        JTable table = new JTable(5, 5);
        table.setPreferredScrollableViewportSize(table.getPreferredSize());
        add( new JScrollPane( table ) );

        JLabel label = new JLabel("Please Wait");
        label.setOpaque(true);
        label.setBackground(Color.LIGHT_GRAY);
        label.setBorder( new EmptyBorder(10, 10, 10, 10) );
        label.setSize( label.getPreferredSize() );
        label.setLocation(150, 20);
        table.add( label );
    }

    private static void createAndShowGUI()
    {
        JFrame frame = new JFrame("PleaseWait");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new PleaseWait());
        frame.pack();
        frame.setLocationByPlatform( true );
        frame.setVisible( true );
    }

    public static void main(String[] args) throws Exception
    {
        EventQueue.invokeLater( () -> createAndShowGUI() );
/*
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowGUI();
            }
        });
*/
    }
}