【问题标题】:How can insert a JLabel at the center of another JLanel with icon如何在另一个带有图标的 JLabel 的中心插入一个 JLabel
【发布时间】:2016-06-16 14:21:55
【问题描述】:

我有一个 Java Swing 应用程序。我想插入一个以 png 图像为背景的 JLabel,并且我想在该图像的中心插入另一个 JLabel。所以我已经构建了这段代码:

ImageIcon icon = new ImageIcon(getClass().getResource("/resources/cornometro_white.png"));

labelSfondoTimer = new JLabel(icon);
labelTempoGara = new JLabel();
labelTempoGara.text("pippo");
GridBagConstraints GBC2 = new GridBagConstraints();
Container CR2 = new Container();
GridBagLayout GBL2 = new GridBagLayout();
CR2.setComponentOrientation(ComponentOrientation.UNKNOWN);
CR2.setLayout(GBL2);     
labelSfondoTimer.add(CR2);

GBC2 = new GridBagConstraints();
CR2.add(labelTempoGara);
GBC2.gridx=2;
GBC2.gridy=0;
GBC2.anchor= GridBagConstraints.CENTER;
GBL2.setConstraints(labelTempoGara,GBC2);

使用此代码,我可以在屏幕上看到图像,但看不到带有文本“pippo”的第二个标签

我也尝试插入此代码:

labelSfondoTimer.setObaque(true); 但不起作用。

【问题讨论】:

  • JLabel API中没有LayoutManager,JLabel有居中方法,JLabel默认透明,GBC默认JComponent居中无约束
  • 那么,我该如何解决我的错误?
  • @bircastri 看看这是否有帮助:Image which overlaps
  • 请看:someone answers

标签: java swing jlabel centering


【解决方案1】:

So, how can i fixed my error? - 所以,例如打印屏幕(基于我在你的问题中的评论 - JLabel hasn't any LayoutManager in API, JLabel has method for centering, JLabel is transparent by default, GBC without any constraints centering JComponent by default

来自 SSCCE / MCVE 形式的代码

import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.UIManager;

public class JLabelInJLabel {

    private JFrame frame = new JFrame();
    private Icon errorIcon = UIManager.getIcon("OptionPane.errorIcon");
    private Icon infoIcon = UIManager.getIcon("OptionPane.informationIcon");
    private Icon warnIcon = UIManager.getIcon("OptionPane.warningIcon");
    private JLabel parentJLabel = new JLabel();
    private JLabel childJLabel = new JLabel(infoIcon, SwingConstants.CENTER);
    private JLabel imageInJLabel = new JLabel(errorIcon, SwingConstants.CENTER);
    private JLabel simpleJLabel = new JLabel(warnIcon);

    public JLabelInJLabel() {
        parentJLabel.setLayout(new GridBagLayout());
        parentJLabel.add(childJLabel);
        parentJLabel.setBorder(BorderFactory.createLineBorder(java.awt.Color.RED));        
        imageInJLabel.setBorder(BorderFactory.createLineBorder(java.awt.Color.BLUE));        
        simpleJLabel.setBorder(BorderFactory.createLineBorder(java.awt.Color.ORANGE));        
        frame.setLayout(new GridLayout(0, 1));
        frame.add(parentJLabel);
        frame.add(imageInJLabel);
        frame.add(simpleJLabel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocation(100, 100);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(() -> new JLabelInJLabel());
    }
}

【讨论】:

  • 好的,但我的回答是,如何插入一张 PNG 图像并显示动态文本?
  • (比我敢肯定)dynamic text is 在 @Hovercraft Full Of Eels 的帖子中在这里发布了几次,那么在这种情况下没有理由重新发明轮子线程
【解决方案2】:

我想插入一个以 png 图像为背景的 JLabel,我想在该图像的中心插入另一个 JLabel

你可以在同一个标​​签上同时有文字和图标:

JLabel label1 = new JLabel( new ImageIcon(...) );
label1.setText( "Centered Text" );
label1.setHorizontalTextPosition(JLabel.CENTER);
label1.setVerticalTextPosition(JLabel.CENTER);

文本将位于图像的中心。

您还可以查看此帖子:JButton settext specific position,其中包含其他方法,可让文本位置更加灵活。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 2010-12-03
    • 1970-01-01
    • 2014-03-18
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多