2016-01-04 5 views
0

Я хочу отобразить этот двумерный массив кнопок с 3 кнопками в одной строке, 5 на следующей строке и 3 кнопки на последней строке, но все они выходят на одну строку - Что я делаю не так?отображение пользовательского двумерного массива в java GUI

public class GUICustombuttonstwodimarray extends JFrame { 
    static final String title = "Custom Buttons"; 
    int row, col; 
    JPanel panel; 

    JButton[][] jbut = { { new JButton("0"), new JButton("1"), new JButton("2") }, 
     { new JButton("3"), new JButton("4"), new JButton("5"), new JButton("6"), new JButton("7") }, 
     { new JButton("8"), new JButton("9") }, { new JButton("10") } 
    }; 

    public GUICustombuttonstwodimarray(String title) { 
     super(title); 
     this.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     this.setSize(500, 500); 
     this.setVisible(true); 

     panel = new JPanel(); 

     for (row = 0; row < jbut.length; row++) { 
      for (col = 0; col < jbut[row].length; col++) { 
       panel.add(jbut[row][col]); 
      } 
     } 
     getContentPane().add(panel, BorderLayout.CENTER); 
    } 

    public static void main(String[] args) { 
     GUICustombuttonstwodimarray g = new GUICustombuttonstwodimarray(title); 
    } 
} 
+0

Проверьте https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html, особенно GridBagLayout, возможно, будет интересно. – LordAnomander

+0

[Как использовать таблицы] (http://docs.oracle.com/javase/tutorial/uiswing/components/table.html) – MadProgrammer

+0

В этой статье с учебными пособиями приведен пример, который очень похож на то, что вы пытаетесь достичь: http://www.tutorialspoint.com/awt/awt_gridlayout.htm –

ответ

2

Там может быть несколько способов достижения, но самый простой может быть просто просто использовать GridBagLayout, например

GridBagLayout

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import static javax.swing.JFrame.EXIT_ON_CLOSE; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class GUICustombuttonstwodimarray extends JPanel { 

    static final String TITLE = "Custom Buttons"; 
    int row, col; 

    JButton[][] jbut = {{new JButton("0"), new JButton("1"), new JButton("2")}, 
    {new JButton("3"), new JButton("4"), new JButton("5"), new JButton("6"), new JButton("7")}, 
    {new JButton("8"), new JButton("9")}, {new JButton("10")} 

    }; 

    public GUICustombuttonstwodimarray() { 

     setLayout(new GridBagLayout()); 
     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.gridx = 0; 
     gbc.gridy = 0; 

     for (row = 0; row < jbut.length; row++) { 
      for (col = 0; col < jbut[row].length; col++) { 
       add(jbut[row][col], gbc); 

       gbc.gridx++; 
       if (gbc.gridy == 0 && gbc.gridx >= 3) { 
        gbc.gridy++; 
        gbc.gridx = 0; 
       } else if (gbc.gridy == 1 && gbc.gridx >= 5) { 
        gbc.gridy++; 
        gbc.gridx = 0; 
       } 

      } 

     } 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame(TITLE); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new GUICustombuttonstwodimarray()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(200, 200); 
     } 

     protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      Graphics2D g2d = (Graphics2D) g.create(); 
      g2d.dispose(); 
     } 

    } 
} 

Взгляните на How to Use GridLayout для получения более подробной информации

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