如何将组件放在位于 JPanel 中的其他组件的中心
how to put a component at the center of other component that sit in a JPanel
我想知道如何将 JLabel 或 JPanel 放在位于 JPanel 中的 JTable 的中心。
我看到了一个 BufferedImage 的例子,但我无法将它转换为某种共鸣,
这是示例 link:
Put JLabel on Component in JPanel
我也放了一张图片来说明我的意思。
Press to see the result I need
顺便说一下,这是我使用 windows 8 时的样子
现在...
有什么想法吗?
您可以将任何组件直接添加到 table(这就是编辑器的工作方式)。
你只需要设置组件的size/location:
JLabel label = new JLabel( "Please Wait" );
label.setSize( label.getPreferredSize() );
label.setLocation(20, 20);
table.add( label );
table.repaint();
或者您可以使用 JLayer
class 来修饰 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();
}
});
*/
}
}
我想知道如何将 JLabel 或 JPanel 放在位于 JPanel 中的 JTable 的中心。 我看到了一个 BufferedImage 的例子,但我无法将它转换为某种共鸣, 这是示例 link: Put JLabel on Component in JPanel
我也放了一张图片来说明我的意思。 Press to see the result I need 顺便说一下,这是我使用 windows 8 时的样子 现在... 有什么想法吗?
您可以将任何组件直接添加到 table(这就是编辑器的工作方式)。
你只需要设置组件的size/location:
JLabel label = new JLabel( "Please Wait" );
label.setSize( label.getPreferredSize() );
label.setLocation(20, 20);
table.add( label );
table.repaint();
或者您可以使用 JLayer
class 来修饰 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();
}
});
*/
}
}