本文介绍了Java Swing的1.6的TextInput如Firefox吧的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建一个textwidget /组件至极看起来像Firefox地址栏中。我的意思是文本字段至极让我把里面的字段小按钮(例如取消/重装/...)

我试图定制的JLayeredPane,通过创建最大化文本字段定制的布局管理器,并从右至左放置其余部分。我的问题是这样了绘画的问题,我不会总是看到我添加了文本字段的项目。这可能是Jython的关系,我尝试suppling java.lang.Integer中的(1) JLayeredPane.add 。然而,图层排序正好相反的文件说什么。

要cricumvent这个我得出我自己的的JLayeredPane 类,并重新定义了油漆调用 paintComponents 这反过来又遍历所有的组件,并调用其绘制方法,从文本框,其余其后。

不过,我并不总是得到更新向右走,这意味着按钮隐藏/只显示部分,我不能用按钮进行交互。


  1. 什么我都实际上可以在屏幕上看到此更新(它是在一个缓冲区隐藏?))

  2. 我怎样才能让这个我可以用按钮交互?

  3. 如何缩短Texxtfield,使文本开始滚动至前前我到了文本字段的结束,使文本没有得到通过按钮隐藏?我仍然希望文本框区域中的按键延长

修改:在我使窗口变小,之后,它也可点击该按钮只显示在正确的地方。

EDIT2
我把自由熬下来回答这个,隐藏走了很多的按钮code /不必要的东西。

 进口java.awt中的*。
进口java.awt.event.ItemEvent中;
进口java.awt.event.ItemListener;
进口的javax.swing *。公共类操场{    私人图标errorIcon = UIManager.getIcon(OptionPane.errorIcon);
    私人图标infoIcon = UIManager.getIcon(OptionPane.informationIcon);
    私人图标warnIcon = UIManager.getIcon(OptionPane.warningIcon);    公共运动场(){
        的JPanel面板=新JPanel();
        panel.setLayout(新的BorderLayout());        panel.add(makeButton(),BorderLayout.WEST);        JTextField的文本=新的JTextField(20);
        text.setBorder(NULL);
        panel.add(文字,BorderLayout.CENTER);
        JPanel的buttonsPanel =新JPanel();
        buttonsPanel.setOpaque(假);
        buttonsPanel.setLayout(新的GridLayout(1,2,2,2));        buttonsPanel.add(makeButton());
        buttonsPanel.add(makeButton());        panel.add(buttonsPanel,BorderLayout.EAST);
        panel.setBackground(text.getBackground());        的JMenuBar菜单栏=新的JMenuBar();
        menuBar.add(面板);
        menuBar.add(Box.createHorizo​​ntalGlue());
        JFrame的帧=新的JFrame(MenuGlueDemo);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(菜单栏);
        frame.pack();
        frame.setVisible(真);
    }    公共JToggleButton中makeButton(){
        最后JToggleButton中按钮=新JToggleButton中();
        button.setFocusable(假);
        button.setMargin(新插图(0,0,0,0));
        button.setContentAreaFilled(假);
        button.setBorder(NULL);        button.setIcon((errorIcon));
        button.setRolloverIcon((infoIcon));
        button.setSelectedIcon(warnIcon);
        button.set pressedIcon(warnIcon);        button.addItemListener(新的ItemListener(){            @覆盖
            公共无效itemStateChanged(一个ItemEvent E){
                如果(button.isSelected()){
                }其他{
                }
            }
        });        返回按钮;
    }    公共静态无效的主要(字串[] args){
        javax.swing.SwingUtilities.invokeLater(新的Runnable(){            @覆盖
            公共无效的run(){
                操场menuGlueDemo =新操场();
            }
        });
    }
}


解决方案

可能是它可以使用的,用的例如:

 进口java.awt.ComponentOrientation中;
进口的javax.swing *。公共类MenuGlueDemo {    公共MenuGlueDemo(){
        的JMenuBar菜单栏=新的JMenuBar();
        menuBar.add(createMenu(菜单1));
        menuBar.add(createMenu(菜单2));
        menuBar.add(createMenu(菜单3));
        menuBar.add(新JSeparator的());
        menuBar.add(的新的JButton(SEACH ....));
        menuBar.add(新的JTextField(SEACH ....));
        menuBar.add(新JComboBox中(新的对象[] {高度,长度,卷}));
        menuBar.add(Box.createHorizo​​ntalGlue());
        menuBar.add(createMenu(关于));
        JFrame的帧=新的JFrame(MenuGlueDemo);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(菜单栏);
        frame.pack();
        frame.setVisible(真);
    }    公共JMenu的createMenu(字符串名称){
        JMenu的M =新JMenu,(职称);
        m.add(+标题,在菜单项#1);
        m.add(菜单项#2+称号);
        m.add(+标题,在菜单项#3);
        如果(title.equals(关于)){
            m.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
        }
        返回米;
    }    公共静态无效的主要(字串[] args){
        javax.swing.SwingUtilities.invokeLater(新的Runnable(){            @覆盖
            公共无效的run(){
                MenuGlueDemo menuGlueDemo =新MenuGlueDemo();
            }
        });
    }
}

修改

with proper LayoutManager

import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.*;

public class MenuGlueDemo {

    private Icon errorIcon = UIManager.getIcon("OptionPane.errorIcon");
    private Icon infoIcon = UIManager.getIcon("OptionPane.informationIcon");
    private Icon warnIcon = UIManager.getIcon("OptionPane.warningIcon");

    public MenuGlueDemo() {
        JPanel panel = new JPanel();
        panel.setLayout(new BorderLayout());
        JButton button = new JButton();
        button.setFocusable(false);
        //button.setMargin(new Insets(0, 0, 0, 0));
        button.setContentAreaFilled(false);
        button.setIcon((errorIcon));
        button.setPressedIcon(warnIcon);
        panel.add(button, BorderLayout.WEST);
        JTextField text = new JTextField(20);
        text.setBorder(null);
        panel.add(text, BorderLayout.CENTER);
        JPanel buttonsPanel = new JPanel();
        buttonsPanel.setOpaque(false);
        buttonsPanel.setLayout(new GridLayout(1, 2, 2, 2));
        final JToggleButton toggleButton = new JToggleButton();
        toggleButton.setFocusable(false);
        toggleButton.setMargin(new Insets(0, 0, 0, 0));
        toggleButton.setContentAreaFilled(false);
        toggleButton.setIcon((errorIcon));
        toggleButton.setRolloverIcon((infoIcon));
        toggleButton.setSelectedIcon(warnIcon);
        toggleButton.setPressedIcon(warnIcon);
        toggleButton.addItemListener(new ItemListener() {

            @Override
            public void itemStateChanged(ItemEvent e) {
                if (toggleButton.isSelected()) {
                } else {
                }
            }
        });
        buttonsPanel.add(toggleButton);
        final JToggleButton toggleButton1 = new JToggleButton();
        toggleButton1.setFocusable(false);
        toggleButton1.setMargin(new Insets(0, 0, 0, 0));
        toggleButton1.setContentAreaFilled(false);
        toggleButton1.setIcon((errorIcon));
        toggleButton1.setRolloverIcon((infoIcon));
        toggleButton1.setSelectedIcon(warnIcon);
        toggleButton1.setPressedIcon(warnIcon);
        toggleButton1.addItemListener(new ItemListener() {

            @Override
            public void itemStateChanged(ItemEvent e) {
                if (toggleButton1.isSelected()) {
                } else {
                }
            }
        });
        buttonsPanel.add(toggleButton1);
        panel.add(buttonsPanel, BorderLayout.EAST);
        panel.setBackground(text.getBackground());
        JMenuBar menuBar = new JMenuBar();
        menuBar.add(createMenu("Menu 1"));
        menuBar.add(createMenu("Menu 2"));
        menuBar.add(createMenu("Menu 3"));
        menuBar.add(new JSeparator());
        menuBar.add(new JButton("   Seach ....  "));
        menuBar.add(panel);
        menuBar.add(new JComboBox(new Object[]{"height", "length", "volume"}));
        menuBar.add(Box.createHorizontalGlue());
        menuBar.add(createMenu("About"));
        JFrame frame = new JFrame("MenuGlueDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(menuBar);
        frame.pack();
        frame.setVisible(true);
    }

    private JMenu createMenu(String title) {
        JMenu m = new JMenu(title);
        m.add("Menu item #1 in " + title);
        m.add("Menu item #2 in " + title);
        m.add("Menu item #3 in " + title);
        if (title.equals("About")) {
            m.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
        }
        return m;
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                MenuGlueDemo menuGlueDemo = new MenuGlueDemo();
            }
        });
    }
}

这篇关于Java Swing的1.6的TextInput如Firefox吧的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-02 16:28