Как поместить JButton в JTextField (Java)? - PullRequest
2 голосов
/ 09 сентября 2010

Я бы хотел, чтобы JButton (с изображением значка папки) находился внутри JTextField, например, в дальнем правом углу JTextField, чтобы при нажатии кнопки открывался JFileChooser, а при выборе файла путь к файлу появляется внутри JTextField.

Я сделал этот код, но ничего не появляется.

public class TextFieldChooser extends JTextField {

    public ImageIcon folderIcon;
    public JButton btnFolder;

    public TextFieldChooser(int columns) {
        super(columns);
        btnFolder = new JButton();
        folderIcon = new ImageIcon(getClass().getResource("/resources/folder_find.png"));
        btnFolder.setIcon(folderIcon);
        this.add(btnFolder);

    }
}

Ответы [ 4 ]

6 голосов
/ 09 сентября 2010

Вы можете найти Component Border helpfull.Позволяет отображать кнопку в текстовом поле с помощью Border API.

5 голосов
/ 09 сентября 2010

Опираясь на то, что предложил Shakedown, я думаю, вы можете получить желаемый эффект относительно легко.То, что вы делаете, это JPanel, который содержит как текстовую область, так и рядом с ней кнопку.Затем установите текстовое поле так, чтобы оно не рисовало никаких границ, и присвойте JPanel границу фаски.Теперь это будет выглядеть как кнопка внутри текстовой области.Это может потребовать некоторой тонкой настройки, но это должно сработать.

4 голосов
/ 09 сентября 2010

Вы не можете не хотите поместить кнопку в текстовое поле. Вы должны разбить свое намерение на несколько компонентов - фактически 3.

Сначала вам понадобится родительский контейнер или что-то, что будет содержать как текстовое поле, так и кнопку; JPanel должно быть достаточно.

Тогда вам нужны ваши реальные компоненты, и под реальными я подразумеваю те, которые действительно что-то делают. Это ваши JTextField и JButton - добавьте их к JPanel. Чтобы добавить их и сделать так, чтобы они выглядели так, как вы хотите (с кнопкой в ​​углу), вам нужно указать макет для JPanel. Этот макет будет определять, куда добавляются компоненты (визуально) внутри JPanel.

Теперь, когда вы добавили эти вещи в JPanel, вы можете работать только со своим JPanel вместо того, чтобы думать в терминах содержащихся JTextField и JButton.

2 голосов
/ 08 июля 2016

Поскольку Pyrite еще не опубликовал свое окончательное решение, вот мое:

my_button = new JButton("x");
JFormattedTextField my_textfield = new JFormattedTextField("Nr.");
my_textfield.setBorder(javax.swing.BorderFactory.createEmptyBorder());

JPanel textfield_with_button = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0));
Border lowered_bevelborder = BorderFactory.createLoweredBevelBorder();
textfield_with_border.setBorder(lowered_bevelborder);

textfield_with_button.add(my_textfield);
textfield_with_button.add(my_button);

enter image description here

...