Расположение таблицы корректировки внутренностей компонентовJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Расположение таблицы корректировки внутренностей компонентов

Сообщение Anonymous »

Я хочу одновременно отображать и настраивать несколько объектов одного класса, сохраняя при этом внешний вид таблицы. Итак: одна строка на каждую сущность, с несколькими элементами графического интерфейса в каждой строке для конфигурации каждой сущности.
Обычно для этого можно использовать JTable. Или GridBagLayout, если все элементы управления находились в одном родительском контейнере.
Но если логика для каждого объекта более сложна и требует дополнительной логики (проверки и переменные), кажется, лучше использовать пользовательскую панель для каждого объекта (например, класс, расширяющий JPanel с компонентами для каждой переменной-члена).
Но при использовании LayoutManager внутри этой пользовательской панели, например BorderLayout, BoxLayout и т. д. размеры компонентов внутри панели могут отличаться от размеров в следующей строке.
Вот пример SSCC того, как я хочу его использовать и как он должен выглядеть на самом деле:

Код: Выделить всё

package stackoverflow;

import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class ComponentTableLayoutTest {

static public final int TEXT_FIELD_COLS = 30;

static class MyPanel extends JPanel {
private static final long   serialVersionUID    = 7290890689192066726L;
public final JLabel         label;
public final JTextField     text                = new JTextField(TEXT_FIELD_COLS);
// more elements, complex logic

public MyPanel(final String pLabel) {
label = new JLabel(pLabel);

setLayout(new BorderLayout());
add(label, BorderLayout.WEST);
add(text, BorderLayout.CENTER);
}
}

public static void main(final String...  args) {
showInterestingFrame();
showPerfectFrame();
}

private static void showInterestingFrame() { // how I want to use it
final JFrame f = new JFrame();
f.setTitle("component wise table layout test - how it should work");
f.setLayout(new BoxLayout(f.getContentPane(), BoxLayout.Y_AXIS));

final MyPanel panel1 = new MyPanel("short: ");
final MyPanel panel2 = new MyPanel("mediummmm: ");
final MyPanel panel3 = new MyPanel("veryverylonglonglong: ");

f.add(panel1);
f.add(panel2);
f.add(panel3);

f.setVisible(true);
f.pack();
f.setLocation(200, 200);
}

private static void showPerfectFrame() { // what it should look like
final JFrame f = new JFrame();
f.setTitle("classic GBL - how it should look");
f.setLayout(new GridBagLayout());

final GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.WEST;

f.add(new JLabel("short: "), gbc);
f.add(new JTextField(TEXT_FIELD_COLS), gbc);

gbc.gridy = 1;
f.add(new JLabel("mediummmm: "), gbc);
f.add(new JTextField(TEXT_FIELD_COLS), gbc);

gbc.gridy = 2;
f.add(new JLabel("veryverylonglonglong: "), gbc);
f.add(new JTextField(TEXT_FIELD_COLS), gbc);

f.setVisible(true);
f.pack();
f.setLocation(200, 300);
}

}
Итак, как лучше всего использовать методологию showInterestingFrame(), сохраняя при этом внешний вид showPerfectFrame()?
Другими словами: сохраняйте способность GridBagLayout (или любого другого LayoutManager) корректировать пространственные требования, сохраняя при этом внешний вид макета таблицы для всех подкомпонентов.
И если я пришлось напрямую вмешиваться в макетирование, если бы я проверил/настроил все getPreferredSize() для каждого вертикального компонента, как лучше всего было бы подключиться к макету Swing? doLayout? validate()?
Дополнительные аспекты:
  • Я хочу избежать использования всплывающих диалоговых окон для настройки каждого объекта; Пользователь должен иметь возможность редактировать их одновременно
  • Я считаю, что JTable имеет слишком много недостатков в отношении конкретного отображения/обработки столбцов (поскольку его TableCellRenderer, похоже, выбирается через класс свойства, а не индекс столбца), плюс доступ к ячейке трудно осуществить на уровне сущности.


Подробнее здесь: https://stackoverflow.com/questions/798 ... components
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»