用Java创建GUI

用Java创建GUI,java,swing,user-interface,Java,Swing,User Interface,我曾经用java创建过一些基本的GUI。非常简单,我试图实现的是一个给定字体的标题,JPanel下面是一个包含5个不同按钮的JPanel,这些按钮的间距和大小相等,带有一个修改功能,允许分辨率以比例因子(比如0.75)进行更改,JPanel不会触及屏幕边缘,但是有一个20像素的边界。我希望实现的是,用户能够输入他们想要的任何分辨率,并且它仍然保持相同的基本设计,从而使其与其他设备兼容 到目前为止,我一直在使用的代码是: package prototype1; import java.awt.

我曾经用java创建过一些基本的GUI。非常简单,我试图实现的是一个给定字体的标题,
JPanel
下面是一个包含5个不同按钮的
JPanel
,这些按钮的间距和大小相等,带有一个修改功能,允许分辨率以比例因子(比如0.75)进行更改,
JPanel
不会触及屏幕边缘,但是有一个20像素的边界。我希望实现的是,用户能够输入他们想要的任何分辨率,并且它仍然保持相同的基本设计,从而使其与其他设备兼容

到目前为止,我一直在使用的代码是:

package prototype1;

import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class GUI {


public static void main(String[] args){
    stateManager();
}

static public JFrame menu = new JFrame("Menu Screen");
static public double modifier = 1;
static public int width = 750;
static public int height = 1334;

static void stateManager(){

    JFrame.setDefaultLookAndFeelDecorated(true);

    AL demo = new AL();
    menu.setContentPane(demo.contentPanel1());

    menu.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    menu.setSize((int) (width * modifier),(int) (height * modifier));
    System.out.println((int)(width * modifier));
    menu.setVisible(true);
}


static class AL implements ActionListener{
    JLabel titleLabel;
    JButton checkStar;
    JPanel buttonScreenMenu;

    public JPanel contentPanel1(){
        JPanel totalGUI = new JPanel();
        totalGUI.setLayout(null);
        totalGUI.setBackground(Color.white);

        int x = width;
        int y = height;

        titleLabel = new JLabel("Select what it is you would like to do!");
        titleLabel.setFont(new Font("Castellar",Font.PLAIN, (int) (18 * modifier)));
        titleLabel.setLocation(0,(int) (40 * modifier));
        titleLabel.setSize((int) (x * modifier),(int) (30 * modifier));
        titleLabel.setHorizontalAlignment(0);
        totalGUI.add(titleLabel);

        buttonScreenMenu = new JPanel();
        buttonScreenMenu.setLocation((int) (20 * modifier) , (int) (100 * modifier));
        buttonScreenMenu.setSize((int) ((x - 40) * modifier),(int) ((y - 120) * modifier));
        buttonScreenMenu.setBorder(BorderFactory.createLineBorder(Color.black));
        totalGUI.add(buttonScreenMenu);

        checkStar = new JButton("Work out a Star");
        checkStar.setLocation((int)(20 * modifier),(int)(20 * modifier));
        checkStar.setSize(buttonScreenMenu.getWidth() - 40, (int) (buttonScreenMenu.getHeight() / 4) - 40);
        checkStar.setBackground(Color.white);
        buttonScreenMenu.add(checkStar);



        return totalGUI;


    }

    @Override
    public void actionPerformed(ActionEvent e) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
}


}
然而,我在这里停了下来,因为我没有得到任何接近我想要的结果。此代码的输出如下所示:


如何解决分辨率问题?

根据cricket的说法,使用绝对位置将导致并给您带来许多问题。我建议您考虑使用布局管理器,例如,它与您希望显示节点的方式完全相同。您只需在节点之间添加间距。你可以看看怎么做


因此,如果您仍然希望用户输入其框架的尺寸,也可以选择。你所要做的就是设置jframe的尺寸,一切都会自动调整。

你应该了解SwingMy提供的各种布局管理器。我的建议是使用GUI Swing builder。我过去使用过它们,但这对我来说是a级课程,我觉得如果我可以自己编写代码,而不是使用布局管理器,但如果这是唯一的选择,我将使用它。(1+)使用布局管理器,尽管您应该研究GridLayout,因为这将提供每个组件的相同大小。有关工作示例,请参见上的Swing教程。