【问题标题】:Java GUI button's label can't be seen看不到 Java GUI 按钮的标签
【发布时间】:2013-02-24 05:46:58
【问题描述】:

我是一名二年级学生,正在从事我的 OOP 项目(计算器)。我已经完成了数字按钮和操作符的功能。现在我正处于重新排列按钮的阶段。起初,我只是将我的按钮大小设置为 (50,50),它工作正常并且它的标签仍然可见,但是当我决定将它变小 (30, 30) 时,它的标签变成了“...” .

图片如下:

这是我的代码:

  lblEdit.setBounds(-138,-5,180,50);    
  lblView.setBounds(-90,-5,180,50); 
  lblHelp.setBounds(-40,-5,180,50); 
  txt.setBounds(15,35,250,30);      // text pane
  txt2.setBounds(0,330,100,20); 
  blank.setBounds(15,80,30,30);     // this is just an extra button, no use at all, OK? :D 
  btnMC.setBounds(15,115,30,30);
  btnMR.setBounds(15,150,30,30);
  btnMS.setBounds(15,185,30,30);
  btnMp.setBounds(15,220,30,30);

【问题讨论】:

标签: java swing user-interface layout-manager null-layout-manager


【解决方案1】:

您的问题是您将按钮大小设置为开头。如果您改为使用适当的布局管理器并在 JFrame 上调用 pack() 让 JButton 和 GUI 自行调整大小,您将获得一个外观不错的 GUI,它可以在任何操作系统中显示所有文本。解决方案:不要使用空布局,不要调用setBounds(...),阅读并使用嵌套 JPanel 中的适当布局管理器,让这些布局管理器为您完成所有繁重的布局提升。

例如,您可以使用 GridLayout 创建一个按钮网格,并通过简单地更改按钮的字体大小来更改网格和按钮的大小。例如,运行以下代码两次,更改按钮字体大小(在下面的代码中,浮动常量 BTN_FONT_SIZE)并查看 GUI 如何通过将按钮大小调整为最佳大小来自动适应按钮字体。

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

public class CalcEg {
   private static final float BTN_FONT_SIZE = 20f;  // **** try using 40f here ****
   private static final String[][] BTN_LABELS = {
      {"7", "8", "9", "-"},
      {"4", "5", "6", "+"},      
      {"1", "2", "3", "/"},
      {"0", ".", " ", "="}
   };
   private JPanel mainPanel = new JPanel();

   public CalcEg() {
      int rows = BTN_LABELS.length;
      int cols = BTN_LABELS[0].length;
      int gap = 4;
      mainPanel.setBorder(BorderFactory.createEmptyBorder(gap, gap, gap, gap));
      mainPanel.setLayout(new GridLayout(rows, cols, gap, gap));
      for (String[] btnLabelRow : BTN_LABELS) {
         for (String btnLabel : btnLabelRow) {
            JButton btn = createButton(btnLabel);
            // add ActionListener to btn here
            mainPanel.add(btn);
         }
      }
   }

   private JButton createButton(String btnLabel) {
      JButton button = new JButton(btnLabel);
      button.setFont(button.getFont().deriveFont(BTN_FONT_SIZE));
      return button;
   }

   public JComponent getMainComponent() {
      return mainPanel;
   }

   private static void createAndShowGui() {
      CalcEg mainPanel = new CalcEg();

      JFrame frame = new JFrame("CalcEg");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(mainPanel.getMainComponent());
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

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

如果您使用 JPanel 将按钮 JPanel 嵌套到 BorderLayout 中,并将 JTextField 添加到其 PAGE_START 或 NORTH 端,并且您使用不同的字体大小,您将看到如下内容:

【讨论】:

  • 非常感谢气垫船!你真是个极客! ;)
  • 有机会请accept回答。
  • 我现在正在尝试向我的按钮添加动作侦听器,但每次我都会出错:AbstractButton 类中的方法 addActionListener 不能应用于给定类型; btn1.addActionListener(this);
  • @MJCervantes :你的班级 implements ActionListeneroverridingactionPerformed() 方法吗?请通过编辑您的问题提供您最近的尝试。
猜你喜欢
  • 2020-09-23
  • 2016-10-18
  • 2015-07-27
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多