2013-11-07 3 views
1

У меня есть код, работающий для этого задания, но не могу понять, как заставить его выглядеть правильно. Я немного озадачен. Необходимо использовать макет границы со всеми пятью регионами, добавленными в контейнер. Просто нужно указывать в правильном направлении ... спасибо. Я не могу отправить ПОС ... но это что-то вроде этого ...Java GUI Layout Issue

   Sum Numbers(Centered) 
        Text box 1 
        Text box 2 
        Text box 3 
        Result is: sum of numbers 
        Button 1(Sum Numbers)Button 2(Close) 

Код:

import javax.swing.JFrame; 
import javax.swing.SwingUtilities; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import java.util.Vector; 

public class Calculator extends JFrame { 

    // Declare GUI components 
    private JTextField jtfFirst; 
    private JTextField jtfSecond; 
    private JTextField jtfThird; 
    private JTextField jtfResult; 
    private JLabel jlblTitle; 
    private JLabel jlblFirst; 
    private JLabel jlblSecond; 
    private JLabel jlblThird; 
    private JLabel jlblResult; 
    private JPanel entryPanel; 
    private JPanel buttonPanel; 
    private JButton jbtAdd; 
    private JButton jbtClear; 

    // main method to instantiate and customize frame 
    public static void main(String[] args) 
    { 
     Vector<String> myVector=new Vector<String>(); 
     Calculator frame = new Calculator(); 
     frame.setTitle("Assignment 5"); 
     int windowWidth = 300; 
     int windowHeight = 200; 
     frame.setSize(350, 150); 
     frame.setLocation(400, 400); 
     frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 

    // GUI constructor 
    public Calculator() 
    { 
     // a bottom JPanel to place everything on. 
     //JPanel totalGUI = new JPanel(); 
     //totalGUI.setLayout(null); 

     JLabel textLabel = new JLabel("Add Numbers", JLabel.CENTER); 
     textLabel.setFont(new Font("Ariel",Font.PLAIN,24)); 

     //textLabel.setPreferredSize(new Dimension(300, 100)); 

     jlblResult = new JLabel("Total is: ", JLabel.LEFT); 
     jtfFirst = new JTextField(9); 
     jtfSecond = new JTextField(9); 
     jtfThird = new JTextField(9); 
     jtfResult = new JTextField(6); 
     entryPanel = new JPanel(); 

     // make result text field uneditable 
     jtfResult.setEditable(false); 

     // Set layout manager of panel 
     entryPanel.setLayout(new GridLayout(6,1,2,2)); 

     // add GUI components to panel 

     entryPanel.add(textLabel); 
     entryPanel.add(jtfFirst); 
     entryPanel.add(jtfSecond); 
     entryPanel.add(jtfThird); 
     entryPanel.add(jlblResult); 
     entryPanel.add(jtfResult); 

     // add entryPanel to frame 
     add(entryPanel, BorderLayout.CENTER); 

     // Instantiate GUI components for bottom of frame 
     jbtAdd = new JButton("Show Total"); 
     jbtClear = new JButton("Clear"); 
     buttonPanel = new JPanel(); 

     // add buttons to panel 
     buttonPanel.add(jbtAdd); 
     buttonPanel.add(jbtClear); 

     // add buttonPanel to frame 
     add(buttonPanel, BorderLayout.SOUTH); 

     //Event Handler 
     jbtAdd.addMouseListener(new List_ButtonADD()); 
     jbtClear.addMouseListener(new List_ButtonCLEAR()); 
    } 

    private class List_ButtonADD implements MouseListener 
    { 
     public void mouseClicked(MouseEvent event) 
     { 
      double x=Double.parseDouble(jtfFirst.getText()); 
      double y=Double.parseDouble(jtfSecond.getText()); 
      double z=Double.parseDouble(jtfThird.getText()); 

      jtfResult.setText(String.valueOf(x+y+z)); 

     public void mousePressed(MouseEvent event) 
     { 
     } 
     public void mouseReleased(MouseEvent event) 
     { 
     } 
     public void mouseEntered(MouseEvent event) 
     { 
     } 
     public void mouseExited(MouseEvent event) 
     { 
     } 
    } 

    private class List_ButtonCLEAR implements MouseListener 
    { 
     public void mouseClicked(MouseEvent event) 
     { 
      System.exit (0); 
     } 
     public void mousePressed(MouseEvent event) 
     { 
     } 
     public void mouseReleased(MouseEvent event) 
     { 
     } 
     public void mouseEntered(MouseEvent event) 
     { 
     } 
     public void mouseExited(MouseEvent event) 
     { 
     } 
    } 
} 

Image

+0

Вы можете использовать только BorderLayout? – alex2410

+0

не просто..может также использовать раскладку макета – user2883088

+0

Я могу указать вам GridBagLayout, это подходит для вас? – alex2410

ответ

2

Вот вам пример. Я использовал GridBagLayout, потому что он очень гибкий.

public class ExampleFrame extends JFrame { 

private JTextField jtfFirst; 
private JTextField jtfSecond; 
private JTextField jtfThird; 
private JTextField jtfResult; 

public ExampleFrame() { 
    super(); 
    setLayout(new GridBagLayout()); 

    GridBagConstraints c = new GridBagConstraints(); 
    c.insets = new Insets(5, 5, 5, 5); 
    c.gridwidth = 2; 
    c.gridx = 0; 
    c.gridy = 0; 
    add(new JLabel("Sum Numbers"),c); 

    c.gridwidth = 1; 
    c.anchor = GridBagConstraints.WEST; 
    c.gridy = 1; 
    add(new JLabel("Text1"),c); 

    c.gridy =2; 
    add(new JLabel("Text2"),c); 

    c.gridy =3; 
    add(new JLabel("Text3"),c); 

    c.gridy =4; 
    add(new JLabel("Result"),c); 

    c.gridy =5; 
    JButton b1 = new JButton("b1"); 
    b1.addActionListener(getActionB1Listener()); 
    add(b1,c); 

    c.gridx = 1; 
    c.gridy = 1; 
    c.fill = GridBagConstraints.HORIZONTAL; 
    c.weightx = 1; 
    add(jtfFirst = new JTextField(),c); 

    c.gridy = 2; 
    add(jtfSecond = new JTextField(),c); 

    c.gridy = 3; 
    add(jtfThird = new JTextField(),c); 

    c.gridy = 4; 
    add(jtfResult = new JTextField(),c); 
    JButton b2 = new JButton("b2"); 
    b2.addActionListener(getActionB2Listener()); 

    c.fill = GridBagConstraints.NONE; 
    c.weightx = 0; 
    c.gridy = 5; 
    add(b2,c); 
    pack(); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setVisible(true); 

} 


private ActionListener getActionB1Listener() { 
    return new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent arg0) { 
      System.out.println("b1 clicked"); 

     } 
    }; 
} 

private ActionListener getActionB2Listener() { 
    return new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent arg0) { 
      System.out.println("b2 clicked"); 

     } 
    }; 
} 


public static void main(String... s) { 
    new ExampleFrame(); 
} 
} 

И никогда не сделать, если вы используете MouseListener только за клики:

jbtAdd.addMouseListener(new List_ButtonADD()); 
jbtClear.addMouseListener(new List_ButtonCLEAR()); 

MouseListener использует для других целей. Вместо этого используется ActionListener, который используется для действий с кнопками.

enter image description here

+0

Большое спасибо Alex ... оцените ваш быстрый ответ и помощь !! – user2883088

+0

+1 для 'GridBagLayout' –

+0

Жаль, что я мог бы дать 2 – user2883088

2

Ok вот как вы идете делать это:

  1. получить JFrame и установить его расположение на BorderLayout.
  2. Создать JLabel с текстом, чтобы «Добавить Numbers» и добавить к JFrame его с помощью BorderLayout.NORTH
  3. создать JPanel, установите его расположение в BorderLayout.
  4. Создайте 3 JTextField, добавьте их в JPanel с помощью BorderLayout.NORTH, BorderLayout.CENTER и BorderLayout.SOUTH
  5. Создать другой JPanel.
  6. Создайте JLabel, чтобы отобразить «Всего 60». Также создайте два JButtons.
  7. Установите макет JPanel с 5 по BorderLayout. Добавьте JLabel, используя BorderLayout.NORTH.
  8. Создайте еще JPanel с помощью FlowLayout, добавьте две кнопки. Затем добавьте это JPanel в JPanel на этапе 5 с BorderLayout.SOUTH.
  9. Добавить все JPanels в ваш JFrame.
+0

Большое спасибо Маленький Ребенок ... Я ценю помощь !! – user2883088

+0

@ user2883088 Спасибо = +1 здесь, но о хорошо ... его k;) –