2012-02-27 5 views
3

Я начинаю и делаю домашнее задание. Моя кнопка заполняет всю ячейку в gridLayout. Я читал о GridBagLayout, но в моей книге ничего не говорится об этом, поэтому я думаю, что есть только ошибка с моим текущим кодом. Учитель пытался мне помочь, но мы не можем понять это, поэтому я подумал, что попробую здесь. Любая помощь будет оценена! Вот что у меня есть:Кнопка заполняет всю ячейку в GridLayout, Java

package riddle; 

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

public class Riddle implements ActionListener { 
    private final String LABEL_TEXT = "Why did the chicken cross the road?"; 
    JFrame frame; 
    JPanel contentPane; 
    JLabel label, label1; 
    JButton button; 
    JButton button1; 
    private static int i; 

    public Riddle() { 
     /* Create and set up the frame */ 
     frame = new JFrame(LABEL_TEXT); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     /* Create a content pane with a GridLayout and empty borders */ 
     contentPane = new JPanel(); 
     contentPane.setLayout(new GridLayout(0, 2, 10, 5)); 


     /* Create and add label that is centered and has empty borders */ 
     label = new JLabel("Why did the chicken cross the road?"); 
     label.setAlignmentX(JButton.LEFT_ALIGNMENT); 
     label.setBorder(BorderFactory.createEmptyBorder(20, 50, 20, 50)); 
     contentPane.add(label); 

     label1 = new JLabel(" "); 
     label1.setAlignmentX(JButton.LEFT_ALIGNMENT); 
     label1.setBorder(BorderFactory.createEmptyBorder(20, 50, 20, 50)); 
     contentPane.add(label1); 

     /* Create and add button that is centered */ 
     button = new JButton("Answer"); 
     button.setAlignmentX(JButton.RIGHT_ALIGNMENT); 
     button.setActionCommand("Show Answer"); 
     button.addActionListener(this); 

     contentPane.add(button); 

     /* Add content pane to frame */ 
     frame.setContentPane(contentPane); 

     /* Size and then display the frame */ 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    /** Handle button click action event 
    * pre: 
    * post: clicked button shows answer 
    */ 
    public void actionPerformed(ActionEvent event) { 
     String eventName = event.getActionCommand(); 

     if (eventName.equals("Show Answer")) { 
      label1.setText("To get to the other side. "); 
      button.setText("Answer"); 
      button.setActionCommand("Answer"); 
     } 
    } 

    /** 
    * Create and show the GUI 
    */ 
    private static void runGUI() { 
     JFrame.setDefaultLookAndFeelDecorated(true); 

     Riddle greeting = new Riddle(); 
    } 



    public static void main(String[] args) { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       runGUI(); 
      } 
     }); 
    } 
} 
+1

См. Также [этот ответ] (http://stackoverflow.com/a/7181197/418556). –

ответ

3

Вот цитата из Swing tutorial about GridLayout:

GridLayout объект размещает компоненты в сетке клеток. Каждый компонент занимает все свободное пространство внутри своей ячейки, и каждая ячейка имеет точно такой же размер.

Если ваша книга не говорит о такой важной вещи, это плохая книга, и я бы посоветовал вместо этого использовать учебник Swing. Я удивлен, что ваш учитель не смог вам это сказать.

Если это не то, что вы хотите, выберите другой менеджер компоновки. Учебник Swing содержит руководство для all standard ones.

+0

Спасибо. Да, книга, которую я использую, - это руководство по программированию на Java и просто говорит о строках и столбцах. Проблема, над которой я работаю, даже говорит о том, чтобы использовать GridLayout, но картина того, что она должна выглядеть, делает ее похожей на то, что она имеет границу между кнопкой и ячейкой. Кроме того, чтобы разъяснить, это был не мой учитель, а помощник учителя, причина, по которой я даже поднял его, - это позволить вам, ребята, знать, что я пытаюсь, а не просто сбрасывать свой вопрос здесь, не делая никаких исследований в первую очередь. Во всяком случае, спасибо тонну и жаль, что мой вопрос был настолько хромым :( – Punkrockie

+0

Настройка маржирования не является проблемой, используя аргументы hgap и vgap конструктора. Но все ячейки имеют один и тот же hgap и vgap. –

Смежные вопросы