3

私は 2 年生で、OOP プロジェクト (電卓) に取り組んでいます。数字ボタンと演算子の機能は以上です。現在、ボタンを再配置している段階です。最初は、ボタンのサイズを (50,50) に設定しただけで、正常に動作し、そのラベルはまだ表示されていますが、小さくすることにしたとき (30, 30)、そのラベルは "..." に変わりました。 .

これが写真です:

GUI ボタン​​は、MC、MR、MS、および M+ の代わりに ... を表示します

そして、私のコードは次のとおりです。

  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);
4

1 に答える 1

6

あなたの問題は、最初にボタンのサイズを設定することです。代わりに、適切なレイアウト マネージャーを使用して JFrame を呼び出して JButton と GUI のサイズをそのままにしておくと、pack()任意の OS ですべてのテキストを表示する見栄えの良い GUI が得られます。解決策: null レイアウトを使用せず、 を呼び出さずsetBounds(...)、ネストされた JPanel に保持されている適切なレイアウト マネージャーを読んで使用し、これらのレイアウト マネージャーに面倒なレイアウト作業をすべて任せてください。

たとえば、GridLayout を使用してボタンのグリッドを作成し、ボタンのフォント サイズを変更するだけでグリッドとボタンのサイズを変更できます。たとえば、以下のコードを 2 回実行して、ボタンのフォント サイズを変更し (以下のコードでは、float 定数 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 にネストし、その PAGE_START または NORTH エンドに JTextField を追加し、さまざまなフォント サイズで再生すると、次のようになります。

ここに画像の説明を入力

于 2013-02-24T06:11:40.767 に答える