重新创建GUI详情

来源:爱站网时间:2023-01-12编辑:网友分享
爱站技术频道小编今天来教一教大家重新创建GUI的详细内容,如果你需要学习了解,不妨看看这篇文章,里面提供了很多实用的知识知识点,希望对你日后进行这方面的操作有帮助。

问题描述


在该程序中,所有内容都会编译,看起来好像我添加了所有按钮面板和文本字段,但是当我运行该程序时,主面板显示出来而没有任何添加的对象。关闭弹出窗口正确显示。下面是GUI类。我曾尝试将组件公开,但它没有任何改变。子面板应据此正常工作。但是,也许有一双新鲜的眼睛可以帮助我看到我所缺少的东西。

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 unsortedList = new BinarySearchTree();
      if (integerB.isSelected()) {
        sortedList.setText(unsortedList.inOrderSort(unsortedList.root));
      }
      else {
               sortedList.setText(unsortedList.desOrderSort(unsortedList.root));
      }
    });
  }
}
}

思路:


不要公开组件,因为这违反了OOP原则,并且增加了代码错误的风险(增加了“耦合”和复杂性)

您当前在添加所有组件之前将GUI设置为可见,这可能会导致问题,因为在显示JFrame后,GUI可能无法显示添加到JFrame的组件。最好先添加所有内容,然后then将GUI设置为可见。

其他不相关的问题:

  • 您使用的是空布局,setBounds使得调试和增强GUI的难度大,在其他平台上看起来很差的GUI。
  • 您正在将GUI调整为创建和显示JFrame,这通常可以将您绘制在角落,并且通常可以通过创建JPanels来实现更好的灵活GUI创建,然后将其放置到JFrames或JDialogs,其他JPanels或JTabbedPanes中,或在需要时通过CardLayouts交换。同样,这将大大增加您的GUI编码的灵活性

最好还是以更合乎逻辑的方式重新创建GUI。

相信朋友们了解完重新创建GUI详情后,对这个方面的知识点都有了大概的了解,本平台提供了比较多不同类型的技术文章,对新手朋友具有很好的学习价值,一定要多看看。

上一篇:java中使用redis的实例介绍

下一篇:Java编程中用户输入数组的方法

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载