java - Swing 组件在离开键盘焦点时自行调整大小

标签 java swing

我的图形用户界面布局有两个问题。 我正在使用 JTabbedPane 来容纳两个 JPanel,每个面板都有一个按钮和文本区域的选择,并且每个面板都使用 GridBagLayout 进行布局。 在我的一个面板中,我有一个使用 JTextArea 的 JScrollPane。当我将任何内容附加到此文本区域然后单击 gui 使其不再具有焦点时,或者如果我更改选项卡,所有文本字段和文本的大小都会更改为尽可能小。

为了进一步说明我的问题,以下是我在附加到文本区域后单击关闭 gui 前后的图片: Before I click off the gui

After I click off the gui

这是我用来将 JTextArea 添加到面板的代码:

table = new JTextArea();
    table.setEditable(false);
    JScrollPane sp = new JScrollPane(table);
    sp.setSize(40, 10);
    c.insets = new Insets(10,10,10,10);
    c.gridx = 1;
    c.gridwidth = 4;
    c.gridy = 7;
    c.gridheight = 7;
    this.add(sp, c);

这是我用来将文本区域添加到面板的代码:

title = new JTextField(10);
    author = new JTextField(10);
    dueDate = new JTextField(10);
    setDate = new JTextField(10);
    setWeighting = new JTextField(10);

    c.gridx = 2;
    c.gridy = 1;
    this.add(title, c);//add title field
    c.gridx = 2;
    c.gridy = 2;
    this.add(author, c);//add author field
    c.gridx = 2;
    c.gridy = 3;
    this.add(dueDate, c);//add dueDate field
    c.gridx = 2;
    c.gridy = 4;
    this.add(setDate, c);//add setDate field
    c.gridx = 2;
    c.gridy = 5;
    this.add(setWeighting, c);//add set Weighting field

最佳答案

我能够像这样部分重现您的问题:

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

public class Foo002 {

   private static final int ROWS = 5;

   private static void createAndShowGui() {
      JPanel assignmentsPanel = new JPanel(new GridBagLayout());
      final JTextArea textarea = new JTextArea(ROWS, 20);

      GridBagConstraints c = new GridBagConstraints();
      int insetGap = 2;
      c.insets = new Insets(insetGap, insetGap, insetGap, insetGap);
      c.fill = GridBagConstraints.HORIZONTAL;
      c.gridwidth = 1;
      c.gridheight = 1;
      c.weightx = 1.0;
      c.weighty = 1.0;
      String[] labels = { "title", "author", "date due", "date set",
            "set weighting" };
      int row = 0;
      for (int i = 0; i < labels.length; i++) {
         JLabel label = new JLabel(labels[i], SwingConstants.CENTER);
         c.gridx = 0;
         c.gridy = i;
         assignmentsPanel.add(label, c);
         c.gridx = 1;
         JTextField textfield = new JTextField(10);
         assignmentsPanel.add(textfield, c);

         label.setPreferredSize(textfield.getPreferredSize());
         row++;
      }
      c.gridx = 0;
      c.gridy = row;
      c.fill = GridBagConstraints.HORIZONTAL;
      Action myAction = new AbstractAction("Fill Area") {

         @Override
         public void actionPerformed(ActionEvent arg0) {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < 10; i++) {
               sb.append("foo bar bif baz spam\n");
            }
            textarea.setText(sb.toString());
         }
      };
      assignmentsPanel.add(new JButton(myAction), c);
      c.gridx = 1;
      assignmentsPanel.add(new JButton("Button 2"), c);
      row++;

      c.gridx = 0;
      c.gridy = row;
      c.gridwidth = 2;
      c.gridheight = ROWS;

      JScrollPane scrollpane = new JScrollPane(textarea);

      assignmentsPanel.add(scrollpane, c);

      JTabbedPane tabbedPanel = new JTabbedPane();
      tabbedPanel.add("Assignments", assignmentsPanel);
      tabbedPanel.add("Modules", new JPanel());

      JOptionPane.showMessageDialog(null, tabbedPanel, "Foo",
            JOptionPane.PLAIN_MESSAGE);

   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}

将文本添加到 JTextArea 之前和之后,它看起来像:
enter image description here enter image description here

点击标签后:
enter image description here

但它可以通过给 JScrollPane 一个垂直滚动条来修复:

  // JScrollPane scrollpane = new JScrollPane(textarea);
  JScrollPane scrollpane = new JScrollPane(textarea,
        JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
        JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

运行时的样子:
enter image description here

在 Mac OS 上看起来也不错:

enter image description here

关于java - Swing 组件在离开键盘焦点时自行调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10064284/

相关文章:

java - 如何设置JButton的背景?

Java VisualVM 无​​法连接到 Jboss

java - Swing 加速器

java - 如何从 JFrame Java 中的用户输入绘制字符串

java - 无法从 JSoup 中提取资源

java - 根据 4 个 JRadioButton 的组合执行操作

java - 如何在 Swing Java GUI 应用程序中单击按钮时保持按下状态

java - 为什么我用这个程序得到非法的开始类型?我刚刚开始,但不知道哪里出错了

java - GUI 银行帐户 Java

Java:无限循环