java - 使 TitledBorder 标题可编辑

标签 java swing titled-border

有没有办法使 TitledBorder 中的标题可编辑,以便用户可以编辑标题是什么?或者如果有另一个边界可以允许这样做,它是什么?

Box.setBorder(new TitledBorder(editableString));

编辑:

以下是我基于双击进行编辑的更具体问题的链接: Make TitledBorder editable upon double click

最佳答案

基本上,保留对标题边框的引用,在需要时更改它,然后用边框重新绘制组件。如下:更改文本字段中的文本,然后按Enter查看效果。

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

public class EditableTitledBorder {

    private JComponent ui = null;
    private TitledBorder titledBorder;

    EditableTitledBorder() {
        initUI();
    }

    public void initUI() {
        if (ui!=null) return;

        ui = new JPanel(new BorderLayout(4,4));
        String initialTitle = "Dark Image";
        titledBorder = new TitledBorder(initialTitle);
        ui.setBorder(titledBorder);
        final JTextField titleField = new JTextField(initialTitle);
        ActionListener changeTitleListener = new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                titledBorder.setTitle(titleField.getText());
                ui.repaint();
            }
        };
        titleField.addActionListener(changeTitleListener);
        ui.add(titleField, BorderLayout.PAGE_START);
        ui.add(new JLabel(new ImageIcon(
                new BufferedImage(200,40,BufferedImage.TYPE_INT_RGB))));
    }

    public JComponent getUI() {
        return ui;
    }

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (Exception useDefault) {
                }
                EditableTitledBorder o = new EditableTitledBorder();

                JFrame f = new JFrame(o.getClass().getSimpleName());
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                f.setLocationByPlatform(true);

                f.setContentPane(o.getUI());
                f.pack();
                f.setMinimumSize(f.getSize());

                f.setVisible(true);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}

关于java - 使 TitledBorder 标题可编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51404241/

相关文章:

java - 获取字符串并一次与多个枚举类型进行比较

java - 如何使用 JGoodies 绑定(bind) float 或 double

java - 在 JTabbedPane 中使用 JTextField 格式化 JPanel

java - TitledBorder 标题更新/刷新延迟,为什么?

java - 如何比较日期数组值

Java并发修改递归行为

Java L&F定制: How do I use synth to customize BorderFactory borders?

java - JPanel TitledBorder 中的标题截断 - Java swing

java - 在几秒钟内从 Spring MVC 中的表中获取 400K 数据

java - JTextArea 使文本不可见