【问题标题】:Java GUI Automatically ResizingJava GUI 自动调整大小
【发布时间】:2012-07-18 23:59:35
【问题描述】:

这里是绘制 GUI 的地方(注意,该类扩展了 JFrame)。

public Cache() {
    SubstanceColorChooserUI col = new SubstanceColorChooserUI();
    while (mode == 0);
    setResizable(false);
    setTitle("Cache");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 483, 374);
    setLocationRelativeTo(null);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(new BorderLayout());

    textField = new JTextField();
    textField.setBounds(10, 11, 328, 20);
    contentPane.add(textField);
    textField.setColumns(10);

    JButton btnLoadCache = new JButton("Load cache");
    btnLoadCache.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            try {
                String loc = textField.getText();
                if (loc.equals("")) {
                    JOptionPane.showMessageDialog(Cache.this, "Please specify a location for the cache.", "Unable to load", JOptionPane.ERROR_MESSAGE);
                    return;
                }
                if (!loc.endsWith("\\"))
                    loc = loc + "\\";
                cache = new Store(loc);
                loadImages();
            } catch (Exception e) {
                JOptionPane.showMessageDialog(Cache.this, "Cache failed to initialize.\n" + e.getMessage(), "Unable to load", JOptionPane.ERROR_MESSAGE);
            }
        }
    });
    btnLoadCache.setBounds(351, 9, 112, 23);
    contentPane.add(btnLoadCache);

    JSplitPane splitPane = new JSplitPane();
    splitPane.setDividerLocation(150);
    splitPane.setContinuousLayout(true);
    splitPane.setBounds(10, 44, 453, 279);
    contentPane.add(splitPane);

    JPanel panellie = new JPanel();
    panellie.setLayout(new BorderLayout(0, 0));
    panel = new ImagePanel(null);

    scrollPane_1 = new JScrollPane();
    panellie.add(scrollPane_1, "Center");

    scrollPane_1.setViewportView(panel);
    splitPane.setRightComponent(panellie);

    JPanel panel_1 = new JPanel();
    splitPane.setLeftComponent(panel_1);
    panel_1.setLayout(new BorderLayout(0, 0));

    JScrollPane scrollPane = new JScrollPane();
    panel_1.add(scrollPane, BorderLayout.CENTER);

    model = new DefaultListModel<ListedImage>();
    list = new JList<ListedImage>(model);
    list.addListSelectionListener(new ListSelectionListener() {
        public void valueChanged(ListSelectionEvent arg0) {
            if (arg0.getValueIsAdjusting())
                return;
            ListedImage img = list.getModel().getElementAt(list.getSelectedIndex());
            panel.setImage(img.getImage());
        }
    });
    scrollPane.setViewportView(list);

    progressBar = new JProgressBar();
    progressBar.setStringPainted(true);
    progressBar.setDoubleBuffered(true);
    progressBar.setBounds(10, 328, 453, 14);
    contentPane.add(progressBar);

}

当我 setResizeable 为 true 并开始拖动程序变得越来越小时,我将如何做到这一点,我该如何做到这一点,以便框架内的组件(按钮、标签等)在整个过程中调整大小框架正在调整大小

【问题讨论】:

  • 您是否厌倦了将控件锚定到 JFrame 上?

标签: java swing user-interface resize


【解决方案1】:

使用布局管理器而不是为每个组件设置边界。

您希望组件移动的方式因程序而异。

看看this,看看哪种布局最适合你。

【讨论】:

  • 问题是,我喜欢我的组件在一个确切的位置。我真的不喜欢使用一般地点。
  • 如果您使用绝对定位,您将无法在框架更改时轻松更改组件大小。唯一的其他选择是使所有边界都依赖于框架。这是一种痛苦,我会强烈建议不要这样做。从长远来看,LayoutManagers 是一个更好的选择,它会让你的软件看起来更专业。
【解决方案2】:

1.您可以使用setSize() 方法来设置您的JFrame 大小

2.您可以通过设置isResizable(false)来选择固定JFrame的大小

3. 使用 GroupLayout,由 NetBeans 团队于 2005 年开发立即免费试用 Google 提供的 Windows Builder Pro。在这里你可以选择GroupLayout,然后将你的组件拖放到JFrame中,即使你愿意也可以手动编辑GUI代码。

【讨论】:

  • 我正在使用 Eclipse 的窗口构建器插件
猜你喜欢
  • 1970-01-01
  • 2021-02-05
  • 1970-01-01
  • 2018-04-10
  • 2011-01-03
  • 2011-04-20
  • 2014-11-05
  • 2014-12-28
  • 2021-11-25
相关资源
最近更新 更多