【问题标题】:How to change the font of a string in gui and then change it back again to normal如何在gui中更改字符串的字体,然后再将其改回正常
【发布时间】:2017-08-25 19:28:42
【问题描述】:

世界各地的程序员朋友您好,我目前在我的 GUI 中的一个框架有问题。我设法将我的消息字体更改为斜体,颜色更改为灰色,并且我已将我的文本字段设置为可编辑(真)。问题是当我删除灰色和斜体的字符串并尝试在文本字段中写一些有用的东西时,而不是字符串的纯字体和黑色,它总是出现斜体和灰色。有没有什么办法可以让短信中的字符串改变字体和颜色,然后你写的下一个字符串有正常的字体和黑色?在这一点上将不胜感激任何建议。这是我的代码:

void makeSecondFrame(){
       frame2 = new JFrame("Step one!Vertification!");
       Container contentPane2 = frame2.getContentPane();
       JLabel label2 = new JLabel("Welcome to step 1 of our algorithm, Verification!" + "To varify yourself of owning an account please enter the following:");
       JLabel label3 = new JLabel("First Name:");
       JLabel label4 = new JLabel("Middle Name:");
       JLabel label5 = new JLabel("Surname:");
       JLabel label6 = new JLabel("Account Number:");
       JLabel label7 = new JLabel ("Registration Number:");
       firstName = new TextField("Enter your name here");
       firstName.setForeground(Color.gray);
       firstName.setFont(new java.awt.Font("Arial", Font.ITALIC, 12));
       firstName.setEditable(true);
       middleName = new TextField("Enter your middle name here");
       middleName.setForeground(Color.gray);
       middleName.setFont(new java.awt.Font("Arial", Font.ITALIC, 12));
       middleName.setEditable(true);
       surname = new TextField("Enter your surname here");
       surname.setForeground(Color.gray);
       surname.setFont(new java.awt.Font("Arial", Font.ITALIC, 12));
       surname.setEditable(true);
       accountNumber = new TextField("Enter your main account number");
       accountNumber.setForeground(Color.gray);
       accountNumber.setFont(new java.awt.Font("Arial", Font.ITALIC, 12));
       accountNumber.setEditable(true);
       registrationNumber = new TextField("Enter your registration number");
       registrationNumber.setForeground(Color.gray);
       registrationNumber.setFont(new java.awt.Font("Arail", Font.ITALIC, 12));
       registrationNumber.setEditable(true);
       JPanel p2 = new JPanel(new GridLayout(1,1));
       p2.add(label2);
       contentPane2.add(p2, BorderLayout.NORTH);
       JPanel p3 = new JPanel(new GridLayout(10,1));
       p3.add(label3);
       p3.add(firstName);
       p3.add(label4);
       p3.add(middleName);
       p3.add(label5);
       p3.add(surname);
       p3.add(label7);
       p3.add(registrationNumber);
       p3.add(label6);
       p3.add(accountNumber);
       contentPane2.add(p3, BorderLayout.WEST);
       JButton next = new JButton("Next!");
       next.addActionListener(this);
       JButton cancel = new JButton("Cancel");
       cancel.addActionListener(this);
       JPanel p4 = new JPanel(new GridLayout(1,1));
       p4.add(next);
       p4.add(cancel);
       contentPane2.add(p4, BorderLayout.SOUTH);
       frame2.pack();
       frame2.setVisible(true);
   }

【问题讨论】:

  • 如果你想改变字体,你必须以编程方式改变它,就像你设置它一样。
  • 您显然想要的是“输入帮助信息”。 Swing 不支持这一点,但 JavaFX 支持它。也许你看看这个?

标签: java string user-interface fonts textfield


【解决方案1】:

您需要对 JTextField 执行适当的操作。我能想到的最好的是FocusListener.focusGained()

   firstName = new TextField("Enter your name here");
   firstName.setForeground(Color.gray);
   firstName.setFont(new java.awt.Font("Arial", Font.ITALIC, 12));
   firstName.setEditable(true);
   firstName.addFocuListener(new FocusAdapter(){
      @Overwrite
      public void focusGained(FocusEvent e){
         firstName.setText("");// remove help message, will also remove previously entered text!
         firstName.setFont(new JTextField().getFont()); // reset to default
      }
   }

确实删除了帮助消息 – Христо Петков

正如我提到的......

我想保留它 – Христо Петков

那么你可能也想在FocusListener接口中使用其他方法:

      @Overwrite
      public void focusLost(FocusEvent e){
         if(userDidNotEnterTextIn(firstName){ // hopefully you know how to find out...
            firstName.setText("Enter your name here");
         // do formatting again
         }
      }

【讨论】:

  • 嗯,确实删除了帮助消息,我想保留它很遗憾,所以我们已经接近但不完全在那里
  • 感谢它帮了很多忙,但我没有使用焦点,我只是做了同样的事情,但使用了 keyListener,我做了什么来使它工作以防其他人想知道:
  • @ХристоПетков:改用DocumentListener
  • @trashgod 你如何区分DocumentListener何时删除输入帮助?
  • @TimothyTruckle:我只是想让 OP 远离KeyListener; camickr 说明在TextPrompt 中使用DocumentListener,概述here 并引用here
猜你喜欢
  • 2017-04-16
  • 2012-11-12
  • 1970-01-01
  • 2023-02-01
  • 1970-01-01
  • 2022-10-05
  • 2017-12-16
  • 2023-03-10
  • 1970-01-01
相关资源
最近更新 更多