Java 将JTextField添加到JToolBar

Java 将JTextField添加到JToolBar,java,swing,user-interface,jtextfield,jtoolbar,Java,Swing,User Interface,Jtextfield,Jtoolbar,我正在尝试将JTextField添加到JToolBar中,它可以工作,但太长了。我只需要3封信 这是它现在的截图。。。 我尝试了以下方法 JTextField field = new JextField(3); // thought this limits to three characters. 我试着 field.setColumns(3); // this didn't work either. 如果容器为,您可以使用适当的 此问题应通过使用(备选方案)保持一致 如果容器为,您可

我正在尝试将
JTextField
添加到
JToolBar
中,它可以工作,但太长了。我只需要3封信

这是它现在的截图。。。

我尝试了以下方法

JTextField field = new JextField(3); // thought this limits to three characters.
我试着

field.setColumns(3); // this didn't work either.
  • 如果容器为,您可以使用适当的

  • 此问题应通过使用(备选方案)保持一致

      • 如果容器为,您可以使用适当的

      • 此问题应通过使用(备选方案)保持一致


      工具栏的默认布局符合为文本字段设置的最大大小

      import java.awt.*;
      import javax.swing.*;
      
      public class TextFieldInToolBar {
      
          TextFieldInToolBar() {
              JPanel p = new JPanel(new BorderLayout());
      
              JToolBar tb = new JToolBar();
              p.add(tb, BorderLayout.PAGE_START);
      
              Icon disk = (Icon)UIManager.get("FileView.floppyDriveIcon"); 
              Icon pc = (Icon)UIManager.get("FileView.computerIcon"); 
              tb.add(new JButton(disk));
              JTextField tf = new JTextField(3);
              tf.setMaximumSize(tf.getPreferredSize());
              tb.add(tf);
              tb.addSeparator();
              tb.add(new JButton(pc));
      
              p.setPreferredSize(new Dimension(250,50));
      
              JOptionPane.showMessageDialog(null, p);
          }
      
          public static void main(String[] args) {
              SwingUtilities.invokeLater(new Runnable() {
                  @Override
                  public void run() {
                      new TextFieldInToolBar();
                  }
              });
          }
      }
      


      工具栏的默认布局符合为文本字段设置的最大大小

      import java.awt.*;
      import javax.swing.*;
      
      public class TextFieldInToolBar {
      
          TextFieldInToolBar() {
              JPanel p = new JPanel(new BorderLayout());
      
              JToolBar tb = new JToolBar();
              p.add(tb, BorderLayout.PAGE_START);
      
              Icon disk = (Icon)UIManager.get("FileView.floppyDriveIcon"); 
              Icon pc = (Icon)UIManager.get("FileView.computerIcon"); 
              tb.add(new JButton(disk));
              JTextField tf = new JTextField(3);
              tf.setMaximumSize(tf.getPreferredSize());
              tb.add(tf);
              tb.addSeparator();
              tb.add(new JButton(pc));
      
              p.setPreferredSize(new Dimension(250,50));
      
              JOptionPane.showMessageDialog(null, p);
          }
      
          public static void main(String[] args) {
              SwingUtilities.invokeLater(new Runnable() {
                  @Override
                  public void run() {
                      new TextFieldInToolBar();
                  }
              });
          }
      }
      


      谢谢,但是有什么解决方案吗,第二个点链接显示没有解决方案。使用JToolBar的优点是可停靠的容器,但这对我来说是一种优势,看起来非常丑陋。你的建议是使用JMenuBar,我已经有一个菜单栏了,这不是一个问题吗?不,你可以将另一个JMenuBar放到JFrame的北部区域(例如)或JPanel,例如,我通过使用GridLayout center JPanel(JTextField和JLabel)左右放置三个JPanel(setOpaque(false))解决了类似问题通过BorderLayout,谢谢,但是有什么解决方案吗,第二个点链接表明没有解决方案。使用JToolBar的优点是可停靠的容器,但这对我来说是一种优势,看起来非常丑陋。所以你的建议是使用JMenuBar,我已经有一个菜单栏了,这不是一个问题吗?不,你可以将另一个JMenuBar放置到北区o JFrame(例如)或JPanel(例如,我通过使用GridLayout center JPanel(JTextField和JLabel)通过BorderLayout左右放置三个JPanel(set不透明(false))解决了类似问题,“今天没有投票”我也是!但为什么要麻烦JToolBar为什么不呢?我很无聊,想看看它是否可以像设置最大尺寸一样简单。;)无意冒犯,但我发现高度方向存在问题,为什么不直接使用FlowLayout/BoxLayout哇,这太棒了。它比以前更干净了。我支持罢工,(说服John和nice animal)两周不在Swing标记的帖子中进行投票,这将是另一个笑话Hehehehehehif如果您希望最大大小始终与首选大小相同,您应该扩展JTextField并覆盖getMaximumSize()。如果不这样做,Swing会认为您正在显式设置最大大小,即使首选大小稍后更改,也不会更新最大大小以匹配。另一种方法是在其他组件的updateUI()方法中处理它。“今天不投票”我也是!“但是为什么要麻烦JToolBar呢”为什么不呢?我很无聊&想看看是否可以像设置最大尺寸那样简单。;)无意冒犯,但我发现高度方向有问题,为什么不直接使用FlowLayout/BoxLayout哇,这太棒了。它比以前更干净了。我支持罢工,(说服John和nice animal)两周不在Swing标记的帖子中进行投票,这将是另一个笑话Hehehehehehif如果您希望最大大小始终与首选大小相同,您应该扩展JTextField并覆盖getMaximumSize()。如果不这样做,Swing会认为您正在显式设置最大大小,即使首选大小稍后更改,也不会更新最大大小以匹配。另一种方法是在其他组件的updateUI()方法中处理它在Nimbus L&F上,您会得到相反的行为-文本字段始终是首选大小,很难使其变宽。有趣的:)在Nimbus L&F上,你会得到相反的行为-文本字段总是首选大小,很难使其变宽。