Панели апплета, один фиксированный размер и динамический JTextField - PullRequest
1 голос
/ 25 мая 2010

Мне нужен апплет, который содержит одну панель. Размер панели должен быть 550x400 пикселей, JTextField должен соответствовать динамическому размеру панели. Я хочу, чтобы это было так: [TopPanel] [TextPanel]

Однако я пытаюсь это сделать, и кажется, что панель заполняет все пространство. Код:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JApplet;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Client extends JApplet
{

@Override
public void init()
{
    try {
        java.awt.EventQueue.invokeAndWait(new Runnable()
            {

            public void run()
            {
                initComponents();
            }
            });
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

private void initComponents()
{
    JPanel topPanel = new javax.swing.JPanel();

    topPanel.setBackground(Color.red);

    topPanel.setSize(550, 400);
    topPanel.setPreferredSize(new Dimension(550, 400));
    topPanel.setMinimumSize(new Dimension(550, 400));
    topPanel.setMaximumSize(new Dimension(550, 400));

    JTextField myTextBox = new JTextField(255);

    getContentPane().add(topPanel, java.awt.BorderLayout.NORTH);
    getContentPane().add(myTextBox, java.awt.BorderLayout.SOUTH);
}
// TODO overwrite start(), stop() and destroy() methods
}

Спасибо!

Ответы [ 2 ]

1 голос
/ 25 мая 2010

Компоненты, казалось, находились в правильных положениях, когда я тестировал приведенный выше код. Единственное, что я заметил, было то, что начальный размер порта просмотра был меньше, чем 550x400. Это вызвало некоторые артефакты при отображении JTextField, поскольку размер JPanel неизменно составляет 550x400.

0 голосов
/ 25 мая 2010

JPanel кажется правильным (используя setPreferredSize, добавляя к NORTH) при условии, что ваш апплет имеет ширину 550 и высоту не менее 400 . Я мог бы попытаться переместить текстовое поле в CENTER вместо SOUTH из-за того, как BorderLayout растягивает его компоненты. Согласно Javadocs:

Компоненты расположены в соответствии с их предпочтительными размерами и ограничениями размера контейнера. СЕВЕРНЫЕ и ЮЖНЫЕ компоненты могут быть растянуты горизонтально; компоненты EAST и WEST могут быть вытянуты вертикально; компонент CENTER может растягиваться как по горизонтали, так и по вертикали, чтобы заполнить любое оставшееся пространство.

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

...