GUI не отображает кнопки - PullRequest
0 голосов
/ 23 февраля 2020

В этой программе все компилируется и похоже, что я добавил все панели кнопок и текстовые поля, но когда я запускаю программу, главная панель отображается без каких-либо добавленных объектов. Всплывающий экран выключения отображается правильно. Ниже приведен класс GUI. Я попытался сделать компоненты опубликованы c, и это ничего не изменило. Подпанель должна работать должным образом в соответствии с этим. Однако, может быть, пара глаз sh поможет мне увидеть то, чего мне не хватает.

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

public class BinarySearchTreeGUI {
private JFrame mainF;
private JPanel bstMain;
private JPanel sortOrder;
private JPanel numType;

JRadioButton ascendingB = new JRadioButton("Ascending");
JRadioButton descendingB = new JRadioButton("Descending");
JRadioButton integerB = new JRadioButton("Integer");
JRadioButton fractionB = new JRadioButton("Fraction");

private JButton button;
public JTextField unsortedList, sortedList;
private JLabel l1, l2;

@SuppressWarnings("OverridableMethodCallInConstructor")

BinarySearchTreeGUI() {
launchApp();
}

private void launchApp() {
createNewComponents();
setDisplayFrame();
setComponents();
setComponentsEditableVisible();
addComponents();
onShutDownRequest();
}

private ButtonAction buttonActionOnClick() {
return new ButtonAction(unsortedList);
}

private void addComponents() {
mainF.add(bstMain);
bstMain.add(button);
bstMain.add(l1);
bstMain.add(l2);
bstMain.add(sortedList);
bstMain.add(unsortedList);
buttonActionOnClick();
}

private void setComponentsEditableVisible() {
sortedList.setEditable(false);
mainF.setVisible(true);
}

private void setComponents() {
bstMain.setLayout(null);
button.setBounds(180, 160, 120, 30);
l1.setBounds(50, 15, 200, 25);
l2.setBounds(55, 90, 200, 25);
sortedList.setBounds(120, 90, 280, 25);
unsortedList.setBounds(120, 15, 280, 25);
setSubPanels();
}

private void createNewComponents() {
mainF = new JFrame("Binary Search Tree Sort");
bstMain = new JPanel();
button = new JButton("Perform Sort");
l1 = new JLabel("Original List");
l2 = new JLabel("Sorted List");
unsortedList = new JTextField();
sortedList = new JTextField();
sortOrder = new JPanel();
numType = new JPanel();
}

private void setDisplayFrame() {
mainF.setSize(550, 350);
mainF.setResizable(false);
mainF.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
}

private void onShutDownRequest() {
  mainF.addWindowListener(new WindowAdapter() {
    @Override
    public void windowClosing(WindowEvent e) {
      int reply;
      reply = JOptionPane.showConfirmDialog(mainF, "Would you like  to Shutdown this Program", "Shutdown Request",  JOptionPane.YES_NO_OPTION);
      if (reply == JOptionPane.YES_OPTION) {
        System.exit(0);
      }
    }
  });
}

private void setSubPanels() {
  createPanelSubPanel(5, "Sort Order", sortOrder, ascendingB, descendingB);
  createPanelSubPanel(260, "Numeric Type", numType, integerB, fractionB);
}

private void createPanelSubPanel(int location, String title, JPanel panel, JRadioButton ascendingB, JRadioButton descendingB) {
  panel.setLayout(new GridLayout(2, 1));
  panel.setBounds(location, 240, 230, 70);

  TitledBorder title1;
  title1 = BorderFactory.createTitledBorder(title);
  panel.setBorder(title1);

  ascendingB.setSelected(false);
  descendingB.setSelected(true);
  ButtonGroup bg = new ButtonGroup();
  //add buttons
  bg.add(ascendingB);
  bg.add(descendingB);
  panel.add(ascendingB);
  panel.add(descendingB);
  bstMain.add(panel);
}

private class ButtonAction extends BinarySearchTree {
  ButtonAction(JTextField textField) {
    button.addActionListener((ActionEvent event) -> {
      CheckData reviewData = new CheckData();
      BinarySearchTree<String> unsortedList = new BinarySearchTree<>();
      if (integerB.isSelected()) {
        sortedList.setText(unsortedList.inOrderSort(unsortedList.root));
      }
      else {
               sortedList.setText(unsortedList.desOrderSort(unsortedList.root));
      }
    });
  }
}
}

1 Ответ

1 голос
/ 23 февраля 2020

Не делайте компоненты общедоступными c, поскольку это противоречит принципам OOP и увеличивает риск ошибок в вашем коде (увеличивая "сцепление" и сложность)

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

Другие не связанные с этим проблемы:

  • Вы используете нулевые макеты и setBounds что затрудняет отладку и улучшение GUI, GUI, которые могут плохо смотреться на других платформах.
  • Вы настраиваете GUI на создание и отображение JFrame, и это может часто рисовать вас в углу, и часто более гибкое создание GUI достигается созданием JPanels, которые затем могут быть помещены в JFrames или JDialogs, другие JPanels или JTabbedPanes или заменены через CardLayouts, где это необходимо. Опять же, это значительно повысит гибкость вашего GUI кодирования

Еще лучше будет заново выполнить то, как вы создаете GUI более логичным способом.

держись ....

...