Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用边框布局Swing创建GUI_Java_Swing_Layout Manager_Border Layout_Null Layout Manager - Fatal编程技术网

Java 使用边框布局Swing创建GUI

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();

我正在尝试用java创建GUI。我的gui将是简单的。你可以从这里看到我想要什么:

为了做到这一点,我决定使用网络上建议的BorderLayout。我有两个Jpanel对象,我把它们放在jFrame中,它的布局是borderlayout。您可以在下面看到我的简化代码:

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之前您能从我那里得到的最好答案。