【问题标题】:After changing JLabel text it will not reposition更改 JLabel 文本后,它不会重新定位
【发布时间】:2014-09-23 23:45:30
【问题描述】:

我有一个顶部写有标题的 JDialog。我为两种不同的情况调用此 JDialog,如果它不是默认值,我将文本更改为其他内容。这工作正常,但位置太靠右了。

我尝试了很多方法,例如:

    TitleText.setText("Edit Fuse");
    TitleText.setAlignmentY(JLabel.CENTER_ALIGNMENT);
    //TitleText.setHorizontalAlignment(JDialog.);
    //TitleText.setLayout(new FlowLayout(FlowLayout.LEFT));

他们甚至都没有移动文本。我正在为整个 JDialog 使用免费设计布局。如果必须,我将创建另一个 JLable 并隐藏/取消隐藏,但我认为这很简单。有人知道怎么做吗?

【问题讨论】:

  • 考虑提供一个可运行的示例来演示您的问题

标签: java swing layout jlabel jdialog


【解决方案1】:

我正在为整个 JDialog 使用免费设计布局

  • 如果您希望标题 JLabel 的文本位于顶部并居中,请不要这样做。而是让 JDialog 的主 JPanel 使用 BorderLayout,并将 JLabel 添加到它 BorderLayout.PAGE_START,也称为 BorderLayout.North。
  • 然后,主 JPanel 可以使用自己的布局管理器和其他 JPanel 在其 BorderLayout.CENTER 位置保存 GUI 的其余部分,可能在其自己的 JPanel 中。
  • 另外,不要使用 JLabel.CENTER_ALIGNMENT,一个浮点数,而是使用 JLabel.CENTER,一个 int,这是 setHorizo​​ntalAlignment(...) 方法的适当参数。
  • 最后,我必须主动向您提出建议,以确保您的变量名称以小写字母而不是大写字母开头,以便它们符合 Java 命名规则。如果您希望其他人(例如这里愿意帮助您的人)快速理解您的代码,这一点很重要。

例如:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

@SuppressWarnings("serial")
public class LayoutExample extends JPanel {
   private static final float SIZE = 32;
   private static final int TIMER_DELAY = 2000;
   private String[] TITLE_STRINGS = { "Title 1", "Title 2",
         "Some Random Title", "Fubars Rule!", "Snafus Drool!" };
   private int titleIndex = 0;
   private JLabel titleLabel = new JLabel(TITLE_STRINGS[titleIndex],
         JLabel.CENTER);

   public LayoutExample() {
      titleLabel.setFont(titleLabel.getFont().deriveFont(Font.BOLD, SIZE));

      setLayout(new BorderLayout());
      add(titleLabel, BorderLayout.PAGE_START);

      // the rest of your GUI could be added below
      add(Box.createRigidArea(new Dimension(500, 300)), BorderLayout.CENTER);

      new Timer(TIMER_DELAY, new ActionListener() {

         @Override
         public void actionPerformed(ActionEvent e) {
            titleIndex++;
            titleIndex %= TITLE_STRINGS.length;
            titleLabel.setText(TITLE_STRINGS[titleIndex]);
         }
      }).start();
   }

   private static void createAndShowGui() {
      JFrame frame = new JFrame("LayoutExample");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(new LayoutExample());
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}

【讨论】:

  • 非常感谢!我是布局新手,不知道我可以把它放在 JPanel 上。
猜你喜欢
  • 1970-01-01
  • 2012-02-27
  • 2019-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-27
  • 1970-01-01
相关资源
最近更新 更多