Макеты. Установка высоты компонентов. Сокращение расстояний и обозначение границ - Java

Узнай цену своей работы

Формулировка задачи:

ВОПРОСЫ ПО ИНТЕРФЕЙСУ! НЕ АЛГОРИТМУ! А то, наверное, всех уже осточертели вопросы про решение СЛАУ Пишу программу для решения СЛАУ с произвольным количеством уравнений/переменных. Разделил фрейм на 3 панели. Как обозначить границы между панелями? Что-то вроде того, что на 3м скрине. Ещё хотел спросить, как сократить дистанцию между компонентами, а то расстояния огромные. И все TextField должны быть в одну строку, а крайний правый - квадрат, да и кнопка огромная. Макеты: Фрейм - BorderLayout Первая (верхняя) панель [NORTH] - FlowLayout Вторая (левая) панель [CENTER] - GridBagLayout Третья (правая) панель [EAST] - BoxLayout Весь код в одном файле. Есть консольная версия программы, но нужен интерфейс (требовал преподаватель). Вопросов по алгоритму нет. Только с интерфейсом. С Java знаком пару недель. Ибо я не планировал пока учить этот язык (пока еще C# не закончил), а универ это отдельная история. Но вот задачку задали.
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class Main extends JFrame{
    public static void main(String[] args){
        JFrame frame = new JFrame();
        frame.setSize(1000, 500);
        frame.setLocation(100, 100);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
 
        JPanel CountPanel = new JPanel();
        JPanel EquationPanel = new JPanel();
        JPanel SubmitPanel = new JPanel();
 
        BorderLayout frameLayout = new BorderLayout();
        frame.setLayout(frameLayout);
        frame.add(CountPanel, BorderLayout.NORTH);
        frame.add(EquationPanel, BorderLayout.CENTER);
        frame.add(SubmitPanel, BorderLayout.EAST);
 
        CountPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
        Label countXLabel = new Label("Введите кол-во переменных:");
        Label countEqLabel = new Label("Введите кол-во уравнений");
        TextField countXTField = new TextField();    // x[n]    | n столбцов
        TextField countEqTField = new TextField();   // a[m][n] | m строк
        Button countOkButton = new Button("ОК");
        CountPanel.add(countXLabel, LEFT_ALIGNMENT);
        CountPanel.add(countXTField, LEFT_ALIGNMENT);
        CountPanel.add(countEqLabel, LEFT_ALIGNMENT);
        CountPanel.add(countEqTField, LEFT_ALIGNMENT);
        CountPanel.add(countOkButton, LEFT_ALIGNMENT);
        CountPanel.revalidate();
 
        //EquationPanel.setLayout(new GridLayout(m, 2*n+1));
        GridBagLayout eqLayout = new GridBagLayout();
        GridBagConstraints eqLayoutParam = new GridBagConstraints();
        EquationPanel.setLayout(eqLayout);
 
        eqLayoutParam.gridwidth = 1; eqLayoutParam.gridheight = 1;
        eqLayoutParam.fill = GridBagConstraints.NONE;
        eqLayoutParam.anchor = GridBagConstraints.WEST;
        eqLayoutParam.weightx = 0.01; eqLayoutParam.weighty = 0.01;
 
        countOkButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                int m = Integer.parseInt(countEqTField.getText());
                int n = Integer.parseInt(countXTField.getText());
 
                TextField[][] coefTFields = new TextField[m][n+1];
                Label[][] variableLabels = new Label[m][n];
                EquationPanel.removeAll();
                for(int i = 0; i < m; i++){
                    for(int j = 0, k = 0; j < n; j++, k += 2){
                        char sign = '+';
                        if (j == n-1){sign = '=';}
 
                        coefTFields[i][j] = new TextField();
                        variableLabels[i][j] = new Label("X[" + (j+1) + "]" + sign);
 
                        eqLayoutParam.gridx = k; eqLayoutParam.gridy = i;
                        eqLayout.setConstraints(coefTFields[i][j], eqLayoutParam);
 
                        eqLayoutParam.gridx = k+1; eqLayoutParam.gridy = i;
                        eqLayout.setConstraints(variableLabels[i][j], eqLayoutParam);
 
                        EquationPanel.add(coefTFields[i][j]);
                        EquationPanel.add(variableLabels[i][j]);
                    }
                    coefTFields[i][n] = new TextField();
                    eqLayoutParam.gridx = 2*n; eqLayoutParam.gridy = i;
                    eqLayout.setConstraints(coefTFields[i][n], eqLayoutParam);
                    EquationPanel.add(coefTFields[i][n]);
                }
                EquationPanel.revalidate();
            }
        });
 
        SubmitPanel.setLayout(new BoxLayout(SubmitPanel, BoxLayout.Y_AXIS));
        Label customSolLabel = new Label("Введдите частное решение:"); customSolLabel.setSize(20, 100);
        TextField customSolTField = new TextField();
        Button submitButton = new Button("Решить!");
 
        SubmitPanel.add(customSolLabel);
        SubmitPanel.add(customSolTField);
        SubmitPanel.add(submitButton);
    }
}

Решение задачи: «Макеты. Установка высоты компонентов. Сокращение расстояний и обозначение границ»

textual
Листинг программы
//Без этой строчки всё компактно, но центрирование по центру панели. Видимо, придется так и оставить =(
eqLayoutParam.weightx = 0.01; eqLayoutParam.weighty = 0.01;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.929 из 5
Похожие ответы