当前位置: 首页 > 知识库问答 >
问题:

有没有办法让我的地址栏JTextField更大更弯曲

裴鸿熙
2023-03-14

我制作一个浏览器只是为了练习我的Java技能,有没有办法让我的地址栏(JTextField)比swing的默认值更大,也更弯曲。这是我的密码。

//imports of the GUI 
//import java.awt.*;
 //import java.awt.event.*;
 //import javax.swing.*;
 //import javax.swing.event.*;
 //import javax.swing.text.*;
 //import javax.swing.GroupLayout.*;

  //extends is to use the GUI class 
public class ReadFile extends JFrame {
private JTextField addressBar; //to have the address bar 
private JEditorPane display;  //display the html information
 //constructor 

//Set the frame icon to an image loaded from a file.
public ReadFile() {
    super("SPHERE"); //name of the browser


    addressBar = new JTextField("enter an URL", 50); //inside the URL 
    addressBar.addActionListener(
            new ActionListener(){
                public void actionPerformed(ActionEvent event){
                loadCrap(event.getActionCommand());
                }
}

    );
    add(addressBar, BorderLayout.NORTH);



    display = new JEditorPane();
    display.setEditable(false);
    display.addHyperlinkListener(
            new HyperlinkListener(){
            public void hyperlinkUpdate(HyperlinkEvent event){
            if(event.getEventType()==HyperlinkEvent.EventType.ACTIVATED){
            loadCrap(event.getURL().toString());

            }
            }
            } 
    );
    add(new JScrollPane(display), BorderLayout.CENTER);
    setSize(600,200);
    setVisible(true);

   }
  //load crap to display on the screen
    private void loadCrap(String userText){
    try{display.setPage(userText);
    addressBar.setText(userText);}catch(Exception e){System.out.println("crap!")}
    }



    } 

我想制作一个真正可用的浏览器,就像我想让html及其CSS页面显示一样,我还需要学习什么才能使其工作。

共有2个答案

洪伟兆
2023-03-14

我不知道你说的“曲线更大”是什么意思。但这里有一种调整大小和设置字体的方法:

    addressBar.setFont(new Font("TimesRoman", Font.ITALIC, 30));
邬浩涆
2023-03-14

几乎所有这一切都归结为操纵边界,但这可能不会产生您之后的结果,例如。。。

JTextField field = new JTextField(10);
field.setBorder(new CompoundBorder(field.getBorder(), new EmptyBorder(10, 0, 10, 0)));

创建圆形边框更困难...

而且曲线更弯

有几种方法可以实现,例如,您可以创建自己的边界,例如...

public class RoundedBorder extends AbstractBorder {

    @Override
    public Insets getBorderInsets(Component c, Insets insets) {
        insets.left = 5;
        insets.right = 5;
        insets.top = 5;
        insets.bottom = 5;

        return insets;
    }

    @Override
    public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
        Graphics2D g2d = (Graphics2D) g.create();
        RoundRectangle2D shape = new RoundRectangle2D.Float(0, 0, width - 1, height - 1, 20, 20);
        g2d.setColor(Color.BLACK);
        g2d.draw(shape);
        g2d.dispose();
    }

}

然后应用到你的领域...

field.setBorder(new CompoundBorder(new RoundedBorder(), new EmptyBorder(10, 0, 10, 0)));

这会产生类似。。。

但我不喜欢这样,因为,如果你仔细看,边界外的区域仍然是油漆的。。。你可以让边界填充这个区域,但我喜欢有能力为组件提供透明的功能,所以你可以假装它。。。

基本上,这所做的是创建一个自定义组件,可以绘制周围的字段,但是,因为它可以更好地控制绘制过程,也可以提供边界之外的透明度效果......

public class FakeRoundedBorder extends JPanel {

    private JTextField field;

    public FakeRoundedBorder(JTextField field) {
        this.field = field;
        setBorder(new EmptyBorder(5, 5, 5, 5));
        field.setBorder(new EmptyBorder(10, 0, 10, 0));
        setLayout(new BorderLayout());
        add(field);
        setOpaque(false);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g.create();
        RoundRectangle2D shape = new RoundRectangle2D.Float(0, 0, getWidth() - 1, getHeight() - 1, 20, 20);
        g2d.setColor(field.getBackground());
        g2d.fill(shape);
        g2d.setColor(Color.BLACK);
        g2d.draw(shape);
        g2d.dispose();
    }

}

当然,这只是一堆示例,您需要清理它并自己为这些值提供定制;)

 类似资料:
  • 更新: 谢谢所有的帮助。我将总结一下答案。 从@Jayde开始,他的回答成功地将结果减少到0.09秒,并且与限制中的数字成线性关系。 选择*from(选择table1.id作为table1\u id,从table1中选择table1.id 在@Rick James中,他提到这可能是表2的问题。因为我的表2只有几列,所以我可以省略它,自己进行连接,即使是在客户端! 所以我去掉了表2,它只有0.02s

  • 由于没有快速的lambda计算器,我使用上面的策略将非类型化lambda演算的术语编译为Haskell,以便快速计算它们。我对它的性能印象深刻:该程序创建了一个从到的数字列表,并在我的计算机上在不到一秒钟的时间内将它们相加。这比我预期的要快得多--只比Haskell直接等价物慢4倍--并且足以对我的目标有用。但是,请注意,为了满足类型系统的需要,我必须将函数和术语包装在fun/num构造函数下面。

  • 问题内容: 请考虑以下表格: 部 员工 编写查询以返回人员总数为4或更多的那些部门的雇员的empname和deptname列。记录应按姓氏的字母顺序返回 这是我的看法: 您将如何对此进行改进? 问题答案: 这比较短,而且执行速度可能也更快 从分组开始。您不需要内部查询中的COUNT。然后,联接两个表只是为了获得名称。 *之所以使用 *INNER JOIN, 是因为一旦计数完成,我们已经知道 员工存

  • 有没有办法让我有条件地跳过Cucumber java中的场景? 在下面的图片中,当新闻发布部分没有可用数据时,我想跳过为数据检查编写的场景。 我计划首先检查没有可用数据的场景,如果它成功执行,然后跳过其余的场景。 添加功能文件以获得更多理解: 背景:给定主页显示当我导航到“XYZ”菜单时,应显示“新闻稿”部分 在上述文件中,如果@News 和“新闻稿”部分是否应该检查无数据存在 返回肯定的结果,然

  • 所以我正在做一个需要xml模式的小项目,我对这个模式很不熟悉。 我希望能够设置模式以在两组属性之间进行选择,根据我的研究,这在XSD 1.0中是不可能的,但显然是XSD 1.1的一个特性。 目前我正在使用VisualStudio来完成我的工作,它似乎被困在XSD1.0模式中,这是有意义的,因为XSD1.1显然是一个最新的开发。 我的问题是,是否有一个插件/扩展可以让我在Visual Studio中

  • 问题内容: 我想根据一个简单的标准更新一组行,并获取已更改的PK列表。我以为我可以做这样的事情,但担心可能出现的并发问题: 如果将其包装在事务中,是否会发生任何并发问题?还是有更好的方法来做到这一点? 问题答案: 考虑查看OUTPUT子句: