Вопрос

Вот код:

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

public class TestGrid {

    public static void main(String[] args) {
        JFrame frame = new JFrame("Colored Trails");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));

        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(4, 9));
        panel.setMaximumSize(new Dimension(9*30-20,4*30));

        JButton btn;
        for (int i=1; i<=4; i++) {
            for (int j=1; j<=4; j++) {
                btn = new JButton();
                btn.setPreferredSize(new Dimension(30, 30));
                panel.add(btn);
            }

            btn = new JButton();
            btn.setPreferredSize(new Dimension(30, 10));
            panel.add(btn);

            for (int j=1; j<=4; j++) {
                btn = new JButton();
                btn.setPreferredSize(new Dimension(30, 30));
                panel.add(btn);
            }

        }
        mainPanel.add(panel);
        frame.add(mainPanel);

        frame.setSize(450,950);
        frame.setVisible(true);
    }
}

Я предполагаю, что есть таблица кнопок с 4 рядами и 9 столбцами. И средняя колонка должна быть более узкой, чтобы другие столбцы. Я старался Dimension(30, 10) а также Dimension(30, 10) Оба не влияют на ширину средней колонны. Почему?

Это было полезно?

Решение

Менеджеры макета могут игнорировать предпочтительный размер. Конкретно, GridLayout всегда будет делать каждую ячейку в сетке точно одинаково (по этой причине это довольно бесполезный менеджер макетов).

Вам придется использовать другой менеджер макетов, например, вложенные BoxLayout или GroupLayout.

Другие советы

Чтобы использовать цвета Host Web, вам понадобится динамически загрузить лист стиля Host Web с помощью некоторого JavaScript.Если вы используете jQuery на странице, вы можете использовать следующий блок JavaScript для введения таблицы стилей Host на вашей странице.

(function () {
    // Retrieve the host web's URL from the query string
    var scriptbase = $.queryString('SPHostUrl') + '/_layouts/15/';

    // Create a <link> tag for the style sheet
    var $doclink = $('link').attr('rel', 'stylesheet');
    // The style sheet is loaded through an ASP.NET HTTP handler (defaultcss.ashx)
    $doclink.attr('href', scriptbase + 'defaultcss.ashx');

    // Add the style sheet link to the 
    $('head').append($doclink);
})();
.

Если это не работает, вы также можете проверить статью Microsoft Как: Используйте лист стиля сайта SharePoint в приложениях для SharePoint для примера, который не требует jQuery.

setPreferredSize Не изменяет размер кнопки, пока размер не будет установлен с помощью размерного.

Пример:-

Dimension dim = new Dimension(20,20), then use setPerferredSize(dim).

Я нашел эту версию метода, которая идеально подходит для вашего решения:

.addComponent(<<a jButton instance>>, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, <<put here an integer to set you max width button size>>)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top