2011-10-19 12 views
4

こんにちは、自分でサイズやレイアウトなどをコーディングして電卓を作ろうとしています(NetBeansを使用しようとせず、宿題ではありません)。しかし私は空きスペースに関する問題に直面しています。私はTextAreaとButtonsを持っていますが、下で見ることができるように、私はこのスペースの問題を処理できません。ここに私のコードは、単純な計算機のレイアウトについて

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.FlowLayout; 
import java.awt.GridLayout; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JSeparator; 
import javax.swing.JTextArea; 

public class calculator extends JFrame { 

    public calculator(){ 

     initComponents(); 

    } 

    private void initComponents(){ 

     JPanel panelScreen = new JPanel(new GridLayout(0,1)); 

     JTextArea screen = new JTextArea(); 
     panelScreen.add(screen); 

     JFrame frame = new JFrame("CALCULATOR"); 
     frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 

     JPanel panelButtons = new JPanel(new GridLayout(3,3)); 

     JButton oneButton = new JButton("1"); 
     panelButtons.add(oneButton); 

     JButton twoButton = new JButton("2"); 
     panelButtons.add(twoButton); 

     JButton threeButton = new JButton("3"); 
     panelButtons.add(threeButton); 

     JButton fourButton = new JButton("4"); 
     panelButtons.add(fourButton); 

     JButton fiveButton = new JButton("5"); 
     panelButtons.add(fiveButton); 

     JButton sixButton = new JButton("6"); 
     panelButtons.add(sixButton); 

     JButton sevenButton = new JButton("7"); 
     panelButtons.add(sevenButton); 

     JButton eightButton = new JButton("8"); 
     panelButtons.add(eightButton); 

     JButton nineButton = new JButton("9"); 
     panelButtons.add(nineButton); 

     frame.getContentPane().add(panelScreen, BorderLayout.NORTH); 
     //frame.getContentPane().add(new JSeparator(), BorderLayout.CENTER); 
     frame.getContentPane().add(panelButtons, BorderLayout.SOUTH); 
     frame.setBounds(50, 50, 500, 500); 
     frame.setResizable(false); 
     //frame.pack(); 
     frame.setVisible(true); 


    } 


    public static void main(String[] args) { 

     new calculator(); 

    } 

} 

とこれはプログラムの画像です。

enter image description here

あなたは私を助けることができる場合、私は感謝しています。とにかく感謝:)

+0

素敵qeustion 1 – mKorbel

+1

あなたはそれが、この中でどのように行われるかに見えるかもしれません[電卓コード](http://stackoverflow.com/questions/7441625/how-to-find-a -button-source-in-awt-calculator-homework/7441804#7441804)。おそらくあなたの使用に必要なものは正確ではありませんが、あなたにいくつかのアイデアを与えるかもしれません。 –

+0

ここで、 '0'はどこですか?あなたは0ではないと考えている人々の一人ですか?私の二番目に若い妹が(概念的に)そこにいる。 –

答えて

4

Calculator GUI

import java.awt.*; 

import javax.swing.*; 
import javax.swing.border.EmptyBorder; 

// no need to extend frame! 
//public class Calculator extends JFrame { 
public class Calculator { 

    public Calculator(){  
     initComponents();  
    } 

    private void initComponents(){ 
     // I find it easier to create a panel and SET it as the content pane 
     JPanel gui = new JPanel(new BorderLayout(5,5)); 
     // add some padding to the main GUI 
     gui.setBorder(new EmptyBorder(4,4,4,4)); 

     // not needed if only a single compoinent is to be added! 
     //JPanel panelScreen = new JPanel(new GridLayout(0,1)); 

     // add some constraints to make the output field bigger. 
     // if it is intended to be single line, a JTextField should be used. 
     JTextArea screen = new JTextArea(2,25); 
     gui.add(screen, BorderLayout.NORTH); 
     //panelScreen.add(screen); 

     JFrame frame = new JFrame("CALCULATOR"); 
     frame.setContentPane(gui); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     // add padding around the buttons 
     JPanel panelButtons = new JPanel(new GridLayout(3,3,4,4)); 

     JButton oneButton = new JButton("1"); 
     panelButtons.add(oneButton); 

     JButton twoButton = new JButton("2"); 
     panelButtons.add(twoButton); 

     JButton threeButton = new JButton("3"); 
     panelButtons.add(threeButton); 

     JButton fourButton = new JButton("4"); 
     panelButtons.add(fourButton); 

     JButton fiveButton = new JButton("5"); 
     panelButtons.add(fiveButton); 

     JButton sixButton = new JButton("6"); 
     panelButtons.add(sixButton); 

     JButton sevenButton = new JButton("7"); 
     panelButtons.add(sevenButton); 

     JButton eightButton = new JButton("8"); 
     panelButtons.add(eightButton); 

     JButton nineButton = new JButton("9"); 
     panelButtons.add(nineButton); 

     //frame.getContentPane().add(new JSeparator(), BorderLayout.CENTER); 

     // Add the buttons to the CENTER and they will 
     // fill whatever space they are provided. 
     gui.add(panelButtons, BorderLayout.CENTER); 
     //frame.setBounds(50, 50, 500, 500); 
     //frame.setResizable(false); 
     frame.pack(); 
     frame.setVisible(true); 
    }  

    public static void main(String[] args) {  
     java.awt.EventQueue.invokeLater(new Runnable() { 

     @Override 
     public void run() { 
      new Calculator(); 
     } 
     });  
    }  
} 
+2

'BorderLayout'は、その中に含まれているコンポーネントの**コンポーネント配置**のための* layout *であり、' EmptyBorder'は* border **はコンポーネント**(パネル)を囲みます。それはあなたのための混乱をクリアするか、私はあなたの質問を誤解しましたか? –

+0

最後に私はそれを理解しています。ありがとう:) – quartaela

5

いくつかの提案:

  1. はJFrameののサイズを設定しないでください、実際には任意のサイズを設定しないでください。
  2. すべてのコンポーネントを呼び出して、独自のサイズを設定します。
  3. ボタンを大きくしたい場合は、フォントのサイズを変更することを検討してください。例えば

Calc2 GUI

import java.awt.BorderLayout; 
import java.awt.Font; 
import java.awt.GridLayout; 

import javax.swing.*; 

public class Calc2 { 
    public static final String[][] BUTTON_TEXTS = { 
     {"7", "8", "9", "+"}, 
     {"4", "5", "6", "-"}, 
     {"1", "2", "3", "*"}, 
     {"0", ".", "/", "="} 
    }; 
    public static final Font BTN_FONT = new Font(Font.SANS_SERIF, Font.BOLD, 24); 

    private static void createAndShowGui() { 
     JTextField field = new JTextField(10); 
     field.setFont(BTN_FONT.deriveFont(Font.PLAIN)); 
     JPanel btnPanel = new JPanel(new GridLayout(BUTTON_TEXTS.length, 
      BUTTON_TEXTS[0].length)); 

     for (int i = 0; i < BUTTON_TEXTS.length; i++) { 
     for (int j = 0; j < BUTTON_TEXTS[i].length; j++) { 
      JButton btn = new JButton(BUTTON_TEXTS[i][j]); 
      btn.setFont(BTN_FONT); 
      btnPanel.add(btn); 
     } 
     } 

     JPanel mainPanel = new JPanel(new BorderLayout()); 
     mainPanel.add(field, BorderLayout.PAGE_START); 
     mainPanel.add(btnPanel, BorderLayout.CENTER); 


     JFrame frame = new JFrame("Calc2"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

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

しかし、私はJFrameのサイズを変更するのではなく、サイズが非常に小さいです。私はテキストarea_でより大きなボタンを欲しいですか? – quartaela

+3

もう一度、フォントを設定しますが、上記以外のOSやOSで実行されている場合は、画面の解像度が違うので互換性のないGUIが表示されます。上記の編集を参照してください。 –

+0

@Andrew:スクリーンショットを撮ってください。 :) –

4
  1. 読むLaying Out Components Within a Container
  2. 適切なレイアウト(複数可)を実施

EDIT -

クイックソリューション - JFrameのレイアウトマネージャーをBoxLayout(つまり、 setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS)))。

+0

実際に私はちょうど5分前にそのチュートリアルを終えました:D。私はこの電卓を作った。 – quartaela

+0

@quartaela:これは行く方法です、1 + –

+0

@quartaela、編集を参照してください。 – mre

-2

迅速かつダーティ液:setBoundsコメント解除

()とframe.setBounds(50、50、150、125)に変更。

これは理想的な解決策ではありません。

別のトップレベルレイアウトを使用して、レイアウトパネルをよりフレキシブルにする方法を再設計しました。現在のBorderLayout(デフォルト)は、このタイプのデザインには最適ではありません。

+0

ええ、これはこのアプリケーションのためだけに動作します:D – quartaela

+1

@quart:あなたはこれをしたくない、理想的ではないだけでなく、それは間違っているだけです。 –

+0

私は恥ずべきで私の頭を撫でるでしょう:) – Ewald

4

これは、@ HFOEと@mreの提案に続くこのexampleを調べることができます。 「サイズ」はコードのどこにも表示されないことに注意してください。

+0

ありがとう私はこの例を考慮します:) – quartaela

関連する問題