2013-03-08 2 views
1

Я новичок в свинг, и я хочу, чтобы создать таблицу, имеющую такую ​​форму:JTable расщепляющие ячейки. Как

enter image description here

Так как разбить ячейку, как видно из таблицы? У вас есть полезные ссылки или учебники или идеи?

+4

* «У вас какие-либо полезные ссылки или учебники или идея?» * Моя идея «использовать таблицы для табличных данных» только , Поскольку это явно не «табличные данные», используйте другой компонент или группу компонентов. Как в стороне, это значит представлять карточку с оценками для боулинга с 10 булавками? –

+2

Взгляните на [эти примеры] (http://www.crionics.com/public/swing_examples/JTableExamples4.html) – MadProgrammer

+0

@MadProgrammer это очень полезно, спасибо – AmiraGL

ответ

4

Это выглядит как карточная карта для боулинга. Исходя из этого предположения, количество столбцов фиксировано, а количество записей составляет 6 или меньше. Поскольку вам, скорее всего, не понадобится прокрутка, я бы рекомендовал фиксированную сетку компонентов вместо JTable.

Это может быть легко осуществлено с использованием GridBagLayout. Для имени я бы использовал JTextArea. Для двух очков для каждого кадра я бы использовал JTextFields. Для нижнего компонента с двумя столбцами, который содержит оценку фрейма, я бы, вероятно, использовал JLabel.

Поместите все это на JPanel и заново создайте панель для каждого котелка.

EDIT: Вот быстрый макет, чтобы показать концепцию. Не обязательно визуально красиво, но я оставлю это в качестве упражнения для читателя:

import java.awt.*; 
import java.awt.event.*; 

import javax.swing.*; 

public class BowlingScoreCard implements Runnable 
{ 
    public static void main(String[] args) 
    { 
    SwingUtilities.invokeLater(new BowlingScoreCard()); 
    } 

    public void run() 
    { 
    JFrame frame = new JFrame("Demo"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().add(createScorecard(4), BorderLayout.CENTER); 
    frame.pack(); 
    frame.setVisible(true); 
    } 

    private JPanel createScorecard(int numPlayers) 
    { 
    JPanel p = new JPanel(new GridBagLayout()); 

    p.add(new JLabel("Player"), gbc(0, 0, 1, 1)); 
    for (int x = 1; x <= 10; x++) 
    { 
     p.add(new JLabel(Integer.toString(x)), gbc(x, 0, 1, 1)); 
    } 

    for (int y = 1; y <= numPlayers; y++) 
    { 
     JTextArea textArea = new JTextArea(2, 10); 
     p.add(textArea, gbc(0, y, 1, 1)); 

     for (int i = 1; i <= 9; i++) 
     { 
     p.add(createFrame(2), gbc(i, y, 1, 1)); 
     } 

     p.add(createFrame(3), gbc(10, y, 1, 1)); 
    } 

    return p; 
    } 

    private JPanel createFrame(int entries) 
    { 
    JLabel label = new JLabel(" "); 
    label.setBackground(Color.GRAY); 

    JPanel p = new JPanel(new GridBagLayout()); 
    p.setBorder(BorderFactory.createLineBorder(Color.GRAY, 1)); 
    for (int i = 0; i < entries; i++) 
    { 
     p.add(new JTextField(3), gbc(i, 0, 1, 1)); 
    } 
    p.add(label, gbc(0, 1, 2, 1)); 
    return p; 
    } 

    private GridBagConstraints gbc(int x, int y, int colspan, int rowspan) 
    { 
    GridBagConstraints gbc = new GridBagConstraints(); 
    gbc.gridx = x; 
    gbc.gridy = y; 
    gbc.gridwidth = colspan; 
    gbc.gridheight = rowspan; 
    gbc.weightx = 0; 
    gbc.weighty = 0; 
    gbc.anchor = GridBagConstraints.CENTER; 
    gbc.fill = GridBagConstraints.NONE; 
    return gbc; 
    } 
} 
Смежные вопросы