所以我对我的JTextField有疑问。 我想要做的是将JTextField框放在图片下方(某个城镇的地图)。 是的,我使用.setBounds并且它已经在图像下方,但我想要发生的是,如果我做.pack();,它必须仍然可见。不幸的是,事实并非如此。
我尝试使用.setBorder(BorderFactory.createEmptyBorder(5,50,0,50));我看到盒子在图片下面,但它不再可用于放置文本。
最后,我希望JTextField位于图片下方,并且每当我打包它时仍然必须可见。
请帮助。谢谢。 我仍处于发现GUI新事物的舞台上。 抱歉没有问题。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.JTextField;
class ProgDraftMain {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run() {
ProgDraft gui = new ProgDraft();
gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gui.setResizable(false);
gui.pack();
//gui.setSize(1000 , 1000);
gui.setVisible(true);
}
});
}
}
class ProgDraft extends JFrame {
private ImageIcon image1;
private JLabel label1;
private JTextField textField1;
ProgDraft() {
/***Panel**/
JPanel panel = new JPanel();
panel.setLayout(new FlowLayout(FlowLayout.LEADING));
/***Title***/
JLabel title = new JLabel("Perimeter Check", JLabel.CENTER);
Font font = new Font("Gigi", Font.BOLD, 50);
title.setFont(font);
/***Image***/
ImageIcon pics = new ImageIcon(getClass().getResource("antipolo.png"));
JLabel logo = new JLabel(pics);
logo.setBorder(BorderFactory.createEmptyBorder(10, 70, 0, 50));
logo.setToolTipText("Ito raw kunware yung barangay.");
panel.add(logo);
/***Info ANtipolo***/
String text = "Ito kunware ang ANtipolo" + "<br>" +
"Marami ditong landslide areas" + "<br>" + "<br>" +
"Take care and stay safe!" + "<br>" +
"I love my dogs" + "<br>" + "<br>" +"<br>" +
"Please help!";
JLabel dog = new JLabel("<html><div style=\"text-align: center;\">" + text + "</html>");
dog.setBorder(BorderFactory.createEmptyBorder(5,50,0,50));
panel.add(dog);
/***JTextFieldski**/
JTextField textField = new JTextField(6);
textField.setBorder(BorderFactory.createEmptyBorder(5,50,0,50));
textField.setBounds(210,470,100,25);
panel.add(textField);
getContentPane().setLayout(new BorderLayout());
getContentPane().add(textField, BorderLayout.SOUTH);
getContentPane().add(dog, BorderLayout.CENTER);
getContentPane().add(panel, BorderLayout.SOUTH);
getContentPane().add(title, BorderLayout.NORTH);
}
}
答案 0 :(得分:2)
我认为你昨天采纳了我的建议,使用EmptyBorder
有点过分了。您正在尝试将其用于像素完美位置。这不是他们的意思。不要担心像素完美定位。就像我昨天所说的那样,学习布局管理器并使用它们。您还可以使用不同的布局管理器将组件包装在面板中并嵌套面板。您不必尝试在一个面板上完美地完成所有事情。不同的布局管理者具有不同的特征和品质。
例如,您要做的是向BorderLayout.SOUTH
添加两个不同的组件。关于BorderLayout
的事情是每个职位只能有一个组件。最后一个增加了胜利。所以,我们能做些什么?如何将两个包装在面板中,然后将那个面板添加到SOUTH
:-)轻松吧?
同样关于EmptyBorders,请使用JLabel api。您可以setHorizontalAlignment
到JLabel.CENTER
。默认值为JLabel.LEADING
,因此所有文本都在左侧。如果将其设置为中心,则它将居中。
同样只是FYI,除非你使用null布局,否则setBounds将无效,我建议不要这样做。你不要用它。
这是重构(使用NO Empty Borders,让布局管理员完成我们付给他们的工作)
import java.awt.BorderLayout;
import java.awt.Font;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.JTextField;
class ProgDraftMain {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
ProgDraft gui = new ProgDraft();
gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gui.setResizable(false);
gui.pack();
//gui.setSize(1000 , 1000);
gui.setVisible(true);
}
});
}
}
class ProgDraft extends JFrame {
private ImageIcon image1;
private JLabel label1;
private JTextField textField1;
ProgDraft() {
/**
* Main Panel
*/
JPanel mainPanel = new JPanel(new BorderLayout());
/**
* *Title**
*/
JLabel title = new JLabel("Perimeter Check", JLabel.CENTER);
Font font = new Font("Gigi", Font.BOLD, 50);
title.setFont(font);
mainPanel.add(title, BorderLayout.PAGE_START); // add title to top
/**
* *Info ANtipolo**
*/
String text = "Ito kunware ang ANtipolo" + "<br>"
+ "Marami ditong landslide areas" + "<br>" + "<br>"
+ "Take care and stay safe!" + "<br>"
+ "I love my dogs" + "<br>" + "<br>" + "<br>"
+ "Please help!";
JLabel dog = new JLabel("<html><div style=\"text-align: center;\">" + text + "</html>");
dog.setHorizontalAlignment(JLabel.CENTER);
mainPanel.add(dog); // add dog to center
/**
* *Image** ==========>>>>>> Make sure to change the image name back.
*/
ImageIcon pics = new ImageIcon(getClass().getResource("stackoverflow.png"));
JLabel logo = new JLabel(pics);
logo.setHorizontalAlignment(JLabel.CENTER);
//logo.setBorder(BorderFactory.createEmptyBorder(10, 70, 0, 50));
logo.setToolTipText("Ito raw kunware yung barangay.");
/**
* Wrapper for text field and icon
*/
JPanel iconFieldPanel = new JPanel(new BorderLayout());
JTextField textField = new JTextField(10);
iconFieldPanel.add(logo);
iconFieldPanel.add(textField, BorderLayout.PAGE_END);
JPanel iconFieldWrapper = new JPanel();
iconFieldWrapper.add(iconFieldPanel);
mainPanel.add(iconFieldWrapper, BorderLayout.PAGE_END); // add icon and field to bottom
getContentPane().add(mainPanel);
}
}
并且pleeease确实需要一些时间来浏览我为使用布局管理器提供的链接。一次研究一个并掌握每个问题。这是一门艺术,所以它需要时间,就像其他任何东西一样。