Получение ширины и высоты для JLabel

229
11 апреля 2017, 09:07

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

public class MainProc extends JFrame
{
    MainProc()
    {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        System.out.print("Height: " + this.getHeight() + " Width: " + this.getWidth());
        Area gArea = new Area();
        Dimension dim = new Dimension(this.getHeight() - 10, this.getWidth() - 10);
        gArea.setPreferredSize(dim);
        add(gArea);
        setLayout(new FlowLayout());
        setVisible(true);
    }
    public static void main(String Args[])
    {
        new MainProc();
    }
}

class Area extends JLabel
{
    Area()
    {
        setBorder(BorderFactory.createLineBorder(Color.BLACK));
    }
}
Answer 1

Вот это решение немного проще и более гибкое

public class MainProc extends JFrame {
    MainProc() {
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        BorderLayout layout = new BorderLayout();
        setLayout(layout);
        JPanel panel = new JPanel();
        panel.setBorder(
                new CompoundBorder(
                        new EmptyBorder(10,10,10,10),
                        new LineBorder(Color.black, 1)
                )
        );
        add(panel, BorderLayout.CENTER);
        // остальные компоненты добавляйте в panel
        setVisible(true);
    }
    public static void main(String Args[]) {
        new MainProc();
    }
}
Answer 2

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

public class MainProc extends JFrame
{
    MainProc()
    {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        System.out.print("Height: " + this.getHeight() + " Width: " + this.getWidth());
        Area gArea = new Area();
        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
        dim.height -= 30;
        dim.width -= 10;
        gArea.setPreferredSize(dim);
        add(gArea);
        setLayout(new FlowLayout());
        setVisible(true);
    }
    public static void main(String Args[])
    {
        new MainProc();
    }
}

class Area extends JLabel
{
    Area()
    {
        setBorder(BorderFactory.createLineBorder(Color.BLACK));
    }
}
READ ALSO
Установка фокуса на EditText. requestFocus не работает

Установка фокуса на EditText. requestFocus не работает

В xml у editText есть эти 2 атрибута:

318
Выполение 1 000 000 мелких заданий. Java

Выполение 1 000 000 мелких заданий. Java

Необходимо распределить работу на n часовВыполнять работу необходимо пачками

203
Вопрос про значение переменной в цикле

Вопрос про значение переменной в цикле

Есть кодНа выводе получается последовательное возведение 2 в степень (10 раз)

203
Cвернуть лист объектов с подсчетом поторений используя stream()

Cвернуть лист объектов с подсчетом поторений используя stream()

В поисках элегантного решения задался вопросом: Каа преобразовать список объектов в массив с подсчетом количества повторенийТ

174