Is there a way to make JTextField for my address bar larger and curvier(有没有办法让我的地址栏的 JTextField 更大更弯曲)
问题描述
我正在制作浏览器只是为了练习我的 Java 技能,有没有办法让我的地址栏(JTextField)更大而不是摇摆的默认值,也更弯曲.这是我的代码.
I'm making a browser just to practice my Java skills, is there a way to make my address bar which is a JTextField, larger instead of the swing's default value and also curvier. Here's my code.
//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 页面一样,我还需要学习什么才能使其工作.
I want to make a really usable browser, like I want the html and its' CSS pages to show, what else do I have to learn to make this work.
推荐答案
几乎所有这些都归结为操纵边框,但这可能不会产生你想要的结果,例如......
Almost all of this comes down to manipulating the border, but this may not produce the results your after, for example...
JTextField field = new JTextField(10);
field.setBorder(new CompoundBorder(field.getBorder(), new EmptyBorder(10, 0, 10, 0)));
创建圆角边框比较困难...
Creating a rounded border is more difficult...
还有曲线
有几种方法可以实现,例如,您可以创建自己的 Border
,例如...
There are a few ways you might achieve, this for example, you could create a Border
of your own, for example...
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();
}
}
然后将其应用到您的领域...
Then apply it to your field...
field.setBorder(new CompoundBorder(new RoundedBorder(), new EmptyBorder(10, 0, 10, 0)));
这会产生类似...
但我不喜欢这样,因为如果你仔细观察,边框外的区域仍然是绘制的......你可以让边框填充这个区域,但我喜欢能够为组件提供透明功能,所以你可以伪造它......
But I don't like this, as, if you look closely, the area outside the border is still painted...You could have the border fill this area, but I like having the ability to provide transparent capabilities to components, so instead, you could fake it...
基本上,它所做的就是创建一个自定义组件,可以在字段周围绘制,但是,因为它可以更好地控制绘制过程,还可以提供边框外的透明效果......
Basically, what this does is creates a custom component that can paint the around the field, but, because it can better control the painting process, can also provide transparency outside the border effect...
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();
}
}
当然,这只是一堆示例,您需要自己清理它并为值提供自定义;)
This is just a bunch of examples of course, you'll need to clean it up and provide customisation to the values yourself ;)
这篇关于有没有办法让我的地址栏的 JTextField 更大更弯曲的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:有没有办法让我的地址栏的 JTextField 更大更弯曲
基础教程推荐
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01