Java 使用边框布局Swing创建GUI
我正在尝试用java创建GUI。我的gui将是简单的。你可以从这里看到我想要什么: 为了做到这一点,我决定使用网络上建议的BorderLayout。我有两个Jpanel对象,我把它们放在jFrame中,它的布局是borderlayout。您可以在下面看到我的简化代码:Java 使用边框布局Swing创建GUI,java,swing,layout-manager,border-layout,null-layout-manager,Java,Swing,Layout Manager,Border Layout,Null Layout Manager,我正在尝试用java创建GUI。我的gui将是简单的。你可以从这里看到我想要什么: 为了做到这一点,我决定使用网络上建议的BorderLayout。我有两个Jpanel对象,我把它们放在jFrame中,它的布局是borderlayout。您可以在下面看到我的简化代码: private Display display= new Display(); // Display extends JPanel public Simulation() { super();
private Display display= new Display(); // Display extends JPanel
public Simulation()
{
super();
// frame settings
setTitle("Label of JFrame ");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setBounds(100,100,1094,560);
contentPane=this.getContentPane();
setResizable(false);
contentPane.setLayout(new BorderLayout());
try {
LeftPanelLogo=ImageIO.read(new File("logo.png"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// generate left panel (information panel)
leftPanel=new JPanel(){
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2d=(Graphics2D)g;
g2d.drawImage(LeftPanelLogo, 10, 250, null);
}
};
//leftPanel.setLayout(null);
// add panels to contentPane
leftPanel.setBackground(Color.WHITE);
display.setBackground(Color.BLACK);
contentPane.add(leftPanel,BorderLayout.WEST);
contentPane.add(display,BorderLayout.CENTER);
}
在显示类构造函数中,我只有以下代码:
try
{
bgPicture = ImageIO.read(new File("bg.jpg"));
}
catch (IOException e)
{
e.printStackTrace();
}
当我运行代码时,我看到几乎所有的屏幕都是由中间的面板完成的,而我看不到左边的面板(换句话说,所有的屏幕都是黑色的,因为我将显示面板的背景设置为黑色)
那么,我怎样才能修复它呢
import java.awt.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
public class LogoLayout {
private JComponent ui = null;
LogoLayout() {
initUI();
}
public void initUI() {
if (ui!=null) return;
ui = new JPanel(new BorderLayout(4,4));
ui.setBorder(new EmptyBorder(4,4,4,4));
BufferedImage logo = new BufferedImage(
276,560,BufferedImage.TYPE_INT_RGB);
/* All that's needed */
ui.add(new JLabel(new ImageIcon(logo)), BorderLayout.LINE_START);
ui.add(new JTextArea("Display", 3, 44));
/* All that's needed */
}
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) {
}
LogoLayout o = new LogoLayout();
JFrame f = new JFrame("Logo Layout");
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);
}
}
leftPanel.setLayout(null)代码>Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作。因此,它们不利于像素完美布局。而是使用布局管理器,或与布局填充和边框一起使用。使用布局也可能是这个问题的解决方案。@AndrewThompson感谢您提供的信息,但尽管我把它放在了评论中,它并没有改变任何东西1)为了更快地获得更好的帮助,请发布一个(最小完整的可验证示例)或(简短、自包含、正确的示例)。2) 例如,获取图像的一种方法是热链接到中看到的图像。3) 请学习常见的Java命名法(命名约定-例如,EachWordUpperCaseClass
,firstWordLowerCaseMethod()
,firstWordLowerCaseAttribute
,除非它是一个大写常量
),并始终如一地使用它。我想,我使用的命名法是正确的,虽然它是离题的,但你能给我举个例子说明我在哪里不正确地使用了它吗?我看不出为什么leftPanel
是自定义绘制的。只需将图像添加到ImageIcon
,将图像图标添加到JLabel
,然后将标签添加到(标准)JPanel
。它将返回一个合理的首选大小,供pack()使用代码>@Andrew_Thompson抱歉,这是我的错,系统故障,如果这有助于解决问题,请。@Andrew_Thompson我想你误解了我,在我的问题中,我问了两个面板,第一个面板包含徽标和一些文本,第二个面板(显示面板)我会放一个背景图像,在你的解决方案中我做不到“第一个面板包含一个徽标和一些文本”您确实意识到JLabel
可以包含图像和文本,对吗?此外,我建议您在半小时前发布一个MCVE/SSCCE(与不可编译的代码片段相反)。这是在我看到您的MCVE之前您能从我那里得到的最好答案。