2014-08-31 1 views
1

나는 계산기 애플릿에 필요한 모든 버튼을 질서있게 보여주기 위해 JApplet을 얻으려고했지만, 그걸로 보이지 않는다. 모두 같은 크기 여야하며 서로의 아래에 바로 표시하십시오. 다른 레이아웃을 사용하거나 전체 디자인을 변경해야합니까? 미리 감사드립니다.Calculator를 얻을 수 없다. JApplet GUI가 규칙적으로 버튼을 표시한다.

import java.awt.FlowLayout; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.BoxLayout; 
import javax.swing.JApplet; 
import javax.swing.JButton; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

public class MyCalc extends JApplet implements ActionListener{ 

/** 
* 
*/ 
protected static final long serialVersionUID = 3169756252830354073L; 

private JMenuBar menuBar = new JMenuBar(); 
private JMenu edit = new JMenu("Edit"); 
private JMenu view = new JMenu("View"); 
private JMenu help = new JMenu("Help"); 

//Instantiated all JPanels used in this Applet 
private JPanel[] rows = {new JPanel(), new JPanel(), new JPanel(), 
     new JPanel(), new JPanel(), new JPanel(), new JPanel()}; 

JTextField calc = new JTextField(1); 

private JButton[] buttons = {new JButton("Backspace"), new JButton("CE"), new JButton("C"), 
     new JButton("MC"), new JButton("7"), new JButton("8"), new JButton("9"), 
     new JButton("/"), new JButton("sqrt"), new JButton("MR"), new JButton("4"), 
     new JButton("5"), new JButton("6"), new JButton("*"), new JButton("%"), 
     new JButton("MS"), new JButton("1"), new JButton("2"), new JButton("3"), 
     new JButton("-"), new JButton("1/x"), new JButton("M+"), new JButton("0"), 
     new JButton("+/-"), new JButton("."), new JButton("+"), new JButton("=")}; 

public void actionPerformed(ActionEvent e) { 

    if(e.getSource() == buttons[0]) 
    { 

    } 

} 

public void init() 
{ 
    setName("Calculator Applet"); 
    menuBar.add(edit); 
    menuBar.add(view); 
    menuBar.add(help); 
    setJMenuBar(menuBar); 

    rows[0].setLayout(new BoxLayout(rows[0], BoxLayout.Y_AXIS)); 
    getContentPane(); 
    add(rows[0]); 
    setSize(300, 200); 

    calc.setText("0."); 
    calc.setHorizontalAlignment(JTextField.RIGHT); 

    for(int i = 0; i < 3; i++) 
    { 
     rows[2].add(buttons[i]); 
    } 

    for(int i = 3; i < 9; i++) 
    { 
     rows[3].add(buttons[i]); 
    } 

    for(int i = 9; i < 15; i++) 
    { 
     rows[4].add(buttons[i]); 
    } 

    for(int i = 15; i < 21; i++) 
    { 
     rows[5].add(buttons[i]); 
    } 

    for(int i = 21; i < 26; i++) 
    { 
     rows[6].add(buttons[i]); 
    } 

    rows[1].add(calc); 
    rows[1].setLayout(new GridLayout()); 
    rows[2].setLayout(new GridLayout()); 
    rows[0].add(rows[1]); 
    rows[0].add(rows[2]); 

    for(int i = 3; i < 7; i++) 
    { 
     rows[0].add(rows[i]); 
     rows[i].setLayout(new FlowLayout(FlowLayout.CENTER)); 
    } 

} 
+0

정확히 당신이처럼 무엇을 기대 프레임의 크기를 조정하면 모든 것이 망쳐됩니까? –

+0

처음 3 개의 버튼이 다른 모든 버튼보다 위에 있고, 6 개의 버튼이 각각 행으로 표시되고 모든 단추가 바로 아래에있는 것처럼 서로 마주 보게하고 싶습니다. 관심을 가져 주셔서 감사합니다 – user3046986

답변

2

"하지만 같은 크기를하고 서로의 바로 아래 표시 모든 그들을 얻을 수없는 것."

일반적으로이 메시지는 GridLayout입니다. 두 개의 BoxLayout (세로 1 개와 가로 1 개) 대신에 GridLayout(4, 6) (숫자 버튼 용)을 사용하면됩니다. 버튼의 크기는 가장 큰 버튼 (sqrt)의 크기가됩니다.

또한 내가하고있는 것처럼 배열에서 패널을 유지하는 것이 좋습니다. 모든 것을 추가하려는 방법의 흐름을 따라 가기가 어렵습니다. 패널 (및 해당 구성 요소의 모든 구성 요소)은 자체적으로 문서화 할 수있는 의미있는 이름을 지정하십시오.

레이아웃 매니저에 대한 일반적인 지식, Laying out Component Within a Container

을 확인 나는 애플릿 또는 독립형 프레임으로 실행할 수 있도록 코드를 리팩토링. 또한 패널의 모든 구성 요소를 싸서 GridBagLayout에 컨텐츠 패널의 레이아웃 매니저를 설정, 그래서 당신은

import java.awt.BorderLayout; 
import java.awt.Container; 
import java.awt.GridBagLayout; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JApplet; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.SwingUtilities; 

public class MyCalc extends JApplet implements ActionListener { 

    /** 
* 
*/ 
    protected static final long serialVersionUID = 3169756252830354073L; 

    private JMenuBar menuBar = new JMenuBar(); 
    private JMenu edit = new JMenu("Edit"); 
    private JMenu view = new JMenu("View"); 
    private JMenu help = new JMenu("Help"); 

    // Instantiated all JPanels used in this Applet 
    //private JPanel[] rows = { new JPanel(), new JPanel(), new JPanel(), 
    //  new JPanel(), new JPanel(), new JPanel(), new JPanel() }; 

    JTextField calc = new JTextField(1); 

    private JButton[] buttons = { new JButton("Backspace"), new JButton("CE"), 
      new JButton("C"), new JButton("MC"), new JButton("7"), 
      new JButton("8"), new JButton("9"), new JButton("/"), 
      new JButton("sqrt"), new JButton("MR"), new JButton("4"), 
      new JButton("5"), new JButton("6"), new JButton("*"), 
      new JButton("%"), new JButton("MS"), new JButton("1"), 
      new JButton("2"), new JButton("3"), new JButton("-"), 
      new JButton("1/x"), new JButton("M+"), new JButton("0"), 
      new JButton("+/-"), new JButton("."), new JButton("+"), 
      new JButton("=") }; 

    public void actionPerformed(ActionEvent e) { 

     if (e.getSource() == buttons[0]) { 

     } 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable(){ 
      public void run() { 
       JFrame frame = new JFrame(); 
       MyCalc calc = new MyCalc(); 
       calc.init(); 
       frame.add(calc); 
       frame.pack(); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public void init() { 
     setName("Calculator Applet"); 
     menuBar.add(edit); 
     menuBar.add(view); 
     menuBar.add(help); 
     setJMenuBar(menuBar); 

     Container contentPane = getContentPane(); 

     calc.setText("0."); 
     calc.setHorizontalAlignment(JTextField.RIGHT); 
     JPanel topButtonPanel = new JPanel(new GridLayout(1, 0)); 
     for (int i = 0; i < 3; i++) { 
      topButtonPanel.add(buttons[i]); 
     } 

     JPanel numberButtonPanel = new JPanel(new GridLayout(4, 6)); 
     for (int i = 3; i < 26; i++) { 
      numberButtonPanel.add(buttons[i]); 
     } 

     JPanel centerWrapper = new JPanel(new BorderLayout()); 
     centerWrapper.add(calc, BorderLayout.PAGE_START); 
     centerWrapper.add(topButtonPanel); 
     centerWrapper.add(numberButtonPanel, BorderLayout.PAGE_END); 

     contentPane.setLayout(new GridBagLayout()); 
     contentPane.add(centerWrapper); 
    } 
} 
+0

이것은 실제로 트릭을 했어요, 정말 고마워요! – user3046986

관련 문제