Настройка JTextField - PullRequest
       6

Настройка JTextField

4 голосов
/ 15 мая 2011

Я хотел бы знать, как настроить интерфейс jtextfield, чтобы я мог создать закругленную прямоугольную рамку, не выходя за границы документа.

До сих пор я думаю, что попробовал большую часть того, что я могуПодумайте, я создал новый класс FieldView и изменил форму в методе рисования в соответствии с моей настраиваемой границей, на которой нарисованы закругленные прямоугольники. Единственный способ, которым мне как-то удалось избавиться от белого текстового поля документа / вида, было установить его непрозрачным.но я думаю, что должен быть другой путь без установки непрозрачного значения.

Есть ли у вас какой-либо опыт по настройке laf jtextfield, напишите мне, я даже безуспешно прочитал расширенную книгу по Core Swing, и если вы попробуете поискать в Google, сообщите мне поисковую фразу, как я пыталсяс такими ключевыми словами, как «стиль», «настройка», «пользовательский интерфейс», «плаф», «лаф» и что нет.

Я искренне надеюсь, что вы можете подтолкнуть меня в правильном направлении, и я надеюсь, что никто не будетиз этого я действительно использовал все свои ресурсы.

С уважением.

Ответы [ 3 ]

4 голосов
/ 29 мая 2014

Вчера я хотел решить почти ту же проблему, и ваша мысль вдохновила меня, и я наконец нашел решение.

  1. Чтобы создать документ внутри границы JTextField, вы можете использовать

javax.swing.border.EmptyBorder.EmptyBorder (вставляет borderInsets)

2. Чтобы избежать пробелов в четырех углах JTextField, вы можете использовать

g2d.setStroke (новый BasicStroke (12));

перед рисованием круглого прямоугольника. Ширина обводки зависит от ваших требований и просто сделайте ее достаточно широкой, чтобы охватить пространство в углу.

Это код:

import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.AbstractBorder;
import javax.swing.border.EmptyBorder;


public class JTextFieldTest {
    JTextField textField;
    boolean activate = false;

    public void createUI(){
        JFrame frame = new JFrame("Test JTextField");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(true);

        MainPanel mainPanel = new MainPanel();
        mainPanel.setBorder(BorderFactory.createEmptyBorder(5, 10, 5, 10));
        frame.add(mainPanel,BorderLayout.CENTER);

        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        JTextFieldTest jTextFieldTest = new JTextFieldTest();
        jTextFieldTest.createUI();
    }

    public void setActivate(boolean activate){
        this.activate = activate;
    }

    @SuppressWarnings("serial")
    class MainPanel extends JPanel{
        public MainPanel(){

            textField = new JTextField("Please input:");
            Font fieldFont = new Font("Arial", Font.PLAIN, 20);
            textField.setFont(fieldFont);
            textField.setBackground(Color.white);
            textField.setForeground(Color.gray.brighter());
            textField.setColumns(30);
            textField.setBorder(BorderFactory.createCompoundBorder(
                    new CustomeBorder(), 
                    new EmptyBorder(new Insets(15, 25, 15, 25))));
            textField.addActionListener(new FieldListener());
            textField.addMouseListener(new FieldMouseListener());


            add(textField,BorderLayout.CENTER);
            setBackground(Color.blue);
            setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
        }
    }

    @SuppressWarnings("serial")
    class CustomeBorder extends AbstractBorder{
        @Override
        public void paintBorder(Component c, Graphics g, int x, int y,
                int width, int height) {
            // TODO Auto-generated method stubs
            super.paintBorder(c, g, x, y, width, height);
            Graphics2D g2d = (Graphics2D)g;
            g2d.setStroke(new BasicStroke(12));
            g2d.setColor(Color.blue);
            g2d.drawRoundRect(x, y, width - 1, height - 1, 25, 25);
        }   
    }

    class FieldListener implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
            System.out.println(textField.getText());
        }

    }

    class FieldMouseListener implements MouseListener{
        @Override
        public void mouseClicked(MouseEvent e) {
            // TODO Auto-generated method stub
            if(activate == false){
                textField.setText("");
            }
            activate = true;
            textField.setForeground(Color.black);
        }

        @Override
        public void mousePressed(MouseEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseReleased(MouseEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseEntered(MouseEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseExited(MouseEvent e) {
            // TODO Auto-generated method stub

        }
    }
}

Это эффект:

enter image description here

Для более подробной информации, вы можете просмотреть Каксделать круглый прямоугольник JTextField

1 голос
/ 15 мая 2011

Вы должны быть в состоянии сделать это с границами Swing. Я опубликовал некоторый код для того, как сделать закругленные границы давно, здесь - возможно, вы можете адаптировать его: http://weblogs.java.net/blog/timboudreau/archive/2005/02/jnn_just_got_pr.html

0 голосов
/ 31 мая 2012

Если вы хотите настроить отдельные компоненты, есть способ сделать это в любом компоненте.Пожалуйста, проверьте этот учебник: http://www.eecchhoo.wordpress.com/2012/11/05/screencast-swingmakeover-extreme-java-gui-programming

Он содержит краткое резюме и ссылку для загрузки видеоурок.К вашему сведению, видео на индонезийском языке, поэтому, если у вас есть проблемы с выполнением этого шага, есть еще одна ссылка для загрузки проекта, который он использовал для создания учебника.

Пожалуйста, сообщите мне, если у вас есть какие-либо проблемы.Я надеюсь, что ссылка поможет

...